EMU618社区

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

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

[复制链接]

签到天数: 1968 天

[LV.Master]伴坛终老

发表于 2013-11-12 22:01:29 | 显示全部楼层 |阅读模式
准备东西:68K指令集资料、REGEN DEBUG、十六进制编辑器" m* H. a) ]* @" Y$ \. V, E# e
3 _( H" f. [# n( k3 a: S& _$ \6 I6 T
REGEN DEBUG官网下载页面:http://aamirm.hacking-cult.org/www/regen.html
+ a0 F: }3 R3 @: J7 P) B
& C4 T$ g! }, |9 ^2 W6 h/ V& N以前写的MD HACK教程是用MD调试器,但这MD调试器在使用过程发现有点缺点,显示机械码只显示前2位,后面地址或数值却没有显示,有可能造成后来新手在修改ROM时寻找不到要修改的数据。6 P& R, Q& g# E% k

' u7 E6 q+ S, X1 l* ^, [( U3 P! H本篇教程考虑改用REGEN 0.972 Debug版来调试跟踪,现在的REGEN DEBUG很强大,可以考虑放弃MD调试器。
5 D6 w! W! r. l
6 d) p# X  A% s1 N  F以《魂斗罗:铁血军团》日版为例,修改目标:体力值不减- e* P& K, m1 p$ D2 p" G" H
' j% w# F; E; ]( w! l% ?
1。先找到《魂斗罗:铁血军团》体力值存放地址,可通过REGEN自带的作弊码查找功能来找,我找到了,存放地址是0xFFFA0D。
2 _" n' D3 v% K2 m# ^) @3 {+ R8 S7 q- |  n
2。选择人物进入游戏后,点击Tools->68000 Debugger进入68000调试器界面,图1:, \, ]& u2 w* s5 d

2 c, p1 D5 @( h" S, C% i
, X( }" Z2 t1 ?" X左上角框是显示汇编指令,右边是寄存器显示
2 \: e/ c' V2 ]9 f. b* ?6 i; X: X) G; ?2 u  q0 R+ f" ?
Address Breakpoints是地址断点: _  i, }! x' u% \2 x  Z& g
Address Range是对一定范围地址设置断点& I; ~! R" D7 p: e' k7 H
Register breakpoints是寄存器断点& X6 c; u7 `4 \' M6 n
VDP Breakpoint Range是对VDP一定范围地址设置断点8 c. S9 P8 w! n
VRAM breakpoints是VRAM断点
9 _% T# \5 D) [2 l6 S! n7 e' VGo to address是转到指定的地址
0 r" W+ V2 c; X1 `# f$ z" eshow disassembly是对指定的地址反汇编
+ A, k+ u* f1 W0 A- KDebug step是进行单步或N步调试
/ h5 n+ |7 o7 n/ c# u- dROM MEMORY是ROM Viewer
9 F: D& b" X; v! M9 m2 S2 H7 Z0 @68000 MEMORY是RAM Viewer1 `0 v- k8 ]' ]# Y
Z80 Debug是Z80调试器
; r; t( Q: i/ X$ D; [- ^+ a! a
8 u6 t: J7 G  r# RRead是读,Write是写,PC表示是PC地址,Trace是跟踪(选择该项会在模拟器目录下生成ASM文件)2 ?4 ?& }5 Y# U" w) u5 m
1 U5 d* g1 D3 M" G+ D0 F) K# }: ?
RESET是重启游戏,RESET68K是68K重启,RESETZ80是Z80重启" t6 U% n0 A8 t$ D0 o( x2 m# |1 |

4 [7 \/ `0 O$ N, M3。在Address Breakpoints的Set Breakpoint右边框输入地址FFFA0D,Write选项加勾,再在Set Breakpoint左边框打勾,图2:
( C9 ~: X4 R- d+ n8 x7 A
( G( c; H' D2 K0 V( q. `3 B9 q0 R) z& {. `3 v5 a
4。点击OK返回游戏,当被敌人攻中时调试器发生中断,图3:$ v( I1 m; h+ x& H' S* [
- _* d$ X8 M$ W, Z' M

, s6 Y- B! o  a4 N6 \& C指令停在011DEE 1C2A000D move.b ($d,A2),D6这一行,前面指令却没有显示,用show disassembly把11DE0~11DFA这段地址反汇编看看,图4:
" D) W( o& Z9 Y/ t, Q
4 P8 ]- L- ]" j8 `4 M9 \
9 A1 _, {" B3 S7 g现在来分析一下:
. R! _+ G; E( I% C5 q- y3 H) HA2=FFFFFA00
. Y) e- J6 S! rD1=00000001
7 A& F8 B4 _$ g) w  J9 g9 q* Y
" B& p  F4 w; i( g( C011DEA 932A000D sub.b D1,($d,A2)  把$FFFA0D(A2寄存器的数据($FFFFFA00)+$d=$FFFFFA0D)的地址单字节数据减去D1寄存器的数值,结果存入$FFFA0D
! |4 j$ y( x0 o# |) Q, u011DEE 1C2A000D move.b ($d,A2),D6 把$FFFA0D的单字节数据存入D6寄存器
3 I" N0 F; {# v* U' ~8 Y' C, r. g/ {; T; ^
只要把11DEA指令NOP掉,就可以实现体力不减,NOP指令机械码是4E71
+ z; E% P; r! a2 n3 Z: n" Y' B
5。点击ROM MEMORY进入ROM viewer界面,来到011DE0地址,在Set new value输入11DEA和4E714E71,再点击Set 1-10 bytes写入,再点击OK退出ROM viewer,图5、图6:
' a8 r0 C6 y% v' |: l% `3 k8 t3 S: B9 `& `/ c
. {6 u3 B7 ^: x9 r5 x5 |
注意:在ROM viewer修改,修改结果是不会被写入ROM里,要修改ROM还得用16进制编辑器。
1 L5 I- t! g3 D. ~5 c5 `
& I6 F- i: p- _0 q  @6。再对11DE0~11DFA这段地址反汇编看看,11DEA的指令被NOP掉,图7:8 m$ X  A( B& L: `) D( k

1 f7 m0 s) _) K9 l5 x  ]+ [0 W& L
4 @: H% `  Z5 d0 P. Q7。把Set Breakpoint和write的打勾去掉,再点OK回到游戏看看,体力是否不减了?体力不减说明修改成功。图8:4 X( p; m2 j! f) ]2 l1 g. i

; p, {8 I) a1 J0 n4 b" H: J
, n, Q5 ^0 d) _( y1 P- e8 ?( \; X8。打开WINHEX或UE,载入《魂斗罗:铁血军团》日版ROM,来到0x11DEA,把93 2A 00 0D修改为4E 71 4E 71,保存。图9、图10:" d2 q; q1 `$ k/ e$ J3 L6 s- G
) P* R8 L9 ^% E/ I$ B% r

9 a& ~/ e* j1 N3 J& V( a6 |; F; j
疾风之狼& y% K" n' l, t, w+ u/ l  n2 N
2013/09/13
" M; x4 n* R1 D6 Q% Y2 G

9 K: Q* X# I* e" L" a0 [3 `如看不清图片请点击图片放大,或至我博客: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 编辑
, w4 S! H. j* [/ U' O+ o3 g& f5 S) A8 T! W; v+ u
大力顶下~好贴前,坐沙发。

签到天数: 2060 天

[LV.Master]伴坛终老

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

签到天数: 2558 天

[LV.Master]伴坛终老

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

签到天数: 107 天

[LV.6]常住居民II

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

签到天数: 2941 天

[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的问题,如有冒犯还请海涵!; g2 e- C% \0 l. x2 l; _, d

& d* Z1 A1 F! i5 T  r( g+ h有幸拜读了您的教程:' j9 @! v4 e$ k1 f3 e7 f
http://2006.emu618.org:6180/thread-193604-1-1.html
3 T' ], j4 N6 O3 e; |( T, Q  L4 S' ^2 _1 z/ M. a
跟着您的教程做了一遍,收获很大。
9 E* S. `: N) a$ \* b, p3 J/ A  b7 c' P% Z& N6 j
不过我由此想到了一个问题:& b& d6 o1 ?' i, W
例如《魂斗罗:铁血军团》体力值的例子
' e! \8 a8 ^6 o% X# L. Q$ Z
5 ^9 z. f: D. N011DE8  7A01  moveq #$1,D53 l0 I. |# g: j5 v! p' k, N
011DEA  932A000D  sub.b  D1,($d,A2): @" |+ Q* r. `8 r; ?5 ~5 I
011DEE  1C2A000D  move.b ($d,A2),D64 `# A7 ^) w$ @; b) Z' ]
: B4 B7 t  N; {+ k  g) v
实测,在将932A000D改成4E714E71的前提下,再将7A01也改成4E71,不会影响无敌效果。
8 ?0 |% K- G8 K4 R# o3 C* }( H$ k* D/ \+ i
那么我想,如果像下面这样,将011DE8和011DEA处的命令改成JMP,跳转到某个空白处,然后在空白处重新写上011DE8和011DEA处的命令,最后再跳转回011DEE,是不是就可以恢复正常的受伤功能:5 S& u0 _! ~) B+ U

/ @8 ?# w3 H- W, [, q6 {, ]. i011DE8  4EF9000801C0  jmp $0801C0.L  Y, `* c2 F; Q! }, |+ P: |% ~5 J8 I
  o1 e' p3 [  @2 G2 H
0801C0  7A01  moveq #$1,D5
+ o; Q( ^0 T  p6 @  f) _0801C2  932A000D  sub.b  D1,($d,A2)
2 r) L2 o& @: g( y! T* \0801C6  4EF900011DEE  jmp $011DEE.L
, {  l, b+ }* P
& h8 x0 l7 l" Q* E' `011DEE  1C2A000D  move.b ($d,A2),D6
  J2 J7 v. u. d! }5 _- _
5 k; V. E& y/ {. A9 X. m9 J" Z0 |) h然而修改后并未达到预期效果。相反,游戏在角色受伤后立即死机。2 e4 B6 K9 `- l$ T( s& R6 G

2 I4 U# H8 U5 w  u1 ?请问这是为什么?如果想实现这种操作的话,正确的方法是什么?
  B* C' J. v- ^
1 t+ x. }5 ?' _" z# S3 g! H6 W之所以产生这个想法,是因为最近在汉化的一款游戏需要对字库进行扩容。汉化已经几乎完成了,然而游戏中的一些小字体区域还存在一些问题,如果不改会很难看。2 t- \: {* G. u3 D
3 A, F) v0 h/ K
这些小字体由于只使用一个字节进行编码,游戏原本只能显示256个字符。我希望将编码方式改为00-EF为正常映射,F0-FF则切换VDP至相应页码。我认为这需要将原本的程序跳转至一空白处之后再进行自由发挥。
& n, m% Y) z+ @, X
9 R' R0 j* b, j6 r( O我并没有任何汇编或反汇编经验,所以打算先从最简单的进行尝试。想不到一上来就遇到了问题。
+ {$ F. f. m  E
( l. d2 Z% M5 ^( u4 K- X, E2 f期待您的回复!
回复 支持 反对

使用道具 举报

签到天数: 1968 天

[LV.Master]伴坛终老

 楼主| 发表于 2024-4-6 01:40:38 | 显示全部楼层
SchreckgSoldat 发表于 2024-4-5 22:292 \6 D( T( H, G/ h
大佬您好,晚辈这边斗胆咨询您一个关于MD Hack的问题,如有冒犯还请海涵!! p3 ?) L, P- ]8 s9 ~7 m) ~1 s. x

. w3 c: c$ l0 i" ^有幸拜读了您的教程:
1 d5 g* J+ q6 V/ H$ o% Y7 j' E

' P+ G7 F+ G; D# }! Y% KROM名称:Contra - The Hardcore (J).bin. u$ }8 v; L# n& k( H, G# e, H1 `
) K4 j0 l4 P  X9 _
  1. 011DEA  932A000D  sub.b  D1,($d,A2)        ->4EF9 001FDD00 jmp $1fdd00.L
    7 _" q+ @, a' D0 a2 H4 Z6 ]
  2. 011DEE  1C2A000D  move.b ($d,A2),D6        ->4E71 nop1 ^" m! }% G( A6 L
  3. 011DF2  6A02          bpl $11df6
    ' U9 ?- x1 ?$ [; l: f7 ?) Z
  4. 3 m1 t$ E/ O: n0 e# c  Y  p
  5. 1FDD00:
    . E, d0 B: J, F- `% ~
  6. 932A000D  sub.b  D1,($d,A2)& i( ]+ w5 B, Q4 {: k+ }) E
  7. 1C2A000D  move.b ($d,A2),D6, |- ]1 z) s( U8 J8 w' N* A
  8. 4EF900011DF2 jmp $011df2.L
    * s4 z5 l0 B6 b7 E) ~" C
复制代码
回复 支持 反对

使用道具 举报

签到天数: 3 天

[LV.2]偶尔看看I

发表于 2024-4-6 12:18:46 | 显示全部楼层
疾风之狼 发表于 2024-4-6 01:40
7 y8 x8 E) |. p5 p/ B% D  ?& W& r* KROM名称:Contra - The Hardcore (J).bin

9 g$ B8 z5 Y& Q/ x感谢大佬!/ @+ ]5 T  Z2 a0 B8 s9 C
, D! V8 F/ }' P( ?0 T) ~7 ?
请问造成这种现象的原因是什么呢?为什么向后移动一个命令写入JMP就可以正常运行,而像我那样就不可以呢?
回复 支持 反对

使用道具 举报

签到天数: 1968 天

[LV.Master]伴坛终老

 楼主| 发表于 2024-4-6 18:06:29 | 显示全部楼层
SchreckgSoldat 发表于 2024-4-6 12:18
2 N$ \$ W* T2 T; F* w! i% z6 b感谢大佬!! _! ^% c7 y8 e3 V1 S% X- r
7 G5 C2 Q) l( b# B
请问造成这种现象的原因是什么呢?为什么向后移动一个命令写入JMP就可以正常运行,而像我 ...
  1. 011DE0 7A00        moveq #$0,D5* U. x- r  K/ C( s3 `4 ^7 W
  2. 011DE2 6006        bra $11dea
    8 S$ w; r6 U( y
  3. 011DE4 45F8FA20        lea $fa20.w,A2& C) M8 t! B0 [/ l& D9 g
  4. 011DE8 7A01        moveq #$1,D5
    ( J' o; n) m4 J6 \  Q# `6 J$ i
  5. 011DEA 932A000D        sub.b D1,($d,A2)* c0 P. A! F0 u7 m8 Z2 h
  6. 011DEE 1C2A000D move.b ($d,A2),D6
    . K& G0 R/ C1 u3 f
  7. 011DF2 6A02        bpl $11df6
      A. m# o: f" A. B. e$ f
复制代码

0 v. G3 y! M% h& L, Q0 S% R5 A7 g2 W& h, J  S* \% E; l
你改错位置,011DE8地址指令没有执行到,程序是从011DE2跳到011DEA执行。
( Q5 [3 V0 u: `' V0 ]
6 G! m8 `5 V9 I" v你011DE8改成4EF9 0008 01C0的话,造成后果从011DE2跳到011DEA执行,那么011DEA指令机械码是0008 01C0,CPU识别不了错误的机械码,无法执行造成死机。
回复 支持 反对

使用道具 举报

签到天数: 3 天

[LV.2]偶尔看看I

发表于 2024-4-6 18:35:35 | 显示全部楼层
疾风之狼 发表于 2024-4-6 18:06( W' T8 A4 l2 _% W3 ^1 e
你改错位置,011DE8地址指令没有执行到,程序是从011DE2跳到011DEA执行。$ e! a, c- v  a- o2 X
# g% [9 i, b7 P
你011DE8改成4EF9 0008  ...
4 Q! `9 P4 G& k7 w1 W
醍醐灌顶了!非常感谢!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-3 22:51 , Processed in 1.125977 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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