CE修改教学见Cheat Engine教学-金书篇
使用到的文件保存在:http://pan.baidu.com/s/1nt7n2nJ
码表
inc ecx cdq idiv ecx
修改检测
cmp [esi],ebx je * movzx eax,byte ptr [esi+04]
文件校验
movzx ecx,byte ptr [esi+eax] add edx,ecx inc eax cmp ebx,eax
"jshyl5.exe"+1A7133: jmp 005A715E "jshyl5.exe"+1AAA4B: jmp 005AAA72 "jshyl5.exe"+1A7345: jmp 005A7364
"jshyl5.exe"+1A7133: jmp 005A715E "jshyl5.exe"+1AAA4B: jmp 005AAA72 "jshyl5.exe"+1A7345: jmp 005A7364 "jshyl5.exe"+1423F7: jmp 005422DD
"jshyl5.exe"+1A70CF: jmp 005A70FA "jshyl5.exe"+1AA9E7: jmp 005AAA0E "jshyl5.exe"+1A72E1: jmp 005A7300 "jshyl5.exe"+1423C3: jmp 005422A9
"jshyl5.exe"+1A6DE3: jmp 005A6E0E "jshyl5.exe"+1AA6FB: jmp 005AA722 "jshyl5.exe"+1A6FF5: jmp 005A7014
"jshyl5.exe"+1A64F7: jmp 005A6522 "jshyl5.exe"+1A6709: jmp 005A6728
"jshyl5.exe"+1A62CB: jmp 005A62F6 "jshyl5.exe"+1A64DD: jmp 005A64FC
"jshyl5.exe"+1A3D6F: jmp 005A3D9A "jshyl5.exe"+1A75DB: jmp 005A7605 "jshyl5.exe"+1A3F81: jmp 005A3FA0
套装内存地址:8e7060~8e8880
校验
0053D133 - cmp ebx,eax 0053D135 - jne 0053D12C 0053D137 - mov ecx,[0068E77C] ** 0053D13D - mov [esp+24],ecx 0053D141 - test ecx,ecx 0053D143 - je 0053D4BF 0053D149 - movzx eax,byte ptr [0068E77C] ** 0053D150 - sub edx,eax 0053D152 - movzx eax,byte ptr [0068E77D]
码表00599CAB
人物属性0059A086
码表00599D17
人物属性00599FF6
码表00599C87 je→jmp
人物数据反汇编地址:0059A05A mov [eax],cl
码表算法:00599CFD je→jmp
人物数据反汇编地址:00599A0A mov [eax],cl
码表算法:0059959B je→jmp
人物数据反汇编地址:0059A012 mov [eax],cl
码表算法:00599C5A je 00599C7E 改为(jmp)
惜花套装地址:008DE7B0
0059A00A mov [eax],cl
追踪此处可得到人物数据地址。
目前版本数据均可直接修改
相比5.04,并未有其他改变。
在人物数据段前部有一段加密算法(来自5.04):
0059978B - mov esi,ecx
0059978D - movzx edi,byte ptr [ecx+04]
00599791 - add edi,[00684F60]
00599797 - shl edi,08
0059979A - add edi,[009829C8]
005997A0 - movzx eax,byte ptr [ecx+05]
其中0059979A - add edi,[009829C8] 保存着很多码表,算法会随机取一段码表使用。
因此去寻找生成了这段码表的代码段。
5.07版中发现00599C5C 写入了[009829C8]
这段代码后部有一段代码正是码表的生成算法。
首先生成0~255的原始码表,然后根据随机位移产生加密的码表。
因此,将产生随机的算法屏蔽掉即可。
那么,根据步进追踪发现,00599CA1 有一个cmp je的结构,将je改为jmp,跳过码表加密。之后展现出来的数据就是原始数据了。
数据加密采用了指针加密的方法,通过反汇编,较难恢复数据的原始面貌。
储存人物数据的内存地址依旧可以发现。
通过追踪005997C6 mov [eax],cl 可以找到人物数据地址,在ESI寄存器可见。
寻找该段程序的方法:搜寻 inc eax [回车] mov* 逐个排查。 大概在0055XXXXh~0060XXXXh区间内的代码段重点关注。
人物属性
mov cl,[edi+edx] mov [eax],cl inc eax cmp eax,ebp
每次启动游戏会生成一个0~255的随机数字和一个02XXXXXXh的内存地址,通过指针算法对数据进行加密计算。
相关程序段内存地址为:
00599418 mov [009829C8],eax
00599408 mov [00684F60],eax
该程序指向地址保存着生成的随机数。
加密算法的代码段(edi是加密算法的关键数字):
00599788 - sub esp,1C
0059978B - mov esi,ecx
0059978D - movzx edi,byte ptr [ecx+04]
00599791 - add edi,[00684F60]
00599797 - shl edi,08
0059979A - add edi,[009829C8]
005997A0 - movzx eax,byte ptr [ecx+05]
005997A4 - mov cl,[edi+eax]
005997A7 - lea ebx,[esi+05]
005997AA - mov eax,00000001
005997AF - shl eax,cl
005997B1 - cmp eax,05