mov [00c33fec],ecx
mov [00c33ff0],edx
xor ecx,[eax+edx*4]
mov edx,[ebp-08]
mov [edx+08],ecx ====>这条指令改变了金钱地址的值
将加密前的寄存器数值保存了起来,发现
ecx 是在游戏中看见的金钱数
eax 是我上次提到的那个密钥,现在确定这是密钥表的指针,指向第0个密钥。
edx 等于金钱地址前面的那个值,也就是密钥编号
然后把 实际的金钱值与 密钥编号所指向的密钥 进行异或运算,得到加密后的值
另外edx的范围是在ff以内,也就是说游戏建立了ff个加密密钥。
风6的密钥地址是固定的,那255个密钥也是固定的.
尝试将迷钥全部修改为0,这样异或运算的结果就是原数值。
但是游戏挂了。换其他数值也不行。
可能那些密钥有CRC吧,发现修改就挂游戏。
说了这么多,到底有什么用呢
举个例子
比如我现在有 19999900的金钱,电脑决定用第5A个迷钥加密
那么运算过程就是
1 查密钥表得到第5A个迷钥是 AC711985
2 执行 xor 19999900,AC711985
3 得到结果 AD403519
4 写入内存就是 5A 00 00 00 19 35 40 AD
至于具体用哪个密钥,似乎是游戏1开始就随机确定好的。
因为我读档后,金钱的密钥编号不会变。只有重起游戏密钥才会改变。
这么看来只要能让电脑把随即分配密钥的过程修改为固定的分配某个密钥。
这样就可以自己查密钥表来算出加密后的值了。
然后既然知道了准确值,就可以很快找到地址修改了吧
风色幻想6 Trainer v1.0
http://www.gamersky.com/Soft/200801/11682.shtml
风色幻想6 v110数据免加密补丁
http://www.gamersky.com/Soft/200801/11681.shtml