目前我知道有3种dll注入的方式:
1. 在目标进程的地址空间,用CreateRemoteThread启动新的线程,线程入口为LoadLibrary这个API,参数为dll文件全路径,通过那个线程的执行,实现DLL加载。
2. 此法只能在目标Exe文件执行之前使用。此法先创建挂起状态的目标进程,得到目标进程在内存中入口函数的地址,然后将入口函数开始的一段内存数据备份起来,填充上调用LoadLibrary的代码,然后解挂进程,待其执行完加载DLL的操作,再用备份数据恢复原入口函数头部,继续执行目标进程即可。
3. 使用SetWindowsHookEx给目标进程挂钩子函数的同时,顺便让钩子函数所在的DLL进入到目标进程的地址空间。
我想了解一下,还有其他的方法么?
1. 在目标进程的地址空间,用CreateRemoteThread启动新的线程,线程入口为LoadLibrary这个API,参数为dll文件全路径,通过那个线程的执行,实现DLL加载。
2. 此法只能在目标Exe文件执行之前使用。此法先创建挂起状态的目标进程,得到目标进程在内存中入口函数的地址,然后将入口函数开始的一段内存数据备份起来,填充上调用LoadLibrary的代码,然后解挂进程,待其执行完加载DLL的操作,再用备份数据恢复原入口函数头部,继续执行目标进程即可。
3. 使用SetWindowsHookEx给目标进程挂钩子函数的同时,顺便让钩子函数所在的DLL进入到目标进程的地址空间。
我想了解一下,还有其他的方法么?
解决方案 »
- 什么时候需要重写DefWindowProc函数?
- 浏览器无法加载自己写的Activex控件
- 多浏览器插件开发
- CWND /CFRAMEWND /CCHILDFRAMEWN 中的CREATE方法有什么不同。
- 怎样解决SQL关键字错误?
- 讨论:vc的CString如何支持多语种?
- 急需解决,望高手不吝赐教,不胜感激!!
- 急急急急 vc6.0或vc.net 如何做com组件(上传组件) 在线等待 进者都有分 贡献出我所有分
- NetShareAdd函数怎么了?
- to lhxx(随风):哪儿可以下载或买到你所说的《vc6 高级编程》一书,多谢帮忙.
- 如何将本地HTML文件加载到IHTMLDocument2中
- 请问用过tinyxml的朋友,tinyxml支不支持搜索和查找功能?
http://www.codeproject.com/KB/threads/winspy.aspx?df=100&forumid=16291&select=1025152&msg=1025152
用QueueUserAPC
自己搜索
我现在在网吧,没有办法确认函数的名字。
楼主dump一下ntdll.dll,看看里面导出函数中有没有带Section的,自己看看。
1 SetThreadContext在微软的detour中使用的就是这种方法;
2 QueryUserApc,但前提是你自己创建的进程,当然你可以写驱动,修改线程的可等待状态,但写驱动了,还需要什么注入?
另外,SetWindowsHookEx只能对有窗体的进程进行注入。
1. 在目标进程的地址空间,用CreateRemoteThread
2. 在目标进程的入口函数填充上调用LoadLibrary的代码
3. SetWindowsHookEx
4. 修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows键的AppInit_DLLs值,将DLL路径加到里面
5. QueryUserApc
6. SetThreadContext。 我的理解是,按7楼兄弟的说法,先把代码复制到目标进程空间,然后用SetThreadContext设置目标进程主线程的IP为dll的某个函数首地址,是这样的吗?望赐教
7. 8楼兄弟说的是ntdll.dll里的NtMapViewOfSection和NtUnmapViewOfSection吗?还是ZwMapViewOfSection和ZwUnmapViewOfSection呢?这几个函数在MSDN里查不到啊,在哪里能查到用法呢?各位还有其他办法补充的吗?
还有种方法就是为PE文件增加一个新的代码节,修改程序入口点到新的节,在新界内用LoadLibrary函数载入DLL,然后回到原来的代码入口点。
native api虽然很多是undocumented的,但《Windows NT 2000 Native API Reference》中作
者已经都将其详细解释了。
而且要求代码是父进程才行
强烈建议你去学习detours
-------------------------------------------------------------------以前我使用添加PE节区的方法实现过与此类似的功能——具备自拷贝功能的PE植入代码。其实,单单更改PE入口点,不会导致杀毒软件查杀,完全可以更改PE入口点至新添加的代码区。添加的代码执行完了,再跳转回原PE入口点就行了。这样更方便些,不必保存原PE入口处的代码,不必将保存的代码写回原PE入口处,代码区本来为只读的,还要更改节区属性,有点烦。最近想写个小软件的,专门用于更改PE,使PE在运行前首先加载某些附加的DLL,就是一直静不下心。感觉用处也不是很大。
参考书目《windows环境下32位汇编语言程序设计》里面有非常珍贵的关于pe结构的资料。
AddressOfEntryPoint
应该就是入口地址,只要改变他的值就可以了。。
以便我们以后交流,共同学习。。
(*^__^*) 嘻嘻……。。