嘿,各位游戏高手们!今天咱们要聊的是一个超炫的技术话题——如何通过修改游戏代码实现“神挡杀神,佛挡杀佛”的无敌状态!想象一下,在《三国》这款游戏中,你的队伍面对强敌时,不仅毫发无损,还能一击必杀,是不是超级带感?但别急,这可不是开挂那么简单,而是通过深入研究游戏内部机制,巧妙地调整代码,让游戏按照我们的意愿运行。接下来,本文将带你一步步揭开这个神秘面纱,从基础的汇编语言知识到实际的代码修改过程,手把手教你如何成为一名真正的游戏代码大师。准备好迎接挑战了吗?让我们一起开启这段激动人心的技术之旅吧!

代码

0041FEEF |. 56 PUSH ESI

0041FEF0 |. 03D1 ADD EDX,ECX //原来的血减去应掉的血

0041FEF2 |. 8990 50847200 MOV DWORD PTR DS:[EAX+728450],EDX //保存HP

0041FEF8 |. 8BF2 MOV ESI,EDX

加个跳板跳到我的代码:

0041FEEF .^E9 9D69FEFF JMP SANGUO.00406891 //这里原来是负责处理减血的语句,现在我方自己来处理

0041FEF4 90 NOP

0041FEF5 90 NOP

0041FEF6 90 NOP

0041FEF7 90 NOP

0041FEF8 > 8BF2 MOV ESI,EDX

处理的代码:

00406891 > 56 PUSH ESI

00406892 . 50 PUSH EAX

00406893 . 52 PUSH EDX

00406894 . 8B15 F0FCB600 MOV EDX,DWORD PTR DS:[B6FCF0] //B6FCF0里面存放的是我方人员数目,游戏利用这个数来对我方和敌方排序,

0040689A . 69D2 E40A0000 IMUL EDX,EDX,0AE4 //我们利用这一点来确保在自己人没有不受伤害

004068A0 . 05 E40A0000 ADD EAX,0AE4 //每隔AE4个字节是一个新的人物的HP...

004068A5 . 3BC2 CMP EAX,EDX //判断是否是自己人^_*

004068A7 . 5A POP EDX

004068A8 . 58 POP EAX

004068A9 . 77 0D JA SHORT SANGUO.004068B8 //如果大于说明是敌军

004068AB . 33C9 XOR ECX,ECX //ECX是应掉的血

004068AD . 8990 50847200 MOV DWORD PTR DS:[EAX+728450],EDX //这里是我方HP所在,将伤害减为0!

004068B3 . E9 40960100 JMP SANGUO.0041FEF8 //控制权交还给游戏

004068B8 > 33D2 XOR EDX,EDX //敌方的HP减为0

004068BA . 8990 50847200 MOV DWORD PTR DS:[EAX+728450],EDX //存入敌方HP所在地

004068C0 . E9 33960100 JMP SANGUO.0041FEF8

004068C5 90 NOP

004068C6 90 NOP

004068C7 90 NOP

004068C8 90 NOP

中间用到的B6FCF0这个地址也很简单可以得到,因为每次战斗的时候游戏负责分配给每个怪物HP存放空间,并且这个空间还要照顾到我方人员的数目

具体地址:

0041E82D |REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI] //WE BREAK HERE!!! LOOP ABOVE!

上面的代码:

0041E7B0 MOV EAX,DWORD PTR DS:[71F838]

0041E7B5 MOV EDI,DWORD PTR DS:[B6FCF0] //这里存放我方人员数目

0041E7BB MOV EDX,DWORD PTR SS:[ESP+20]

0041E82D |REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI] //WE BREAK HERE!!! LOOP ABOVE!

0041E82F |MOV DWORD PTR DS:[EBX+9E0],EAX