修改研究v5 [Inkit wiki]

用户工具

站点工具


g_tpr:edit5

修改研究v5

目的地址附近比较特别的代码

码表

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

544crack.cea
"jshyl5.exe"+1A7133:
jmp 005A715E
 
"jshyl5.exe"+1AAA4B:
jmp 005AAA72
 
"jshyl5.exe"+1A7345:
jmp 005A7364

旧版

5.43

543crack.cea
"jshyl5.exe"+1A7133:
jmp 005A715E
 
"jshyl5.exe"+1AAA4B:
jmp 005AAA72
 
"jshyl5.exe"+1A7345:
jmp 005A7364
 
"jshyl5.exe"+1423F7:
jmp 005422DD

存档

5.42

542crack.cea
"jshyl5.exe"+1A70CF:
jmp 005A70FA
 
"jshyl5.exe"+1AA9E7:
jmp 005AAA0E
 
"jshyl5.exe"+1A72E1:
jmp 005A7300
 
"jshyl5.exe"+1423C3:
jmp 005422A9

文件校验

5.41

541crack.cea
"jshyl5.exe"+1A6DE3:
jmp 005A6E0E
 
"jshyl5.exe"+1AA6FB:
jmp 005AA722
 
"jshyl5.exe"+1A6FF5:
jmp 005A7014

5.40

本版本不保证能通关

540b

540bcrack.cea
"jshyl5.exe"+1A64F7:
jmp 005A6522
 
"jshyl5.exe"+1A6709:
jmp 005A6728
540crack.cea
"jshyl5.exe"+1A62CB:
jmp 005A62F6
 
"jshyl5.exe"+1A64DD:
jmp 005A64FC

5.30

530crack.cea
"jshyl5.exe"+1A3D6F:
jmp 005A3D9A
 
"jshyl5.exe"+1A75DB:
jmp 005A7605
 
"jshyl5.exe"+1A3F81:
jmp 005A3FA0

套装内存地址:8e7060~8e8880

5.24

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]

截图

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

g_tpr/edit5.txt · 最后更改: 2023/04/04 18:02 由 127.0.0.1