简易 GBA ROM 去片头教程
原文来自已被删除的贴吧帖子:【原创】GBA ROM 去片头教程 by maxzhou88;由 Jixun 修改整理后发布。
今晚 QQ 群友@强迫症晚期患者,发我一个 GBA ROM,文件是 Hoshi no Kirby-Yume no Izumi Deluxe.gba,就是汉化版的“-星之卡比-梦之泉豪华版”,开机有汉化组的 LOGO 动画。
看看这群友的名字就知道,是强迫症晚期患者啊,他喜欢 No intro 的 ROM,想把它去掉,同时让我写个去片头的教程。
其实嘛汉化组弄个自己的宣传片头是无可厚非的,毕竟是人家心血劳动的东西。不过呢有些带片头的 ROM 可能让实体 GBA 游戏卡死机,比如把这个 ROM 烧录到烧录卡中插 GBA 主机就会死在那个片头上了,好像是白屏吧我记得,模拟器运行倒是可以。
于是强迫症患者一般用 GTA(GBA Tool Advance) 工具来修改,该工具非常强大噢,我一般用它来给 ROM 打 SRAM 记忆补丁的,但去片头我一般不用它,原因我下面会讲。
据我统计,90% 以上的 GBA ROM 的文件开始 4 个字节都是一个固定的跳转指令:
B 080000C0 (跳转到 080000C0 地址)
它就是一个跳过 ROM 头数据区(注:此处储存的应该是任天堂的 Logo 数据)的跳转指令,ROM 大小为 0xC0(16进制数),所以这就是上图 GTA 工具中的“起始偏移量”,是不是 080000C0 啊,而 8000000 就是GBA卡带ROM在系统中的首地址。
一般带片头的 ROM 起始偏移就不是 80000C0,而是 JUMP 跳到它自己的片头代码处。这种片头就非常好除,用上面的 GTA 工具就可以了,该工具的原理就是把跳到片头的起始偏移改回 80000C0 就可以了。
B 08000CO 指令的16进制代码是: 2E,00,00,EA
GTA 工具就是简单的把ROM的开始4个字节改成 2e,00,00,ea。
然而,大家看看上图吧,起始偏移处就是 80000C0 哦,然并卵,片头去不掉。
这就是该 ROM 的汉化组片头,牛逼的 CGP 小组啊!
呵呵,人家汉化组也不是傻子,那么容易让小白通过工具去掉他们的牛逼片头 Logo,人家肯定要“加密”处理嘛!
既然 GBA ROM 的头数据在 C0 处结束,那片头代码最后也得跳回这个地址附近。简单的加密就是片头代码执行完后就跳回到 C0 地址,复杂的就跳到更后面哦。
我们来看看 C0 处是什么东东:
原来是 FE,D8,1F,EA。注意 C0 处的第三个字节 EA,它就是 JUMP 指令代码哦,这个 JUMP 其实就是汉化组做的跳他们片头的指令。
看来这个加密是小儿科,它躲过了 GTA 去片头工具,却躲不过周哥的法眼,我把它恢复成原版的指令即可。
原版指令就是:12,00,a0,e0
大多 ROM 的 C0 偏移处都是它,把这里修改后保存即可。
哈哈,片头去掉了。
啰嗦了半天,其实很简单。
基本上 60% 的片头用GTA即可,30% 的片头要手动用 (2) 的方法去掉,最后 10% 的片头要用模拟器 No$GBA 来 Debug 动态跟踪来去掉。
今晚 QQ 群友@强迫症晚期患者,发我一个 GBA ROM,文件是 Hoshi no Kirby-Yume no Izumi Deluxe.gba,就是汉化版的“-星之卡比-梦之泉豪华版”,开机有汉化组的 LOGO 动画。
看看这群友的名字就知道,是强迫症晚期患者啊,他喜欢 No intro 的 ROM,想把它去掉,同时让我写个去片头的教程。
其实嘛汉化组弄个自己的宣传片头是无可厚非的,毕竟是人家心血劳动的东西。不过呢有些带片头的 ROM 可能让实体 GBA 游戏卡死机,比如把这个 ROM 烧录到烧录卡中插 GBA 主机就会死在那个片头上了,好像是白屏吧我记得,模拟器运行倒是可以。
![]() |
| GBA Tool Advance 工具 |
据我统计,90% 以上的 GBA ROM 的文件开始 4 个字节都是一个固定的跳转指令:
B 080000C0 (跳转到 080000C0 地址)
它就是一个跳过 ROM 头数据区(注:此处储存的应该是任天堂的 Logo 数据)的跳转指令,ROM 大小为 0xC0(16进制数),所以这就是上图 GTA 工具中的“起始偏移量”,是不是 080000C0 啊,而 8000000 就是GBA卡带ROM在系统中的首地址。
一般带片头的 ROM 起始偏移就不是 80000C0,而是 JUMP 跳到它自己的片头代码处。这种片头就非常好除,用上面的 GTA 工具就可以了,该工具的原理就是把跳到片头的起始偏移改回 80000C0 就可以了。
B 08000CO 指令的16进制代码是: 2E,00,00,EA
GTA 工具就是简单的把ROM的开始4个字节改成 2e,00,00,ea。
然而,大家看看上图吧,起始偏移处就是 80000C0 哦,然并卵,片头去不掉。
这就是该 ROM 的汉化组片头,牛逼的 CGP 小组啊!
![]() |
| CGP 小组的汉化片头 |
用十六进制编辑器打开 ROM 文件查看 16 进制代码,开始的 4 个字节就是 2e,00,00,ea ,就是原始的 B 080000C0 指令嘛,所以无论是 GTA 工具还是人工用编辑器修改这 4 个字节都是然并卵。
![]() |
| ROM 文件头部 |
既然 GBA ROM 的头数据在 C0 处结束,那片头代码最后也得跳回这个地址附近。简单的加密就是片头代码执行完后就跳回到 C0 地址,复杂的就跳到更后面哦。
我们来看看 C0 处是什么东东:
![]() |
| ROM 文件在 C0 地址处的代码 |
看来这个加密是小儿科,它躲过了 GTA 去片头工具,却躲不过周哥的法眼,我把它恢复成原版的指令即可。
![]() |
| 将 C0 处还原成原始指令 |
大多 ROM 的 C0 偏移处都是它,把这里修改后保存即可。
哈哈,片头去掉了。
啰嗦了半天,其实很简单。
- 先用GTA工具去片头,如果GTA工具显示的“其实偏移量”是080000C0,那就无效
- 用16进制编辑工具(如UE,HEXedit)在地址C0处手工恢复原始指令12,00,A0,E0
- 如果然并卵,那就等我再来开讲。
基本上 60% 的片头用GTA即可,30% 的片头要手动用 (2) 的方法去掉,最后 10% 的片头要用模拟器 No$GBA 来 Debug 动态跟踪来去掉。






评论
发表评论