EMU618社区

 找回密码
 立即注册
搜索
查看: 2295|回复: 17

[原创HACK教程] MD HACK简单教程(重制) [回档后帖子丢失了,重发一份]

[复制链接]

签到天数: 1976 天

[LV.Master]伴坛终老

发表于 2013-11-12 22:01:29 | 显示全部楼层 |阅读模式
准备东西:68K指令集资料、REGEN DEBUG、十六进制编辑器0 M; g6 B, p' v7 @9 U- L4 G/ J+ D

5 Z! w$ w/ ?/ ^5 e5 k* h/ Q- VREGEN DEBUG官网下载页面:http://aamirm.hacking-cult.org/www/regen.html% v( j2 m% i; s- ?

5 c: b& M+ ^9 t' a# d1 O以前写的MD HACK教程是用MD调试器,但这MD调试器在使用过程发现有点缺点,显示机械码只显示前2位,后面地址或数值却没有显示,有可能造成后来新手在修改ROM时寻找不到要修改的数据。- t+ b/ k- h7 G$ u1 W4 }( n, Z
3 N4 {6 k& h- b  M$ m( m, @
本篇教程考虑改用REGEN 0.972 Debug版来调试跟踪,现在的REGEN DEBUG很强大,可以考虑放弃MD调试器。
( w1 u, y& F% x! t- d' ~! k- m+ o' i' z0 }. V. L# |; N8 Z
以《魂斗罗:铁血军团》日版为例,修改目标:体力值不减' f3 E; d: F5 Q7 E- U
# T  C! E1 {3 W- R4 H4 |6 q' b2 Q) A
1。先找到《魂斗罗:铁血军团》体力值存放地址,可通过REGEN自带的作弊码查找功能来找,我找到了,存放地址是0xFFFA0D。
; N2 I* b( b' ^$ G! d3 W
9 z: i1 {: m* k, h, @7 U2。选择人物进入游戏后,点击Tools->68000 Debugger进入68000调试器界面,图1:! Q" a% y+ w3 H# Z( c$ J2 s8 _

( ^3 _2 a6 M9 m# Y/ W& B8 U0 K5 R& p8 b! O) g( j& g
左上角框是显示汇编指令,右边是寄存器显示
) Q! k) l$ Y$ ]) [: Q- S9 b$ L* H6 }
Address Breakpoints是地址断点+ r) \: Q1 g# z) f
Address Range是对一定范围地址设置断点
2 G' N$ \8 d8 D! r; K. M" lRegister breakpoints是寄存器断点
& E9 Q% w) a8 A8 Q/ z# e5 }VDP Breakpoint Range是对VDP一定范围地址设置断点2 v. W' O4 F4 y( ]0 W
VRAM breakpoints是VRAM断点# F0 K5 |# `8 b4 [" n+ m
Go to address是转到指定的地址6 l) d. y5 I) o/ }, r
show disassembly是对指定的地址反汇编& W# X" ^: Z/ r; {
Debug step是进行单步或N步调试% i$ h2 z! S  T( j
ROM MEMORY是ROM Viewer
3 P' m4 q4 q) a+ m1 e68000 MEMORY是RAM Viewer$ _# g, L/ o7 E! C
Z80 Debug是Z80调试器
9 J* F+ _( O  z8 R5 {' ^7 C3 S9 K0 h4 w' \9 _
Read是读,Write是写,PC表示是PC地址,Trace是跟踪(选择该项会在模拟器目录下生成ASM文件)# E9 b) S* N& H4 e

% ^; o3 `1 s" Y' I3 S: m( A7 gRESET是重启游戏,RESET68K是68K重启,RESETZ80是Z80重启3 ~( u8 n6 @% m: l1 T+ ^& b0 K
) _, \6 f. b$ D+ o+ m/ u! r! m/ s
3。在Address Breakpoints的Set Breakpoint右边框输入地址FFFA0D,Write选项加勾,再在Set Breakpoint左边框打勾,图2:
: M( Z. \; t( _
9 O# B8 |/ t6 d
& K* P3 ^- @& z4 `+ v- M2 F0 ~% Y* z4。点击OK返回游戏,当被敌人攻中时调试器发生中断,图3:
6 ?+ |) z% K9 [5 l2 d
; x9 o7 u3 x8 f( I  t* f. @. N
& z6 Q) a8 ^+ o* y) V: j+ i9 I2 A指令停在011DEE 1C2A000D move.b ($d,A2),D6这一行,前面指令却没有显示,用show disassembly把11DE0~11DFA这段地址反汇编看看,图4:
# X+ y( f4 _4 u3 ?4 N& z6 i
  \. G3 @3 p- O) Y# A, e1 _/ x' k! r6 s0 |6 c9 \# B- W
现在来分析一下:
' G4 M  i5 f8 v* @. pA2=FFFFFA00+ A, `% D0 F$ E; @# L7 V2 ]3 w
D1=000000012 U3 A' `" H/ r) j' M. F; ?' I
% B& T- i7 `, t/ l7 L
011DEA 932A000D sub.b D1,($d,A2)  把$FFFA0D(A2寄存器的数据($FFFFFA00)+$d=$FFFFFA0D)的地址单字节数据减去D1寄存器的数值,结果存入$FFFA0D
2 {5 o2 n* w: X3 x* |  n. S011DEE 1C2A000D move.b ($d,A2),D6 把$FFFA0D的单字节数据存入D6寄存器
- Q4 `1 W* c+ N. h. J% ~
- C3 t0 b" L9 A' V9 p只要把11DEA指令NOP掉,就可以实现体力不减,NOP指令机械码是4E719 ^/ K/ o! a6 F' e0 C

1 u- P" M6 U4 K; S) _% O3 l5。点击ROM MEMORY进入ROM viewer界面,来到011DE0地址,在Set new value输入11DEA和4E714E71,再点击Set 1-10 bytes写入,再点击OK退出ROM viewer,图5、图6:
4 C: q1 _$ C* }. ?+ w# f! k0 _$ r% H/ [: U

( @! e5 s6 A5 N$ K' U& x) k/ ?# ]5 B* w注意:在ROM viewer修改,修改结果是不会被写入ROM里,要修改ROM还得用16进制编辑器。
: R! l/ F+ l5 t" z% D
6 a/ @  `& F( h6。再对11DE0~11DFA这段地址反汇编看看,11DEA的指令被NOP掉,图7:+ Y2 G/ k/ I. C4 r# w: b) |

- u+ _$ j7 p2 ?# W. ~/ f" C, e& ]8 t: w# i" P; a
7。把Set Breakpoint和write的打勾去掉,再点OK回到游戏看看,体力是否不减了?体力不减说明修改成功。图8:- ?, H8 e: J5 J

- k( l$ l: c) v  m5 v: l
! d( a5 l0 z" p+ l# s/ u& d! a" g8。打开WINHEX或UE,载入《魂斗罗:铁血军团》日版ROM,来到0x11DEA,把93 2A 00 0D修改为4E 71 4E 71,保存。图9、图10:
: G* ~6 ]2 j' F  _" a& a/ q3 ~, n: ?* Q# n. Z
9 ~4 K+ J5 |% g- @9 J
疾风之狼
. e! ^$ U6 g- l4 I/ A2013/09/13
* w0 }9 T: h1 B# B8 x
( ?- p! C! E% C7 h' U
如看不清图片请点击图片放大,或至我博客:http://zero3c.blog.163.com/blog/static/278215082013813111414953/ 观看

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
[发帖际遇]: 疾风之狼花3 个 柠檬买彩票,血本无归T_T. 幸运榜 / 衰神榜

签到天数: 632 天

[LV.9]以坛为家II

发表于 2013-11-12 22:09:04 | 显示全部楼层
本帖最后由 ABC3637 于 2013-11-12 22:10 编辑 0 n) K1 ^2 X( Y, A/ j- P

& o* H6 c$ j7 U* f* i/ Q, g9 g1 ]大力顶下~好贴前,坐沙发。

签到天数: 2060 天

[LV.Master]伴坛终老

发表于 2013-11-12 22:51:55 | 显示全部楼层
满复杂的。。。。。
[发帖际遇]: liujunbtx踩坏了花花草草,被罚款4 个 柠檬. 幸运榜 / 衰神榜

签到天数: 2560 天

[LV.Master]伴坛终老

发表于 2013-11-13 00:02:28 | 显示全部楼层
回档后最可惜的就是那些DEBUG教程了,现在终于等来了重发,支持一下。

签到天数: 107 天

[LV.6]常住居民II

发表于 2013-11-13 12:40:30 | 显示全部楼层
好贴必须留名
[发帖际遇]: 猫咪的守候踩坏了花花草草,被罚款4 个 柠檬. 幸运榜 / 衰神榜

签到天数: 2950 天

[LV.Master]伴坛终老

发表于 2013-11-13 12:55:49 | 显示全部楼层
很不错啊,有空学一学。
[发帖际遇]: 天迹云间扶老大爷过马路,警察叔叔奖励天迹云间 2 个 柠檬. 幸运榜 / 衰神榜

签到天数: 380 天

[LV.9]以坛为家II

发表于 2013-11-14 20:04:33 | 显示全部楼层
喜欢看到这样的科普帖,顶上去。非常感谢楼主的贡献
[发帖际遇]: drogon49踩坏了花花草草,被罚款6 个 柠檬. 幸运榜 / 衰神榜

签到天数: 532 天

[LV.9]以坛为家II

发表于 2013-11-17 09:39:28 | 显示全部楼层
看这麻烦 弄起来很简单 呵呵
[发帖际遇]: 啍辤★箛独踩坏了花花草草,被罚款3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 327 天

[LV.8]以坛为家I

发表于 2013-11-17 18:55:55 | 显示全部楼层
虽然不怎么懂,看看稍微学习下!

签到天数: 260 天

[LV.8]以坛为家I

发表于 2013-11-17 20:29:32 | 显示全部楼层
观摩学习下
[发帖际遇]: climb2010 被钱袋砸中进医院,看病花了 1 个 柠檬. 幸运榜 / 衰神榜

签到天数: 548 天

[LV.9]以坛为家II

发表于 2013-11-18 14:53:50 | 显示全部楼层
有点眼花 呵呵 辛苦你了

签到天数: 231 天

[LV.7]常住居民III

发表于 2013-11-21 22:53:37 | 显示全部楼层
这个真不错!受教了!!{:4_92:}

签到天数: 229 天

[LV.7]常住居民III

发表于 2013-11-21 23:52:49 | 显示全部楼层
看了英文我的眼睛就开始晕了,为什么不是中文的....
[发帖际遇]: xindiandi 捡了钱没交公 柠檬 降了 2 个 . 幸运榜 / 衰神榜

签到天数: 3 天

[LV.2]偶尔看看I

发表于 2024-4-5 22:29:12 | 显示全部楼层
大佬您好,晚辈这边斗胆咨询您一个关于MD Hack的问题,如有冒犯还请海涵!
# y/ C( S) c9 Z4 |! y2 x: y/ n1 G# ?8 y, O3 }! j
有幸拜读了您的教程:( S- {7 K. e0 S$ a
http://2006.emu618.org:6180/thread-193604-1-1.html
3 x3 M9 c- z' R; |7 H3 ^$ P( [
3 F! _# P( t4 |. @, O. Q跟着您的教程做了一遍,收获很大。, W9 E6 t1 n* C. I8 A- d1 t' @7 P

9 B  U- M, |' v3 \% ^: o7 `* e, n不过我由此想到了一个问题:* N0 ~2 G6 c/ G" H
例如《魂斗罗:铁血军团》体力值的例子
0 H5 `. n% I* l( ]$ U* \" f) j) `  E9 f
011DE8  7A01  moveq #$1,D5% a1 l) |4 N. d" j$ H; b+ U
011DEA  932A000D  sub.b  D1,($d,A2)  ?% a4 B5 E+ E
011DEE  1C2A000D  move.b ($d,A2),D6
( d3 Z, y* F5 Q) M. I: D3 D* M6 C2 Z# q
3 @+ A) c  v, d3 u实测,在将932A000D改成4E714E71的前提下,再将7A01也改成4E71,不会影响无敌效果。  P4 U% ^0 I2 x# o

) E, h: P# u$ N) S! f2 f- P那么我想,如果像下面这样,将011DE8和011DEA处的命令改成JMP,跳转到某个空白处,然后在空白处重新写上011DE8和011DEA处的命令,最后再跳转回011DEE,是不是就可以恢复正常的受伤功能:# S& R) {9 ]" \% L8 `  [

* X, h4 q9 I" P4 x' L0 x011DE8  4EF9000801C0  jmp $0801C0.L! ^3 ^! g( O/ d7 E
! }8 b8 S+ F" Q* u8 |! }6 M
0801C0  7A01  moveq #$1,D5. k  T+ _4 `( H! t. W
0801C2  932A000D  sub.b  D1,($d,A2)4 p. Y9 D" t2 S* B: L8 W
0801C6  4EF900011DEE  jmp $011DEE.L
& W7 W) l7 s9 X& ]0 I9 r
. r' H* u1 P" ?011DEE  1C2A000D  move.b ($d,A2),D6
. t5 \4 W" p) d, O8 o
7 L( N* z3 H$ A( N然而修改后并未达到预期效果。相反,游戏在角色受伤后立即死机。2 n( K) b" f6 c% y" H7 Q& Z

+ Y$ `1 W# p$ n# T9 O; {4 }" Q请问这是为什么?如果想实现这种操作的话,正确的方法是什么?
# i& H8 j( I0 ~+ M) P
$ ?# L0 O! A4 |9 R2 ]之所以产生这个想法,是因为最近在汉化的一款游戏需要对字库进行扩容。汉化已经几乎完成了,然而游戏中的一些小字体区域还存在一些问题,如果不改会很难看。
- x6 P8 `, m1 W
5 l4 j  i. A5 w4 ?9 F# U, r这些小字体由于只使用一个字节进行编码,游戏原本只能显示256个字符。我希望将编码方式改为00-EF为正常映射,F0-FF则切换VDP至相应页码。我认为这需要将原本的程序跳转至一空白处之后再进行自由发挥。
! E3 V5 B- u+ l% L& u1 |# `
; h0 P% r/ Q, v/ Z0 L我并没有任何汇编或反汇编经验,所以打算先从最简单的进行尝试。想不到一上来就遇到了问题。7 r: o$ B2 R6 Y# z$ P1 E

- G4 v$ c! w6 q9 ~5 [1 n  G! e% K期待您的回复!
回复 支持 反对

使用道具 举报

签到天数: 1976 天

[LV.Master]伴坛终老

 楼主| 发表于 2024-4-6 01:40:38 | 显示全部楼层
SchreckgSoldat 发表于 2024-4-5 22:298 M2 n0 z  o# o( b; `9 R4 Z
大佬您好,晚辈这边斗胆咨询您一个关于MD Hack的问题,如有冒犯还请海涵!
3 m6 |8 j. Y1 L+ i6 B9 e. e. _( q6 H2 n* j  @) p
有幸拜读了您的教程:

7 t2 W5 c9 j5 M4 s: H- C
6 H0 Q# ]& C5 S. J0 ]ROM名称:Contra - The Hardcore (J).bin! E+ U/ I* ^+ V# ]/ I$ e
8 p2 h+ R8 }5 K5 t
  1. 011DEA  932A000D  sub.b  D1,($d,A2)        ->4EF9 001FDD00 jmp $1fdd00.L! i: d5 v4 o6 E$ ]
  2. 011DEE  1C2A000D  move.b ($d,A2),D6        ->4E71 nop
    ( o: e6 \3 L3 E3 W
  3. 011DF2  6A02          bpl $11df6: B% _, q' j0 m2 g& L1 L) q& s+ \
  4. % I( Z, }* \5 B) c3 G, H2 y9 E0 A
  5. 1FDD00:
    . O8 Q* K8 L( E# y8 t1 |/ S. G
  6. 932A000D  sub.b  D1,($d,A2)
    6 a2 P) x- j4 I8 i
  7. 1C2A000D  move.b ($d,A2),D6
    0 u0 N4 ?2 u$ P5 I
  8. 4EF900011DF2 jmp $011df2.L
    9 T+ ^* d+ S, T* Y2 O
复制代码
回复 支持 反对

使用道具 举报

签到天数: 3 天

[LV.2]偶尔看看I

发表于 2024-4-6 12:18:46 | 显示全部楼层
疾风之狼 发表于 2024-4-6 01:40
6 H* Q3 p( V) S0 C6 {ROM名称:Contra - The Hardcore (J).bin

9 J8 C- I% i' T! \/ B感谢大佬!  [( F* i$ d& x! o

& _$ k' i' z; ?3 F2 x请问造成这种现象的原因是什么呢?为什么向后移动一个命令写入JMP就可以正常运行,而像我那样就不可以呢?
回复 支持 反对

使用道具 举报

签到天数: 1976 天

[LV.Master]伴坛终老

 楼主| 发表于 2024-4-6 18:06:29 | 显示全部楼层
SchreckgSoldat 发表于 2024-4-6 12:18
: T6 F9 A/ j+ m( K7 B# U感谢大佬!
; q1 l" j0 ?/ _7 h5 m* W& s% Z* s- m! T: P0 c& K
请问造成这种现象的原因是什么呢?为什么向后移动一个命令写入JMP就可以正常运行,而像我 ...
  1. 011DE0 7A00        moveq #$0,D5+ \+ Z2 @7 X8 K7 l7 N% k: f6 _8 i
  2. 011DE2 6006        bra $11dea
      c( |5 k3 ]' p2 `$ x
  3. 011DE4 45F8FA20        lea $fa20.w,A2
    9 F$ }: V4 ~8 n5 c3 K
  4. 011DE8 7A01        moveq #$1,D5: B8 l+ n& e: v% Q3 r: J! {4 @
  5. 011DEA 932A000D        sub.b D1,($d,A2)
    9 S  v3 i& _) Y9 }8 Z# m# A
  6. 011DEE 1C2A000D move.b ($d,A2),D62 a3 g6 S8 k5 c3 u! ]' U4 P$ h% Z
  7. 011DF2 6A02        bpl $11df6
    3 r5 s; }5 d" a
复制代码

3 y" y7 ^; l. U6 R4 i; a8 P3 A" g
: J$ w( b4 [/ F+ O你改错位置,011DE8地址指令没有执行到,程序是从011DE2跳到011DEA执行。
5 n2 i4 v! ~! @- A6 Q) {7 z; F5 P
/ r5 R; w" z8 T' h/ s你011DE8改成4EF9 0008 01C0的话,造成后果从011DE2跳到011DEA执行,那么011DEA指令机械码是0008 01C0,CPU识别不了错误的机械码,无法执行造成死机。
回复 支持 反对

使用道具 举报

签到天数: 3 天

[LV.2]偶尔看看I

发表于 2024-4-6 18:35:35 | 显示全部楼层
疾风之狼 发表于 2024-4-6 18:060 X7 a% @+ z  T
你改错位置,011DE8地址指令没有执行到,程序是从011DE2跳到011DEA执行。
( D# U$ r9 r2 Y; `+ }0 r
3 V/ @$ r& d" U  i* y1 ^你011DE8改成4EF9 0008  ...

2 [( U; f' ~, C+ r6 V醍醐灌顶了!非常感谢!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-12 21:45 , Processed in 1.095703 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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