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