====== 修改研究v5 ======
CE修改教学见[[g_tpr:cetur|Cheat Engine教学-金书篇]]\\
使用到的文件保存在:[[http://pan.baidu.com/s/1nt7n2nJ]]\\
**[[g_tpr:structure|数据结构]]**\\
**[[g_tpr:comdata|常用编码]]**\\
===目的地址附近比较特别的代码===
码表
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
====5.44====
"jshyl5.exe"+1A7133:
jmp 005A715E
"jshyl5.exe"+1AAA4B:
jmp 005AAA72
"jshyl5.exe"+1A7345:
jmp 005A7364
=====旧版=====
===5.43===
"jshyl5.exe"+1A7133:
jmp 005A715E
"jshyl5.exe"+1AAA4B:
jmp 005AAA72
"jshyl5.exe"+1A7345:
jmp 005A7364
"jshyl5.exe"+1423F7:
jmp 005422DD
====存档====
===5.42===
"jshyl5.exe"+1A70CF:
jmp 005A70FA
"jshyl5.exe"+1AA9E7:
jmp 005AAA0E
"jshyl5.exe"+1A72E1:
jmp 005A7300
"jshyl5.exe"+1423C3:
jmp 005422A9
[[g_tpr:edit5:sumcheck]]\\
===5.41===
"jshyl5.exe"+1A6DE3:
jmp 005A6E0E
"jshyl5.exe"+1AA6FB:
jmp 005AA722
"jshyl5.exe"+1A6FF5:
jmp 005A7014
===5.40===
===本版本不保证能通关===
===540b===
"jshyl5.exe"+1A64F7:
jmp 005A6522
"jshyl5.exe"+1A6709:
jmp 005A6728
"jshyl5.exe"+1A62CB:
jmp 005A62F6
"jshyl5.exe"+1A64DD:
jmp 005A64FC
===5.30===
"jshyl5.exe"+1A3D6F:
jmp 005A3D9A
"jshyl5.exe"+1A75DB:
jmp 005A7605
"jshyl5.exe"+1A3F81:
jmp 005A3FA0
套装内存地址:8e7060~8e8880\\
=== 5.24 ===
[[g_tpr:524dasm|截图]]
=== 5.21 ===
校验
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]
[[g_tpr:521dasm|截图]]
=== 5.11===
码表00599CAB\\
=== 5.10 ===
人物属性0059A086\\
码表00599D17\\
=== 5.09E ===
人物属性00599FF6\\
码表00599C87 je->jmp\\
=== 5.09C ===
人物数据反汇编地址:0059A05A mov [eax],cl\\
码表算法:00599CFD je->jmp\\
=== 5.09 ===
人物数据反汇编地址:00599A0A mov [eax],cl\\
码表算法:0059959B je->jmp\\
=== 5.08 ===
人物数据反汇编地址:0059A012 mov [eax],cl\\
码表算法:00599C5A je 00599C7E 改为(jmp)\\
惜花套装地址:008DE7B0 \\
=== 5.07 ===
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,跳过码表加密。之后展现出来的数据就是原始数据了。\\
===5.04===
数据加密采用了指针加密的方法,通过反汇编,较难恢复数据的原始面貌。\\
=====人物属性地址=====
储存人物数据的内存地址依旧可以发现。\\
通过追踪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\\