【逆向分析】单机锁血无敌功能分析

本文详细介绍了如何通过逆向分析实现游戏的单机锁血功能,包括查找血量地址、确定关键函数、汇编指令改造,并涉及到内存hook技术,以及在实际操作中应注意的细节,如管理员权限和调试权限的获取。
摘要由CSDN通过智能技术生成

探究一下无敌功能是怎么实现的。知己知彼百战不殆,懂得它的实现,能够更好地找出禁止作弊的对策。这篇文章先解析实现,后续文章补充对策。

一、整体思路

1、使用CE工具找出血量条,读取数值

2、CE工具首次搜索数值,找到内存中具有该数值的地址群

3、当血条下降,再次搜索下降后的数值,通过二次搜索,确定地址群中真正的写入数据的地址。这个地址通常是基址+xxxx的表现形式。此时锁住地址,游戏中实验一下,若不扣血,则对。

4、通过该地址查询到所在的扣血执行函数

5、区分锁血的是否是自己想要锁血的对象,因为扣血函数会处理所有对象的扣血。

6、考虑区分扣血对象的实现方式。1)通过对字符串的比较区分 2)通过形成一个枚举,不同数值比较来确定对象。基本可以确定是第2种

7、分析完扣血函数,对其改造,将sub xx,xx的第二个数值换为0

8、在CE中改造汇编指令并验证,若验证成功则转入代码实现

9、通过FindWindowA、GetWindowThreadProcessId、OpenProcess等函数确定进程

10、VirtualAllocEx申请内存空间

11、VirtualProtectEx,赋权

12、将之前的汇编代码对应的二进制指令,通过WriteProcessMemory hook。需要非常注意的是jmp,call,jnz,jne之类的转移指令,对应对 的二进制指令是偏移地址,一定需要转化

13、使用OD工具分析注入后的功能代码对应的汇编指令是否符合预期,这非常重要
14、功能验证

二、实现中需要注意的点

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值