Hacking Diablo II之外挂的工作原理

这篇博客详细介绍了Diablo II外挂的工作原理,包括DLL远程注入、旁路点设置(detour patch)和利用游戏内部函数。外挂通过在游戏进程中设置跳转指令,实现在关键点接管控制权,例如控制天气效果。此外,外挂还需要找到并利用游戏内部函数,如输出文字的函数,来实现更多功能。
摘要由CSDN通过智能技术生成
这一篇介绍外挂的工作原理。如果对外挂是怎么工作的没有一个大概的了解的话,那这一系列文章只能当故事看了。
如下图所示,大方框表示Diablo II.exe的进程空间,框内左侧的虚线表示游戏的主线程循环。游戏主线程循环所做的工作大约有:绘制客户端画面、响应服务器端的命令,以及接收玩家的鼠标键盘输入等。框内右侧的小方框就是所谓的外挂程序(Injected DLL)。

外挂要工作首先要加载到游戏进程空间,最常用的方法一般是通过DLL的远程注入,比如在NT/2K/XP下可以用CreateRemoteThread/LoadLibrary方法,9x平台稍微麻烦一点儿。也有做成和游戏程序一起启动的,比如利用d2loader的plugin加载功能。外挂要发挥作用,就要在必要的时刻感知游戏的状态,这个可以通过在游戏本身代码中设置旁路点(detour patch)改变原有程序的流程做到。因此外挂加载以后首先要做的就是设置旁路点(一般是一个跳转指令,有hook API经验的同学比较容易理解,但和hook API不同的是,旁路点不一定在函数的入口处)。由于设置旁路点需要修改原有游戏代码,而如果修改的同时主线程正好执行到那儿就会导致游戏崩溃,因此设置旁路点的代码最好在游戏主线程的上下文环境中执行(可以通过SetWindowLong设置消息钩子,用SendMessage触发主线程调用窗口过程,然后在窗口过程中进行设置)。
图中的黄色方框就是一个旁路点。通过旁路点,在适当的时刻游戏的主线程就会跳转到外挂程序中,此时外挂程序就取得了控制权,它做完处理后,再跳转回旁路点的后面继续执行-这是一个典型的外挂代码执行流程。举个例子来说,Diablo中有好几种天气效果:晴天、雨天、雪天等。可以想象游戏中肯定有一段负责绘制天气代
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值