本文来自http://blog.csdn.net/lijun84 ,引用必须注明出处!
本文仅供个人学习研究之用,不得用于任何商业及非法目的,基于此产生的法律责任本人不承担连带责任之类的。
外挂架构篇:
那么实现外挂需要用到什么样的技术呢?我这里大致罗列了一下:
1, GUI 实现(包括 Button , textBox 等)
2, 进程外部线程注入(现在很多游戏封了,如果以后写防外挂技术时将深入讨论)
3, 键盘鼠标消息控制 (其实如果是基于报文的挂不太需要用到)
4, 文件内存映射 (其实不限定用它,只要有个进程间通信的方式即可)
5, Hook API ( 当然主要包括 Socket API )
6, IO 操作,多线程和 socket 以及进程控制相关技术
补充: 有些游戏需要用到Crack技术。脱壳,解密。
在讨论这款外挂的实现前,我将先介绍下它的整体架构。
从架构图上可以看到主要分成两大部分:
外挂主界面部分:
WG GUI.exe 是外挂程序的主界面,负责显示当前角色的信息和设定一些挂机的数值(如血量低于多少补血等)。在这个 EXE 主程序中有个 SockHooker 模块,它的作用主要是将 HSock.dll 注入到游戏进程里并创建线程和运行环境。
外挂主逻辑部分:
当 HSock.dll 被注入游戏进程中后,它会成功覆盖进程的 Sock API 导入表函数指针和返回地址并且正式接管 Sock 的所有 API 函数。不过真正外挂的逻辑是实现在 SockHookFun.dll 中, HSock.dll 一切准备就绪后会加载 SockHookFun.dll ,之后游戏中任何的 SockAPI 调用都会经过 HSock 再回调 SockHookFun 相应的处理函数(如 connect , send 等)。
这两部分的进程间通信是通过内存映射文件实现的( OpenFileMapping 和 MapViewOfFile 两个 API . ),它们需要交换哪些信息呢?
1, 主界面部分需要显示血量,坐标,角色名等信息。
2, 外挂主逻辑部分需要知道是否开始和停止以及多少百分比的血量开始补血等设定信息。
后篇将详细介绍实现部分,同时也会展示一些关键的代码和界面及开发工具。