签到天数: 1772 天 [LV.Master]伴坛终老
|
如何Hack GBA ROM 文章来源:http://freehost26.websamba.com/zsltoolz/
; s3 _1 o7 j$ Z3 x: m
Y( m( n- g1 G作者:zhaosili(.zZ~~) 转载请注明
$ Q u6 }: X+ M- x4 N8 v
! l) j. W% N: R) M% z4 p: U8 d本文假定你已经了解80x86汇编(尽管指令集不同),并且会使用TRW2000(尽$ h I; E# u5 O1 y& ?
管没用到)之类对程序进行调试。
/ Y6 u5 W$ Z* R$ S工具:
; K: A/ g" g q& b7 b+ n$ m: C+ Z% y. ]VisualBoyAdvance-1.5、HexWorkshop(或其它十六进制编辑器)、No$Gba
- h$ i. U0 F0 W9 V, rDebugger% E, f* q$ Q& v$ U K
ROM:GBA-302 - Dave Mirra Freestyle BMX 2 (E)
* q4 m5 P2 x" ^3 O! h6 b2 l+ a写本文时笔者也是刚学会如何通过修改程序指令HACK GBA rom。(整整花了我
8 V9 _" u- a3 G5 P9 Y一上午时间研究)如果你不懂THUMB和ARM指令集的话(和我一样)就先看
6 s$ Z/ F) ~$ h: L5 JNo$Gba HELP中的CPU Reference部分,里面有较为详细的介绍。在我所HACK的9 K* M7 X! U- o- r% L/ W X6 j( G( q
这个rom用的是THUMB。Hack的目标是时间无限(尽管在游戏中如果这样改就相
$ `: P j( g. V9 \当于游戏无法结束)。
, D' E& O1 [* Y( w x. h首先,用VisualBoyAdvance-1.5的Search for Cheats...功能找到时间的地址# H8 Y! Q0 R4 o, P8 K5 @
为0200DBF0。(注:不要用Emucheat之类找,否则还要加上一定的偏移地址,
9 C/ E8 U& d2 u. ?/ B很麻烦)
3 i" a6 T; m, E l& @4 V0 l用No$gba载入ROM。选择DEBUG->DEFINE BREAK/CONDITION。在文本框中填入
1 N& j3 L, q6 P( Y$ ^3 c[0200DBF0]!,这样一个断点就设置好了。(具体断点怎么设看No$gba的HELP)5 n0 {4 P+ c: b% X5 z
这样当0200DBF0中的数值改变时就会中断下来。按F9(可能要多次)进入,正
% M, P# p( [9 w7 [9 P& s+ C1 K& Q常进行游戏。当出现时间改变时就会中断在0800A292。观察上方有指令sub 9 w7 e* r6 X0 _# u
r0,1h及str r0,[r1]估计时间就是在sub r0,1h处被减少的(为什么?如果你
( `7 @+ _ I U会用trw2000经验告诉你就是这样)。于是双击0800a28e这一行,在sub处设断。
, B8 q9 d& C, @/ ^按F9,游戏正常进行一两秒后就会被中断。此时寄存器r0=77h(十进制119,就是7 [ }' M5 k; i$ ]& m( v. l
119秒,在游戏中显示1:59)。按F7,到下一条指令str r0,[r1](r1=0200dbf0是
L% ^, H7 H: ], ]时间的地址),这条指令作用是使r1内对应地址所存的数值等于r0内的值(具
) q0 T7 O. V& d, b$ F8 [' Q体看No$Gba HELP中的CPU Reference部分)。可见要使时间无限只要将sub
/ `' c3 n' ]$ m/ x% d/ f4 Hr0,1h改掉,r0内的数值就不会变,0200dbf0处的数值也就不会变。我选择将
! K* w. F8 K2 i( H5 Y" Qsub r0,1h改为sub r0,0h(在sub上点右键,选change instrution,填入sub : g# l% d! m/ R0 `; E
r0,0h)。将断点删除,按F9进入游戏,时间是不是不会减了呢?
, z. g; M4 J7 B9 x c" l接下来就要改rom了,先记下没修改前的机器code,就是0800xxxx旁边的数值( m% v0 J- l8 A7 d
(应该是6808 3801 6008 6810)。然后记下改后的机器code,应为6808 3800 * J5 P0 k" j; c6 j3 I9 B
6008 6810。把高低位对调,对调完后应该是0868 0138 0860 1068和0868 1 I9 v6 p J2 R
0038 0860 1068。用HexWorkshop打开rom,查找0868 0138 0860 1068。找到' O9 `% |( l5 w& |, y
后修改为0868 0038 0860 1068。存盘。用VisualBoyAdvance-1.5载入play看
; t! v7 [: b5 l5 Z4 f+ L% u0 X看,时间是不是无限了。收工。+ m% _/ G6 F% ^# T! k2 s
有什么问题欢迎共同探讨,我的QQ:32743622
" p% a* R3 E& Z z
4 l6 N0 n3 O( ^$ b, R# V3 U阿姆罗:总之先学ASM吧……. O) F" \ ?6 h% l2 b0 Y
" e( A$ X! [0 X! Y( R[ 本帖最后由 疾风之狼 于 2009-3-31 20:42 编辑 ] |
|