仓库源文站点原文

话接上回,文章提到“主存档文件使用Bit-Packing技术进行压缩,再使用BlowFish算法进行加密”。我们是如何确定加密算法的呢?

工具选择

“工欲善其事,必先利其器”,既然我们要对PS2游戏进行逆向,适合的工具是必不可少的。本文需要使用以下两个工具:

PSCX2挑最新稳定版安装,GHDIRA安装说明如下:

PSCX2配置说明如下:

Dump游戏内存

启动PSCX2,进入游戏,在游戏进入到读取存档界面时暂停。

选择“保存即时存档”。

转到PSCX2安装目录下的sstates目录,找到刚才保存的即时存档。

注意看03和04两个文件,03是使用ZStandard压缩过的,04是未压缩的。

MAC环境下,可以直接使用“归档实用工具”解包。

在解包目录下,找到eeMemory.bin,这就是我们今天要分析的游戏内存。

内存逆向

eeMemory.bin拖拽进Ghidra,此时会弹出目标语言选择界面:

如果之前的插件安装步骤正确完成,应该可以出现MIPS-R5900选项,选择它。之后出现的Analysis选项保留默认即可。

之后点击Analyze进行分析,分析完毕后会出现如下界面:

恭喜你,你获得了游戏中的部分函数代码。但是这些函数是由反编译引擎反编译出来的,可读性非常差,懂得都懂。

搜索加密函数

回到PSCX2,在菜单栏选择“调试”-“打开调试器“。

在调试器中选中“函数”选项卡,在下面的输入框中输入BF_,此时出现在最上方的两个函数即是我们感兴趣的,记住它们的内存位置。

切换到Ghidra,在键盘按下G,出现对话框,输入内存地址378f10。此时会定位到一个函数,函数名为Fun_后面跟地址偏移量。

点击函数,右键Edit Function Signature,将函数名改为游戏中的BF_En

这样就顺眼多了。

破解加密函数

到了这一步是真正考验你编程技术的时刻了,读懂函数逻辑并将其改写为你自己熟悉的语言是这一步的目标。

根据函数名和函数逻辑大致可以判断出加密算法是BlowFish,当然你可以借助ChatGPT进一步确认。

最后

如果你对球会04游戏逆向感兴趣,欢迎关注Github,我之后会将逆向代码逐步上传,目标是完成一个存档查看甚至是编辑器。