模块设计 1)主窗口模块,使用 Windows MFC 对话框程序构建网游辅助(外挂)程序的主窗口,同时负责封包捕获模块和动作执行模块之间的协调控制; 2)封包捕获模块,使用 Windows MFC 创建一个工作者线程,由这个工作者线程完成封包的捕获以及网游消息的识别工作,当发现目标消息(工具耐久值...)后使用自定义消息通知主窗口模块针对不同消息进行处理; 3)动作执行模块,由主窗口模块调用,用于向游戏发送鼠标和键盘控制消息,实现工具更换、背包整理等动作的执行。
上面的代码列出了两个函数,第一个是左键单击“Start”按钮后,执行的代码,代码很简单,创建一个 pcap_thread_data 结构(请读者自行初始化结构中的变量),然后使用 Windows MFC API 函数 AfxBeginThread 创建工作者线程。Windows 系统会自行创建一个新的线程,并开始执行函数 WorkThread 中的代码,也就是说 WorkThread 函数就是线程的执行体!而 pcap_thread_data 则是传递给工作者线程的参数。
WorkThread 函数很简单,只有一个 While 循环体。变量 go 是一个全局变量,可以理解成捕获封包的总开关。当 go 为真时,工作者线程将不断调用 pcap_dispatch 用于封包捕获;当 go 为假时,While 循环被终止,WorkThread 执行完毕返回后,Windows 系统将自动销毁该线程。因此,我们可以添加一个“Stop”按钮,并通过修改变量 go 的值来关闭封包捕获。
Decode 的主要工作就是提取数据块中的消息,第一步则是搜索消息的分隔符“0xeeee”,一个数据块内至少会包含一条消息。提取到消息以后,Decode 会遍历 OrderList,看看提取到的消息是否是 Order 指定的消息种类,如果匹配上了 Order 数据结构中的 flag 和 dna,则将通过 PostMessage 通知主窗口程序进行相关处理。
3)消息响应以及动作执行
当 Decode 函数的找到了由 Order 数据结构所描述的游戏消息,会通过 Windows API 函数 PostMessage 发送一条名为 WM_USER_PCAPMSG 的消息到主窗口程序的消息处理函数。WM_USER_PCAPMSG 的定义如下:
#define WM_USER_PCAPMSG WM_USER+1
复制代码
通过 VS2010 的类向导(“ Ctrl + Shift + X ”)可以添加此自定义消息和与之对应的消息处理函数,比如:OnUserPcapMsg。完成后,系统将自动添加如下消息处理函数: