如何通过调试进程来注入DLL

如何通过调试进程来注入DLL,第1张

1. 用CreateProcess(CREATE_SUSPENDED)启动目标进程

2. 找到目标进程的入口,用ImageHlp中的函数可以实现。

3. 将目标进程入口的代码保存起来。

4. 在目标进程的入口写入LoadLibrary(MyDll)实现Dll的注入。

5. 用ResumeThread运行目标进程。

6. 目标进程就运行了LoadLibrary(MyDll),实现DLL的注入。

7. 目标进程运行完LoadLibrary(MyDll)后,将原来的代码写回目标进程的入口。

8. 目标进程Jmp至原来的入口,继续运行程序。

从原理上可以看出,DLL的注入在目标进程的开始就运行了,而且不是用Debug的方案,这样,就没有上面方案的局限性了。该方案的关键在6,7,8三步,实现方法需要监视进程和DLL合作。下面,结合代码进行分析。

在监视进程中,创建FileMapping,用来保存目标进程的入口代码,同时保证DLL中可以访问。在第7步实现将原目标代码写回目标进程的入口。

直接使用的话,分两种情况。如果目标进程已经加载了DLL,注入之后就可以直接使用了该DLL的导出函数。如果还没有加载,使用就会有问题。

但是应该可以使用LoadLibrary读入其他DLL,然后需要获得目标API的地址,就可以调用了。

第一个问题2种方式都可以。

如果要进程启动的时候自动加载你的DLL,你就需要修改程序的.exe文件,找到相应的代码段,把DLL的RVA加载进去。只有修改.EXE文件才能实现DLL的自动加载。

也可以在.EXE运行的时候,使用远程注入的方式加载自己的DLL。

后面,当DLL加载完成时,DLL就相当于你的EXE的一部分。与你的EXE共存亡.除非你手动强制卸载DLL模块。没有.exe你的DLL也就不存在了。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/55020.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-02-26
下一篇2023-02-26

发表评论

登录后才能评论

评论列表(0条)

    保存