[教程]DLL注入的方法及通讯[2009-8-14]
2015-08-24 11:43
134 查看
这是当年加入“广海小组”时的作品,现在回味当时做了很多原创教程也挺有意思,摘录几个过来,留个纪念吧。
===========================================================================================
准备了好长时间,终于决定写这篇文章(最近工作比较忙),可能类似的教程也很多,我只是把我的研究过程写出来,希望对新手有帮助,文笔不好,大家就合看哈。
这次写教程的内容为DLL注入的二种实现方法,分别是全局钩子法和远程LoadLibrary法(名字自己起的,看个意思就行,不懂的继续往下看)。
编程工具:VC++6.0,运行环境WINDOWS 2003
先看下流程:
1、 全局钩子法
此方法利用SetWindowsHookEx进行钩子的建立,同时系统会自动把钩子需要的DLL文件注入到目标程序,此方法注入过程由系统自动完成,比较方便。缺点就是调用这个DLL的主程序需要保持启动状态,当这个主程序退出,那么所有注入的DLL都会卸载。
2、 远程LoadLibrary法
此方法相对比较复杂一些,注入和卸载的过程都要自己写出代码来实现,主要用到VirtualAllocEx,WriteProcessMemory,LoadLibraryA,CreateRemoteThread,等API实现,优点就是注入后,主程序可以退出,不影响DLL在目标进程的工作。
执行流程:
1) 打开进程,得到进程句柄;
2) 得到DLL的全路径名称和长度
3) 申请内存空间,把DLL全路径写到目标进程空间内(VirtualAllocEx,WriteProcessMemory);
4) 使目标进程调用LoadLibrary,加载DLL(CreateRemoteThread,LoadLibraryA)
5) 释放目标进程中申请的空间 (VirtualFreeEx)
关于通讯问题:
看到论坛里很多人在问DLL如何和外面的主程序通讯的问题,我这里给大家提供二种解决方法:
1、程序界面在DLL中,所有操作都由DLL呼出窗体进行,包括所有的逻辑操作及CALL操作,也就是说,所有的代码都写到DLL种,主程序,只是负责将DLL注入进目标程序即可。
这样做呢,有个弊端,就是如果要设置外挂就得需要打开游戏界面,然后呼出外挂进行设置,不是很方便。
2、消息通讯法,其实还有几种的,比如共享内存段等方法,为什么推荐消息呢,个人感觉消息写起来比较舒服,而且代码简单。此方法呢,DLL中只写常用的CALL信息,比如:普通攻击CALL,买卖CALL,拾取CALL等等,没有其他的。而主程序里写挂的所有逻辑判断,当需要执行某个动作时,比如普通攻击,那么就发个消息给DLL让他执行普通攻击操作就可以了。
消息呢,VC里我使用了自定义消息来实现,不同的消息名称对应不同的操作,这样就很好区分不同CALL了。
至于消息的接受,我认为有二种方式,第一种,消息直接发给对应的目标程序里的DLL,这样做呢,简单些,DLL里接受消息后进行对应操作,但这样做有个问题,就是如果多开的话,DLL的查找是个问题,不知道应该发给哪个游戏内的DLL。第二种方法呢,就是DLL内通过SetWindowsHookEx挂钩(HOOK)消息处理函数,这样DLL就可以接受到发给游戏的消息,那么DLL就可以根据发给游戏的消息来判断执行对应的操作,这样的方式就解决了第一种方法中的弊端,发消息时,直接发给对应游戏就可以了。
具体的看源码吧
源码为一个RAR文件,其中做了三个事例,LoadLibrary注入事例,全局钩子呼出事例、全局钩子消息事例。
BY C++ 2009-7-20
转载请保留作者信息,谢谢!
另外履行一个我的承诺:http://www.ghoffice.com/bbs/read-htm-tid-68285.html
这里提到的工具,一起打包进去了,以上包里所有内容都为源码。
-------------------------------------------------------------------------------------------
代码下载见:http://www.ghoffice.com/bbs/read-htm-tid-69334.html
===========================================================================================
准备了好长时间,终于决定写这篇文章(最近工作比较忙),可能类似的教程也很多,我只是把我的研究过程写出来,希望对新手有帮助,文笔不好,大家就合看哈。
这次写教程的内容为DLL注入的二种实现方法,分别是全局钩子法和远程LoadLibrary法(名字自己起的,看个意思就行,不懂的继续往下看)。
编程工具:VC++6.0,运行环境WINDOWS 2003
先看下流程:
1、 全局钩子法
此方法利用SetWindowsHookEx进行钩子的建立,同时系统会自动把钩子需要的DLL文件注入到目标程序,此方法注入过程由系统自动完成,比较方便。缺点就是调用这个DLL的主程序需要保持启动状态,当这个主程序退出,那么所有注入的DLL都会卸载。
2、 远程LoadLibrary法
此方法相对比较复杂一些,注入和卸载的过程都要自己写出代码来实现,主要用到VirtualAllocEx,WriteProcessMemory,LoadLibraryA,CreateRemoteThread,等API实现,优点就是注入后,主程序可以退出,不影响DLL在目标进程的工作。
执行流程:
1) 打开进程,得到进程句柄;
2) 得到DLL的全路径名称和长度
3) 申请内存空间,把DLL全路径写到目标进程空间内(VirtualAllocEx,WriteProcessMemory);
4) 使目标进程调用LoadLibrary,加载DLL(CreateRemoteThread,LoadLibraryA)
5) 释放目标进程中申请的空间 (VirtualFreeEx)
关于通讯问题:
看到论坛里很多人在问DLL如何和外面的主程序通讯的问题,我这里给大家提供二种解决方法:
1、程序界面在DLL中,所有操作都由DLL呼出窗体进行,包括所有的逻辑操作及CALL操作,也就是说,所有的代码都写到DLL种,主程序,只是负责将DLL注入进目标程序即可。
这样做呢,有个弊端,就是如果要设置外挂就得需要打开游戏界面,然后呼出外挂进行设置,不是很方便。
2、消息通讯法,其实还有几种的,比如共享内存段等方法,为什么推荐消息呢,个人感觉消息写起来比较舒服,而且代码简单。此方法呢,DLL中只写常用的CALL信息,比如:普通攻击CALL,买卖CALL,拾取CALL等等,没有其他的。而主程序里写挂的所有逻辑判断,当需要执行某个动作时,比如普通攻击,那么就发个消息给DLL让他执行普通攻击操作就可以了。
消息呢,VC里我使用了自定义消息来实现,不同的消息名称对应不同的操作,这样就很好区分不同CALL了。
至于消息的接受,我认为有二种方式,第一种,消息直接发给对应的目标程序里的DLL,这样做呢,简单些,DLL里接受消息后进行对应操作,但这样做有个问题,就是如果多开的话,DLL的查找是个问题,不知道应该发给哪个游戏内的DLL。第二种方法呢,就是DLL内通过SetWindowsHookEx挂钩(HOOK)消息处理函数,这样DLL就可以接受到发给游戏的消息,那么DLL就可以根据发给游戏的消息来判断执行对应的操作,这样的方式就解决了第一种方法中的弊端,发消息时,直接发给对应游戏就可以了。
具体的看源码吧
源码为一个RAR文件,其中做了三个事例,LoadLibrary注入事例,全局钩子呼出事例、全局钩子消息事例。
BY C++ 2009-7-20
转载请保留作者信息,谢谢!
另外履行一个我的承诺:http://www.ghoffice.com/bbs/read-htm-tid-68285.html
这里提到的工具,一起打包进去了,以上包里所有内容都为源码。
-------------------------------------------------------------------------------------------
代码下载见:http://www.ghoffice.com/bbs/read-htm-tid-69334.html
相关文章推荐
- intel编译器编译cp2k
- TCP 出现大量 LAST_ACK 导致apache不能重启解决小结
- css学习选择器之:nth-child(n)
- android真机开发连接javaWeb后台服务器
- 软件测试中的那些不可遗忘的基础知识
- unity3d 脚本的一些简单介绍
- WebLogic11g-半小时让你的domain集群化
- 创建Xml文件与修改Xml文件
- Linux文件传输scp和rsync断点续传
- LeetCode "Read N Characters Given Read4 II - Call multiple times"
- js创建对象的几种方式
- Spring Security Custom Login Form Example
- 访园助手ios端项目小结
- git stash
- ubuntu14.10 tftp服务配置20150824
- Java之旅hibernate(6)——Junit不为人知的故事
- poj2096Collecting Bugs【概率dp入门题求期望】
- 修改Android app图标(Android Studio)
- [转]你应该掌握的七种回归技术
- 回归/拟合方法总结