EMU618社区

 找回密码
 立即注册
搜索
查看: 3835|回复: 4

[转载HACK教程] 如何Hack GBA ROM入门(作者:zhaosili(.zZ~~) )

 关闭 [复制链接]

签到天数: 1772 天

[LV.Master]伴坛终老

发表于 2009-3-9 20:42:58 | 显示全部楼层 |阅读模式
如何Hack GBA ROM  文章来源:http://freehost26.websamba.com/zsltoolz/
! {7 s0 J; K! d6 {) n) f% G" ?1 E: |+ o5 @" K, k& H- x
作者:zhaosili(.zZ~~) 转载请注明
" _$ C1 ]: t# H- X  K' f- ~* L/ ~0 h: k! d! Y
本文假定你已经了解80x86汇编(尽管指令集不同),并且会使用TRW2000(尽3 u  ^5 S! W/ P; l% A" R
管没用到)之类对程序进行调试。
2 o0 h  [; x. m3 B0 z! T+ E工具:
) c$ ?9 [) y) T- y! pVisualBoyAdvance-1.5、HexWorkshop(或其它十六进制编辑器)、No$Gba 8 N) X4 B- G& e% ]
Debugger+ Q1 @3 c8 U" m, A' _3 {9 @& z
ROM:GBA-302 - Dave Mirra Freestyle BMX 2 (E)' X9 _- ]7 {4 k" l4 C( ]
写本文时笔者也是刚学会如何通过修改程序指令HACK GBA rom。(整整花了我
. T4 g: i0 D; T9 d& R7 E5 A; y一上午时间研究)如果你不懂THUMB和ARM指令集的话(和我一样)就先看4 g5 R4 n, ~. h8 B
No$Gba HELP中的CPU Reference部分,里面有较为详细的介绍。在我所HACK的
3 U4 e9 K% K4 ]% F这个rom用的是THUMB。Hack的目标是时间无限(尽管在游戏中如果这样改就相
( ?5 ~! J% F* \6 b# p. R当于游戏无法结束)。) R: k7 P6 y' G; |7 E4 U4 o2 [/ ^& m4 |
首先,用VisualBoyAdvance-1.5的Search for Cheats...功能找到时间的地址) G& c1 N! F1 o6 s
为0200DBF0。(注:不要用Emucheat之类找,否则还要加上一定的偏移地址,
) }. D0 O: E" A% d很麻烦)( }; O+ `3 H9 _7 E9 H3 N# I! y( c
用No$gba载入ROM。选择DEBUG->DEFINE BREAK/CONDITION。在文本框中填入, v0 f& Q- ]* j' c
[0200DBF0]!,这样一个断点就设置好了。(具体断点怎么设看No$gba的HELP)
/ S4 m& o& I  q+ v这样当0200DBF0中的数值改变时就会中断下来。按F9(可能要多次)进入,正6 L5 @8 r- h) b8 K2 g. z
常进行游戏。当出现时间改变时就会中断在0800A292。观察上方有指令sub # s$ E" i) W$ h$ j
r0,1h及str r0,[r1]估计时间就是在sub r0,1h处被减少的(为什么?如果你- Y2 j, q0 h- `1 z; T9 k
会用trw2000经验告诉你就是这样)。于是双击0800a28e这一行,在sub处设断。
# e6 F) Z1 Q9 h; B' L按F9,游戏正常进行一两秒后就会被中断。此时寄存器r0=77h(十进制119,就是2 B$ |( K' p; T9 C
119秒,在游戏中显示1:59)。按F7,到下一条指令str r0,[r1](r1=0200dbf0是: X1 ~; p# D" ]4 f, W$ Y
时间的地址),这条指令作用是使r1内对应地址所存的数值等于r0内的值(具
$ M% @* E, `; t) v, {6 E体看No$Gba HELP中的CPU Reference部分)。可见要使时间无限只要将sub
) _- Y9 _! A# E7 b: q5 X: I. Rr0,1h改掉,r0内的数值就不会变,0200dbf0处的数值也就不会变。我选择将
+ W: Z+ {* b/ p! ~! ^' Vsub r0,1h改为sub r0,0h(在sub上点右键,选change instrution,填入sub
, M4 @+ U8 e  S' o2 x1 W; @! \7 hr0,0h)。将断点删除,按F9进入游戏,时间是不是不会减了呢?
; }3 g6 g: f: a- x( l, E8 Q- I$ ^3 u接下来就要改rom了,先记下没修改前的机器code,就是0800xxxx旁边的数值' u; a% o8 c% X+ i
(应该是6808 3801 6008 6810)。然后记下改后的机器code,应为6808 3800
; b  H& U& U" i( k: l3 O# y  V6008 6810。把高低位对调,对调完后应该是0868 0138 0860 1068和0868
; }/ A) d1 z0 S0 f) Z! N0038 0860 1068。用HexWorkshop打开rom,查找0868 0138 0860 1068。找到6 l8 _4 i4 k; k* b- b
后修改为0868 0038 0860 1068。存盘。用VisualBoyAdvance-1.5载入play看( A2 u# d+ p: v5 K: a7 f$ V
看,时间是不是无限了。收工。
9 ]5 b3 w/ m" i. z有什么问题欢迎共同探讨,我的QQ:327436225 L( K3 Y1 \4 K! v  c! t8 f3 Z
, o; x- D& {4 O2 e6 W' d
阿姆罗:总之先学ASM吧……9 O  T. K  {8 O8 ]3 }# H' V+ X

  L2 G/ T  d4 Q' O5 U[ 本帖最后由 疾风之狼 于 2009-3-31 20:42 编辑 ]

签到天数: 7 天

[LV.3]偶尔看看II

发表于 2009-3-9 21:45:02 | 显示全部楼层
技术贴!
+ P( [) C4 N  _$ t5 I支持下。

该用户从未签到

发表于 2009-3-10 00:18:33 | 显示全部楼层
先占领这楼 日后慢慢研究

该用户从未签到

发表于 2009-5-17 11:16:15 | 显示全部楼层
如果有图就最好了

签到天数: 417 天

[LV.9]以坛为家II

发表于 2009-5-21 10:14:09 | 显示全部楼层
我是菜鸟,恐怕学不会:victory:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|国治模拟精品屋 ( 沪ICP备15012945号-1 )

GMT+8, 2024-11-18 08:25 , Processed in 1.092774 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表