Skip to content

修改二进制文件

在汉化游戏时,往往有部分程序逻辑需要改动。

修改汇编

首先阅读MIPS汇编相关章节。

劫持对外部模块的调用

  • 劫持对libfont.prx中函数的调用,实现字体替换等操作。
  • 劫持对sceUtils的调用,修改存档等界面的语言。

方法: 1. 运行时动态修改导入表jr ra的函数地址,使之指向修改后函数的地址 2. 制作新模块,仿造原外部模块的导出表(Export Table)以及库名(Library Name) 3. 运行时动态修改模块导出表,使得导出的函数指向修改后的函数地址 4. 运行时动态修改jal处的调用,将该指令的参数改为修改后的函数地址

劫持对内部函数的调用

  1. 修改函数调用处的jal指令,跳转到修改后的函数
  2. 修改内部函数开头的指令为jnop,跳转到修改后的函数

jjal二进制指令的生成

Module Tutorial中摘抄的宏


修改方式

需要注意游戏主体模块加载的基地址(通常为0x08804000),最好通过函数在运行时获取,以便依据需修改地址的偏移量重新计算地址。

基本流程

首先,使用Ghidra打开解密后的游戏主模块(EBOOT.BIN),注意设置基地址为(0x08804000),得到想修改内容所处的地址p; 其次,使用sceKernel...查询主模块的基地址new_base 则有new_p = new_base + p - 0x8804000