刚上PS2模拟器官网下载了最新版的PCSX2模拟器,发现现在已经有了动态反汇编的功能了,这下子只要有时间和精力,什么瞎眼修改都不是梦了。但是本人现在缺的就是时间和精力,所以就发个入门教程,方便有时间有兴趣的人研究。
话不多说,首先需要用到的工具:CE、PS2DIS以及最新版的PCSX2模拟器。
CE虽然不能用来反汇编PS2的处理器指令,但是搜索内存数值还是要用到的。
PS2DIS是一款PS2反汇编软件,缺点是只能静态反汇编PS2的游戏程序,但这里还是需要辅助用一下。
这里以修改鬼泣3特别版日版无限跳为例,用这个最简单的例子,主要只为讲工具的用法,作为一个抛砖引玉,会了方法,其它的有兴趣就可以自己研究了。
首先运行CE和PCSX2模拟器,载入鬼泣3特别版日版的游戏,并用CE激活对PCSX2模拟器的追踪。
这里我们先找到游戏中控制二段跳状态的数值,在鬼泣3中,可以二段跳的状态值为01,无法二段跳的状态值为00。跳一下即为可二段跳状态,二段跳以后即为不可二段跳状态。经过几次反复搜索,找到以下地址:
可以看到有两个结果,0x217e3346这个是可二段跳状态值,0x217e3347这个是可踩墙跳状态值,我们这里只用第一个。注意搜索时的搜索范围用0x20000000~0x22f00000,这是PCSX2模拟器实机内存的范围。也就是说模拟器从0x20000000这里开始模拟PS2实机内存的0x00000000,即CE上看到这个内存地址0x217e3346,在PS2实机上则是0x017e3346,记下这个地址。
然后打开PCSX2模拟器上面的反汇编工具窗:
点击反汇编工具窗上面的[Breakpoint]按键,弹出输入窗。
输入刚才记下的二段跳状态值地址和数据值长度,这里我们只追踪条件判定指令,所以只勾选[Read]。
然后回到游戏窗口,按一下跳,反汇编工能就会被激活追踪二段跳的状态值条件判定指令。
结果光标会停在00243318 lb v0,0x2906(s0)这条指令上。
这条指令的意思就是从(s0)寄存器为指针0x2906为修正值的地址(即0x017e3346)读1字节写到v0寄存器。
然后紧接着下面0024331c bgtz v0,0x00243330,这条指令的意思就是如果v0寄存器中的值大于0则程序跳转到0x00243330,否则不跳转继续下一条指令。
因为二段跳的状态值为01时表示可以二段跳,所以把0024331c bgtz v0,0x00243330,大于0则跳转改成无条件跳转就可以实现无限二段跳了。
光标选定0024331c这条指令,右键出菜单修改这条指令。
修改成无条件跳转指令后,再继续点击反汇编窗口左上角的[Run]直至程序结尾,按键变成[Break],然后取消对地址0x017e3346这个地址的追踪,要不然游戏又会因为追踪这个地址而被暂停。再回到游戏窗口,发现已经可以无限二段跳了,包括VERGIL。
也就是说我们只要把游戏程序中0024331c这个地址的大于跳转指令改成无条件跳转指令就可以实现无限二段跳了。那么金手指代码要怎么来实现呢,这里我们就要用到PS2DIS。
用WINRAR解压出PS2鬼泣3特别版光盘镜像中的slpm_661.60这个文件,这个字节加编号的文件就是游戏的主程序程序,其它游戏也是一样,只是字节和编号不同。
然后用PS2DIS打开slpm_661.60这个文件。用键盘[G]键弹出地址跳转窗,跳转到00243330这条指令处。
可以看到PS2DIS上面显示的指令和刚才PCSX2反汇编时的指令稍有些区别,可能是指令写法上的不同,但是处理器机器码是一样的。
可以看到PS2DIS上面显示的0024331c这里的机器码是1c400004,汇编bgtz v0,$00243330
也就是如果v0的值大于0则跳转到00243330。这里我们双击0024331c这条指令,弹出修改窗口。把[Command]栏中的原指令复制到[Comment]栏中备忘,然后把原指令修改成
beq zero,zero $00243330
这条指令的含义就是如果0=0则跳转到00243330,因为0肯定=0,所以这就是PS2上的无条件跳转。修改完后,可以看到[Data]栏的机器码变成了10000004。
所以无限二段跳的金手指代码就是
2024331c 10000004
金手指2字打头表示后面数值是4字节,地址是0024331c,数据修改为10000004。
把这条金手指加入到模拟器金手指文件中即可实现无限二段跳了。
附效果图一张:
话不多说,首先需要用到的工具:CE、PS2DIS以及最新版的PCSX2模拟器。
CE虽然不能用来反汇编PS2的处理器指令,但是搜索内存数值还是要用到的。
PS2DIS是一款PS2反汇编软件,缺点是只能静态反汇编PS2的游戏程序,但这里还是需要辅助用一下。
这里以修改鬼泣3特别版日版无限跳为例,用这个最简单的例子,主要只为讲工具的用法,作为一个抛砖引玉,会了方法,其它的有兴趣就可以自己研究了。
首先运行CE和PCSX2模拟器,载入鬼泣3特别版日版的游戏,并用CE激活对PCSX2模拟器的追踪。
这里我们先找到游戏中控制二段跳状态的数值,在鬼泣3中,可以二段跳的状态值为01,无法二段跳的状态值为00。跳一下即为可二段跳状态,二段跳以后即为不可二段跳状态。经过几次反复搜索,找到以下地址:
可以看到有两个结果,0x217e3346这个是可二段跳状态值,0x217e3347这个是可踩墙跳状态值,我们这里只用第一个。注意搜索时的搜索范围用0x20000000~0x22f00000,这是PCSX2模拟器实机内存的范围。也就是说模拟器从0x20000000这里开始模拟PS2实机内存的0x00000000,即CE上看到这个内存地址0x217e3346,在PS2实机上则是0x017e3346,记下这个地址。
然后打开PCSX2模拟器上面的反汇编工具窗:
点击反汇编工具窗上面的[Breakpoint]按键,弹出输入窗。
输入刚才记下的二段跳状态值地址和数据值长度,这里我们只追踪条件判定指令,所以只勾选[Read]。
然后回到游戏窗口,按一下跳,反汇编工能就会被激活追踪二段跳的状态值条件判定指令。
结果光标会停在00243318 lb v0,0x2906(s0)这条指令上。
这条指令的意思就是从(s0)寄存器为指针0x2906为修正值的地址(即0x017e3346)读1字节写到v0寄存器。
然后紧接着下面0024331c bgtz v0,0x00243330,这条指令的意思就是如果v0寄存器中的值大于0则程序跳转到0x00243330,否则不跳转继续下一条指令。
因为二段跳的状态值为01时表示可以二段跳,所以把0024331c bgtz v0,0x00243330,大于0则跳转改成无条件跳转就可以实现无限二段跳了。
光标选定0024331c这条指令,右键出菜单修改这条指令。
修改成无条件跳转指令后,再继续点击反汇编窗口左上角的[Run]直至程序结尾,按键变成[Break],然后取消对地址0x017e3346这个地址的追踪,要不然游戏又会因为追踪这个地址而被暂停。再回到游戏窗口,发现已经可以无限二段跳了,包括VERGIL。
也就是说我们只要把游戏程序中0024331c这个地址的大于跳转指令改成无条件跳转指令就可以实现无限二段跳了。那么金手指代码要怎么来实现呢,这里我们就要用到PS2DIS。
用WINRAR解压出PS2鬼泣3特别版光盘镜像中的slpm_661.60这个文件,这个字节加编号的文件就是游戏的主程序程序,其它游戏也是一样,只是字节和编号不同。
然后用PS2DIS打开slpm_661.60这个文件。用键盘[G]键弹出地址跳转窗,跳转到00243330这条指令处。
可以看到PS2DIS上面显示的指令和刚才PCSX2反汇编时的指令稍有些区别,可能是指令写法上的不同,但是处理器机器码是一样的。
可以看到PS2DIS上面显示的0024331c这里的机器码是1c400004,汇编bgtz v0,$00243330
也就是如果v0的值大于0则跳转到00243330。这里我们双击0024331c这条指令,弹出修改窗口。把[Command]栏中的原指令复制到[Comment]栏中备忘,然后把原指令修改成
beq zero,zero $00243330
这条指令的含义就是如果0=0则跳转到00243330,因为0肯定=0,所以这就是PS2上的无条件跳转。修改完后,可以看到[Data]栏的机器码变成了10000004。
所以无限二段跳的金手指代码就是
2024331c 10000004
金手指2字打头表示后面数值是4字节,地址是0024331c,数据修改为10000004。
把这条金手指加入到模拟器金手指文件中即可实现无限二段跳了。
附效果图一张: