风色幻想6 Trainer v1.0
注意游戏版本.
我是用的 v1.10繁体中文补丁,没有安装情人节补丁。
所以估计这个在安装了那个补丁的版本上没用。
使用方法:
第一个钩上就行。
后面3个这样操作
1 重置指针
2 让自己的人移动1次 (记录下指针地址
3 所有能力99 (附带超多Rap和幸运,嘿嘿
改好1个人后,要重复上面3步才能改下1个人.
风色系列向来就有反修改措施。以前对此毫无办法。
现在修改的技术提高了,就下载了风色6,挑战下自己。
嘿,结果就出现了这个东西。
游戏中的HP和SP是没有加密的,只不过用的是双精度浮点数存贮的(骗了不少人吧,哈哈
其他数据全都加密了(真够狠的啊
风色6的数据加密看懂了1部分。
游戏初始化后,就会创建1个迷钥。
然后用这个迷钥加密游戏中的数据,使得数据完全不是看见的样子。
这样简单的内存修改器就无能为力了。
游戏是这样加密的
那个开始的密钥地址是 006881C8,值似乎固定
假设力量 的地址是 00500000,
那么这个地址前面数4位,就是另外1个密钥。
然后将这3组数据经过 1个函数运算得到加密后的值。
显示的时候,再用解密函数算出来实际值,这个就是我们通常看见的了。
很可惜,没看懂函数具体怎么运算,
只发现如果把开始的密钥和另外的那个密钥都改为0,
那么地址上写的数据会和加密后的数据相等了。
[Copy to clipboard] [ - ]CODE:
[ENABLE]
alloc(movep,100)
alloc(backmovep,100)
004722d4:
jmp movep
nop
movep:
mov ecx,[edx+04]
mov edx,[ebp+08]
xor edx,[eax+ecx*4]
mov eax,[ebp-04]
mov [eax+08],edx
push ecx
cmp [00c33ffc],00000000
jne backmovep
lea ecx,[eax+08]
mov [00c33ffc],ecx
jmp backmovep
backmovep:
pop ecx
mov esp,ebp
pop ebp
jmp 004722e6
[DISABLE]
dealloc(movep)
dealloc(backmovep)
004722d4:
mov ecx,[edx+04]
mov edx,[ebp+08]
风色幻想6: 数据加密过程解析
这还是v110 没安装补丁版本。
终于明白了风6的加密方法。具体如下
经过多次数值改变,未改变的模糊搜索,确定了金钱的地址。
然后查找 改变这个数值的代码,得到下面代码
xor ecx,[eax+edx*4]
mov edx,[ebp-08]
mov [edx+08],ecx ====>这条指令改变了金钱地址的值
上面那个xor就是加密运算。
为了了解运算的过程,将这里的代码修改为了如下
mov [00c33fe4],eax
mov [00c33fe8],ebx
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开始就随机确定好的。
因为我读档后,金钱的密钥编号不会变。只有重起游戏密钥才会改变。
这么看来只要能让电脑把随即分配密钥的过程修改为固定的分配某个密钥。
这样就可以自己查密钥表来算出加密后的值了。
然后既然知道了准确值,就可以很快找到地址修改了吧