ce 内置教程 9 第八关 注入 共用代码

代码注入 共用代码

四个玩家,他们都是同一个结构体,减血的代码是共用的,如果我们把减血代码用空指令替换,那么所有人的血都不会减少了。

当然了,我们可以找我们自己血量的基址,然后锁定他们,但是防止不了极端情况下敌人一下秒人,毕竟锁定是高频率的修改数值而已。那么为了达到无敌的状态,我们需要使让我们减血的代码失效。

减血代码是共用的,所以就要找到区分敌人和队友的方法。这就要看游戏关于人物的结构体是怎么区分的了,那么怎么知道人物的结构体张什么样子呢?

1 找人物的结构体

首先先找到4个人的血量地址。

选择一个,找出是什么改写了该地址。

我们知道这个减血代码是共用的(你也可以看看其他三个人,容易发现都是这个代码)

找出这个指令所访问的地址。

分别攻击一下4个人,让他出现。

选中出现的4个地址,然后点分析地址数据

可以很容易的发现4个人对应的结构体。

+04是血量,float类型的

+10是可以用来区分队伍的一个4字节整数

+15是他们的名字

同时更好理解减血命令 mov [ebx+04], eax中的+04了吧。

那么思路就来了:

对减血命令进行代码注入,判断+10是1还是2,1就不执行减血指令,2就执行。

2 代码注入

点到指令上 ctrl+a自动汇编

点模板-CT表框架代码

点模板-代码注入

生成模板代码

代码修改如下:

[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat
alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(exit)

newmem: //this is allocated memory, you have read,write,execute access
//place your code here
cmp [ebx+10],1 //和1 进行比较
ja originalcode //如果大于1,那么就是敌人,返回原代码减血去就好了
fldz //将整数搞成浮点数
jmp returnhere //返回

originalcode:
mov [ebx+04],eax
fldz 

exit:
jmp returnhere

"Tutorial-i386.exe"+288D9:
jmp newmem
returnhere:




[DISABLE]
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
"Tutorial-i386.exe"+288D9:
mov [ebx+04],eax
fldz 
//Alt: db 89 43 04 D9 EE

然后点“重新启动游戏并自动执行”即可过关。

文章目录