本帖最后由 .·.·. 于 2018-4-30 19:00 编辑
游戏是《沉睡的法则-Demo版v1.5》
讲道理的话,RMXP是有解密工具的,然而那些解密工具属于傻瓜包,解密不了一些高级加密手段
……
反正直接用傻瓜包解密会死机
简述一下我究竟做了哪些事情
首先,知道一个标准的解密步骤里面有一个“乘七加三”的动作
然后……然后知道要解密的文件是game.rgssad,相关dll应该是fjrgss.dll
然后就跑起来了
或许应该说一下RMXP的游戏是什么鬼
讲道理具体结构我也不清楚(不然不会用OD)
反正有一个game.ini
[Plain Text] 纯文本查看 复制代码 [Game]
Library=fjrgss.dll
Scripts=Data\Scripts.rxdata
Title=[Demo版]沉睡的法则-Things As They Are-
RTP1=
RTP2=
RTP3=
一般的游戏会把Library=这一行写成Library=RGSS103J.dll
可以看出这里用了一个不标准的dll,或许这就是解密失败的原因
下面开始整理之后的正文
首先,不知道大神是怎么下断点的……这个只是一个参考
或许是读取文件时候需要用到CreatFileA这个断点……反正用这个断点拦截game.rgssad是可以拦截到的……不确认有什么更好的拦截方法,这也不是这次修改的重点:
重点是,我忽然想到,一般人写程序,究竟是怎么写的呢?
大约我们会直接写fp=fopen("...","rb");而不是写fp=CreatFileA(......),因此,代码的结构应该是
[Plain Text] 纯文本查看 复制代码
CreatFileA:
(我们的断点)
ret
open:
...
call CreatFileA
...
ret
主程序
...
call open
再进行文件读写或者解密
所以什么都不用管,对准ret怼两下
然后一个F8执行第二个ret,就到了这里
下面就是给ebx赋值的位置
而更往后就是异或跟乘七加三了
下面是各种不成熟的版本
首先用OD调试,文件上设断点(被累得半死)
这次基本没有得到任何有用的信息
第二次,知道该干啥了……
话说下断点就是为了可以轻松愉快地怼这玩意的
很幸运,程序的第一个断点就是我们想要的:
接下来,删除断点,直接让程序运行到返回(感谢RGSS的渣渣加密没有做混淆),反正我们不关心load那个dll的具体过程
可以看出来,下面马上就开始了这个模块的戏份
……
然而发现自己把加密的rgssad文件删了导致没法重现了……
直接贴结果好了……
经过艰苦卓绝的追码……我们发现dll给所谓的magickey的赋值并不是原本的DEADCAFE,而是1532FFBC,于是,我们就这样得到了magic 可以
下面是神奇的步骤……由于傻瓜解包工具并没有加壳……所以搜索FE CA AD DE,发现结果唯一,把这几个字节替换成BC FF 32 15,再次解密,万事大吉~
|