CE修改CS1.6

目录

一.无限手雷

1.找到地址

2.查找修改代码

3.AOB代码注入


一.无限手雷

1.找到地址

寻找地址的方法,比较笨拙,就是先买一个手雷,然后在CE中查找值为1的地址,然后手雷扔了,再查找值为0的值,如此反复。最后一般会只剩下几个地址,这几个地址是不管怎么扔,数据都是一样的(0或1)。

这个时候,我们可以采取折半锁定的方法。比如剩下6条数据,我们可以将前面的3条数据加入到下面的地址列表中,然后锁定数据:

CE修改CS1.6_第1张图片

 然后回到游戏界面把手雷扔出去,看手雷数量有没有变化,如果没有减少,就说明手雷的地址就是这锁定的三个数据中的一个。这个时候再一条一条的取消锁定数据并扔掉手雷,就能找到手雷的真正地址了。

2.查找修改代码

但是这个地址是动态地址,换个地图或者重启下游戏,这个地址会变化,所以我们要尝试去找它的基地址。很遗憾,用寻找基地的方法,每次都会出现好几个地址,很难找得到正确的那个基址。

寻找基地的方法很麻烦,可以尝试下注入代码的方法,先右键“是什么改写了这个地址”,找到修改指令:

CE修改CS1.6_第2张图片

点击“显示反汇编程序”,找到相关代码:

CE修改CS1.6_第3张图片

很显然,上面代码中,dec ecx这条指令,就是扔手雷后,减少手雷数量的代码。 

3.AOB代码注入

选中dec这行代码,进入自动汇编界面,选择AOB注入,注入的地址一定要是dec这行代码的地址,完整代码如下:

[ENABLE]

aobscanmodule(INJECT,mp.dll,49 89 08 8B 8E C4 00 00 00) // should be unique
alloc(newmem,$1000)

label(code)
label(return)

newmem:

code:
  //dec ecx
  mov [eax],ecx
  mov ecx,[esi+000000C4]
  jmp return

INJECT:
  jmp newmem
  nop 4
return:
registersymbol(INJECT)

[DISABLE]

INJECT:
  db 49 89 08 8B 8E C4 00 00 00

unregistersymbol(INJECT)
dealloc(newmem)

注意,上面的代码注入的字节码是“49 89 08 8B 8E C4 00 00 00”,这个地址包含三行代码的字节码:

  dec ecx
  mov [eax],ecx
  mov ecx,[esi+000000C4]

为什么?因为dec那行代码所占的内存只有1个字节,它下面那行的mov [eax],ecx所占的内存也只有2个字节,还是不够jmp要占的5个字节,所以要把mov ecx,[esi+000000C4]这行一起包含进来。三条指令所占空间加起来是1+2+6=9个字节,所以注入的地址字节码也要包含这三个指令的地址。

具体代码修改很简单,就是把DEC那行代码注释掉,然后点击“分配到当前的CT表”,内存视图就变了:

CE修改CS1.6_第4张图片

 因为AOB按字节码查找的,所以不用担心重启后,地址会变。

重启前手雷数量的地址是056EF23C:

 重启后,这个值已经不在了,再点激活也点不起了,因为地址已经改变了。但是AOB这个自动汇编脚本依然有效,还是可以实现无限手雷(需要在游戏中,先买一个手雷)。

 CE修改CS1.6_第5张图片

你可能感兴趣的:(CE,游戏程序)