====== 修改研究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\\