游戏机游戏的程序修改很大程度上依赖模拟器调试器
各常用机种调试器推荐(有两个推荐时前者为主,后者为辅):
FC 推荐:Mesen2、Fceux
SFC 推荐:Mesen2、Bsnes Plus
N64 推荐:Project64(需手动打开调试开关)
GC/Wii 推荐:Dolphin(需手动打开调试开关)
GB/GBC 推荐:Mesen2、BGB
GBA 推荐:NO$GBA
NDS 推荐:NO$GBA
WiiU 推荐:Cemu
GG/SMS 推荐:Mekaw、MESS
MD 推荐:MESS、Gens rr
SS 推荐:Mednafen(某些加速卡模式的游戏断点无效)
PS 推荐:NO$PSX
PS2 推荐:PCSX2(注意QT版无法开启调试器)
PSP 推荐:PPSSPP
PCE/CD 推荐:Mesen2、Mednafen
PCFX 推荐:Mesen2、Mednafen
WS/WSC 推荐:Mednafen、MESS
NGP/NGPC 推荐:MESS
NEOGEOCD 推荐:MESS(不是很稳定,但勉强可用)
DOS 推荐:DOSBOX-X(没有读断点)
PC98 推荐:DOSBOX-X(没有读断点)
MSX/MSX2 推荐:MESS、BlueMSX
街机游戏 推荐:MAME(各种机板基本通吃)
除了模拟器外玩PC游戏游戏话目前就只有CheatEngine值得推荐
当然CheatEgine仅限于动态调试,脱壳解密还是需要OllyDBG等工具的配合
另外有些机种虽然已经不是什么新世代了但是一直没有稳定好用的调试模拟器,如果我孤陋寡闻,欢迎赐教:
Sega 32x:BizHawk模拟器看似支持实际无效
Sega MDCD:BizHawk模拟器看似支持实际无效
Sega Dreamcast:有模拟器支持看代码,但无读写断点功能
Panasonic 3DO:这机种虽然冷门,但其实游戏还挺不错的
Shap X68000:有点类似PC98的机种,模拟器没有读写断点功能
3DS:用3dstools工具解包cci或者解密后的3ds格式的rom,主程序文件一般在cxi0\exefs\code.bin,用ida加载
PS3:因为电脑配置原因没过多尝试,用ps3tools工具解包镜像里的boot文件等在用ida加载
ps4:未涉足了解过不清楚
switch:其实我也没涉足过,目前金手指和Hack的制作几乎都是实机上完成的,用的一个gdb的插件,可以实现ida联动进行断点和代码修改
没有稳定好用的调试模拟器可以改程序么?当然可以,但很麻烦。
只要数据文件没有压缩,用ida加载对应的程序文件,选择对应的指令集,则可以看到游戏整体的程序结构。
IDA反编译这种方法也有两个问题:
其一:有时候代码的反编译不准确,特别是有些老的非等长指令集,当代码穿插数据的时候会出现一些奇怪的反编译代码,这需要进行手工调整;还有某些call的回调ret直接读片段非常难判断程序走向,除非有非常准确的注释。
其二:这种整个代码的反编译,想找对应作用的代码是很难的,如果是有目的的修改某些功能,比起动态调试效率低个几百倍都说少了。
所以在没有可动态调试的模拟器或者工具时,不建议强行去做代码修改。费时费力,除非你真的特别有爱。
但IDA也有其好处,如果你能了解整个游戏的代码结构,并调整好内存分配的关系,你就能做到把游戏整个工程逆向,这时候你对游戏的修改会非常自由,比如意志之路论坛的大航海2为什么mod可以做得那么深入,就是因为整个游戏都被逆向工程了,新的功能加入后只需要重编译就可以了。但是这个需要特别注意内存分配问题,无论是WorkRam、SaveRam、VideoRam,分配出错就是出现游戏Bug、存档Bug、显示Bug了。
Bilibili上有过一篇拳皇97的逆向工程的视频,可以清晰的看到ida改游戏的优势。
为了更直观的说明一下逆向工程后的作用,放一份老外做过的MD平台的梦幻之星Ⅳ美版的逆向工程文件:
链接:
https://caiyun.139.com/m/i?014MdJt6IN5fR提取码:HhGW
下载解压后,只需要运行build.bat,就会生成:【ps4built.bin】文件;这就是MD的Rom了,可以直接模拟器载入运行
而在build之前,游戏里各项文件和代码的替换,玩家就可以随心所欲了。
但是就像之前说的,MD的工作内存、存档内存、显示内存都很有限,变更代码需要特别注意内存分配问题,不要与其他程序冲突。