0x1 线索:
血量
1,开启DXF
2. OD附加
3. ce搜索
我们要实现无敌的思路是,把减去血量的逻辑给移除,这样就达到了无敌的效果
我们先找到血量的地址
535,改变一次血量,前面2个绿色的都是GameRpcs.dll中的地址,我们忽略掉。..
这2个,一个应该就是最大血量,一个应该就是当前血量了,我们可以调试得到
529839A8,我们发现了最大血量不会变,这个当前血量就变了,进入副本,对其下硬件写入断点
021A6E29 8BC8 mov ecx, eax
021A6E2B E8 108798FF call 01B2F540
021A6E30 89BB A8390000 mov dword ptr ds:[ebx+0x39A8], edi
021A6E36 3B1D 98D5DC04 cmp ebx, dword ptr ds:[0x4DCD598]
021A6E3C 0F85 21020000 jnz 021A7063
021A6E42 807D CE 00 cmp byte ptr ss:[ebp-0x32], 0x0
这样,我们就断下来了。
在这里下一个断点,发现这里也断下来了,说明,我们打怪物,跟怪物打我们都是同一个地方(这里可以实现秒杀),接下来,我们要往上回溯,找到只有怪物伤害我们的地方
021F093A /0F85 F9000000 jnz 021F0A39
021F0940 |8B45 14 mov eax, dword ptr ss:[ebp+0x14]
021F0943 |8B4D 0C mov ecx, dword ptr ss:[ebp+0xC]
021F0946 |53 push ebx
021F0947 |8B5D 10 mov ebx, dword ptr ss:[ebp+0x10]
021F094A |50 push eax
021F094B |53 push ebx
021F094C |51 push ecx
021F094D |57 push edi
021F094E |8BCE mov ecx, esi
021F0950 |E8 4B990300 call 0222A2A0
021F0955 |8B16 mov edx, dword ptr ds:[esi]
我们发现这个地方,我们打怪物没有触发,怪物打我们触发了
修改过后,我们发现血量已经不会变化了,说明我们已经成功的实现了无敌
0x2 调试:
021F0938 84C0 test al, al
021F093A E9 FA000000 jmp 021F0A39
021F093F 90 nop
021F093A /0F85 F9000000 jnz 021F0A39
无敌
0x3 编程:
下面,我们就来编写一个简单的程序,来帮助我们开启关闭功能
1. 打开vc
2. 新建工程
3. 添加相应的控件
4. 下面就开始写功能代码,先写刚刚分析的无敌
5. 测试功能,无敌已经成功写入了和关闭了
6. 我们加上上节课分析的无CD功能
7. 下面进游戏测试一下