设为首页收藏本站

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

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

[复制链接]

签到天数: 1930 天

[LV.Master]伴坛终老

发表于 2013-11-12 22:01:29 | 显示全部楼层 |阅读模式
准备东西:68K指令集资料、REGEN DEBUG、十六进制编辑器
( N  R$ r1 _- s$ H; W
6 ?) j$ G4 l9 b8 oREGEN DEBUG官网下载页面:http://aamirm.hacking-cult.org/www/regen.html
( K/ _8 b. r" G+ z7 U; v7 K' T; o& p7 m( D% z4 a# k* q
以前写的MD HACK教程是用MD调试器,但这MD调试器在使用过程发现有点缺点,显示机械码只显示前2位,后面地址或数值却没有显示,有可能造成后来新手在修改ROM时寻找不到要修改的数据。5 S: q  c% z1 t+ O, H7 `
8 w9 g4 a/ {/ |  G# v7 c% B. \% l
本篇教程考虑改用REGEN 0.972 Debug版来调试跟踪,现在的REGEN DEBUG很强大,可以考虑放弃MD调试器。
) S8 V/ I& ?# M0 B- Q) ~& ^8 _- W' A6 B- \8 \
以《魂斗罗:铁血军团》日版为例,修改目标:体力值不减2 {4 y0 A1 O* X* \
, [) g* @) ^. [- i9 v8 ]2 t
1。先找到《魂斗罗:铁血军团》体力值存放地址,可通过REGEN自带的作弊码查找功能来找,我找到了,存放地址是0xFFFA0D。$ b0 s  _$ X, n; [
$ C8 {6 ?  E! z/ i% }9 y
2。选择人物进入游戏后,点击Tools->68000 Debugger进入68000调试器界面,图1:: B  P) Y; b, i; H- i

- }4 |; n( b4 A/ P+ G
* b/ e; `! k" n. m$ X& a# j左上角框是显示汇编指令,右边是寄存器显示3 n# z7 b9 h* V8 O

* F$ L5 _% G2 ^6 v3 u" F' [' rAddress Breakpoints是地址断点
6 w/ y9 q- ?6 k' X8 o" G7 @Address Range是对一定范围地址设置断点
+ U+ q' E) X5 H8 sRegister breakpoints是寄存器断点
) ^, ~# C* o) w  F1 k4 ]% ~VDP Breakpoint Range是对VDP一定范围地址设置断点/ S7 V- Q: @; y  ^. z3 j  @! @3 g) ]2 q& H
VRAM breakpoints是VRAM断点
# @$ c  ^; N; K  ~Go to address是转到指定的地址
( f) ~: \2 m# n* j: O) @show disassembly是对指定的地址反汇编
; t4 a' z3 t  ADebug step是进行单步或N步调试- p( C; ?% N, l, O
ROM MEMORY是ROM Viewer0 `/ _. F3 S. C' C* W) a
68000 MEMORY是RAM Viewer
3 P3 M) g- s8 P8 G! @9 KZ80 Debug是Z80调试器0 D. |$ l' W8 h
9 c" A$ d3 D7 \6 V/ U9 b
Read是读,Write是写,PC表示是PC地址,Trace是跟踪(选择该项会在模拟器目录下生成ASM文件)# s6 l: [/ N3 Y6 T& t
/ R6 [& Z; p6 x: Z7 g: C8 N5 Y
RESET是重启游戏,RESET68K是68K重启,RESETZ80是Z80重启& W; Q. t/ w; d- t

4 v  m1 ]" `  ^* n' K8 O2 @5 l3。在Address Breakpoints的Set Breakpoint右边框输入地址FFFA0D,Write选项加勾,再在Set Breakpoint左边框打勾,图2:9 U6 z* B1 _$ m( s) {8 r

5 Z* C0 Y9 l  ?3 r: U$ A: a2 _& k9 i2 q9 w) X8 z: E
4。点击OK返回游戏,当被敌人攻中时调试器发生中断,图3:
" [1 W- d" z1 I( {9 s: U* f! i7 K9 @  M2 `

5 w  c; s9 r; h: q1 {指令停在011DEE 1C2A000D move.b ($d,A2),D6这一行,前面指令却没有显示,用show disassembly把11DE0~11DFA这段地址反汇编看看,图4:
4 Y! C4 I* ~3 P5 j, V3 E- o4 e
) ?3 t0 W% C- j0 j; F& u
( ~" |: X* y4 F$ [- W% ~现在来分析一下:3 P; n) p/ A6 C! Z# e) A/ M
A2=FFFFFA00
+ z5 m* Y  A# ?+ a) o8 X/ b# cD1=000000019 u$ _/ Q( j; U& R
) {  _4 y' Q: x5 d& L
011DEA 932A000D sub.b D1,($d,A2)  把$FFFA0D(A2寄存器的数据($FFFFFA00)+$d=$FFFFFA0D)的地址单字节数据减去D1寄存器的数值,结果存入$FFFA0D
  Q1 H8 C& v0 u% K! i011DEE 1C2A000D move.b ($d,A2),D6 把$FFFA0D的单字节数据存入D6寄存器
6 D# Z( y* `5 Y# {
2 P, m* C: g0 }* p只要把11DEA指令NOP掉,就可以实现体力不减,NOP指令机械码是4E71
0 k& D$ g7 [. k  s
: Z% T6 d3 B- i$ ?) G8 Z5。点击ROM MEMORY进入ROM viewer界面,来到011DE0地址,在Set new value输入11DEA和4E714E71,再点击Set 1-10 bytes写入,再点击OK退出ROM viewer,图5、图6:8 f) q) M0 ?" Q
* N! C5 n4 n  U, e; m

0 _! d; C" l: k: E. g- c注意:在ROM viewer修改,修改结果是不会被写入ROM里,要修改ROM还得用16进制编辑器。
  n( ^+ a; C% s! J0 `! t- b* d/ `
' c7 f# m' ?" ^; m6。再对11DE0~11DFA这段地址反汇编看看,11DEA的指令被NOP掉,图7:- I1 ?8 i* P6 {" Z4 o

5 r  c2 f6 t( v. ~: Z' U6 p* I" \6 G/ ~! n* B
7。把Set Breakpoint和write的打勾去掉,再点OK回到游戏看看,体力是否不减了?体力不减说明修改成功。图8:! s2 c, }' z; u( d) u' U+ d" |
* ?2 B( b5 o- O9 Q8 A- j

2 ^. R# B7 r% j: R) d1 l8。打开WINHEX或UE,载入《魂斗罗:铁血军团》日版ROM,来到0x11DEA,把93 2A 00 0D修改为4E 71 4E 71,保存。图9、图10:0 v  ?: r% H( ~  h

* K/ j" z$ ]5 P& ?1 |5 R
  F. f& }* o) V! Y! C
疾风之狼: L2 P" l% D8 l. ^
2013/09/13

" R9 B# Z0 m( H
% A5 r4 o3 _' @  U/ A/ B* R9 V如看不清图片请点击图片放大,或至我博客:http://zero3c.blog.163.com/blog/static/278215082013813111414953/ 观看

本帖子中包含更多资源

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

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

签到天数: 632 天

[LV.9]以坛为家II

发表于 2013-11-12 22:09:04 | 显示全部楼层
本帖最后由 ABC3637 于 2013-11-12 22:10 编辑
+ J9 z5 _" ^* ~# J! k  a* U: z/ P! E) W
大力顶下~好贴前,坐沙发。
回复

使用道具 举报

签到天数: 2060 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 2554 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 107 天

[LV.6]常住居民II

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

使用道具 举报

签到天数: 2903 天

[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的问题,如有冒犯还请海涵!
2 G/ j; ^- d$ G4 D2 E# o0 U# q& R$ S; E: v8 ~$ j) r4 `
有幸拜读了您的教程:
  d" E. n9 S( f+ W- W. {' R) yhttp://2006.emu618.org:6180/thread-193604-1-1.html1 v6 o& s% S, \

* a3 U: R6 p; u, D0 a) u; m' c跟着您的教程做了一遍,收获很大。3 Q+ R( D5 c+ x. Z1 T" B# H4 |

) A5 t3 J* y3 \2 x2 f/ X! @. ]+ q0 h不过我由此想到了一个问题:; g: Z+ R) }. |" R& L/ v4 e% z9 n
例如《魂斗罗:铁血军团》体力值的例子1 B$ G1 R- }5 U( w" d7 I% T2 Y

- g0 h# r7 Q' `% V0 ~. d5 [4 j1 v. f011DE8  7A01  moveq #$1,D51 Z" d4 l1 D" C! O9 P- ~
011DEA  932A000D  sub.b  D1,($d,A2)
7 d; Q9 Y" L) Y/ @8 d& n011DEE  1C2A000D  move.b ($d,A2),D6
8 R' S) I  C; j( S7 m" Z; y' V. g& ]
实测,在将932A000D改成4E714E71的前提下,再将7A01也改成4E71,不会影响无敌效果。
- |+ b( R' c  l+ X- J: w( Y
4 {- I, _4 p6 i2 l( u那么我想,如果像下面这样,将011DE8和011DEA处的命令改成JMP,跳转到某个空白处,然后在空白处重新写上011DE8和011DEA处的命令,最后再跳转回011DEE,是不是就可以恢复正常的受伤功能:
. l+ f" m! b' n& Z0 M7 u9 l5 E
, a7 x- D: a0 @' g. w+ Z/ P011DE8  4EF9000801C0  jmp $0801C0.L' g4 ]( u( x- ~. o

' P( N! Z; y8 z& H% B$ c% L. E0801C0  7A01  moveq #$1,D5
4 N% W6 W3 B" g% ?+ l" [0801C2  932A000D  sub.b  D1,($d,A2)
  Z9 c( `0 h3 ?! I0801C6  4EF900011DEE  jmp $011DEE.L% s, }- m3 V# D8 x

8 Y& {9 U: D0 j011DEE  1C2A000D  move.b ($d,A2),D62 N6 P' b+ A" B# F# r$ K) m

2 |6 G9 h7 J/ K/ O  @' @: m, ~% m7 w然而修改后并未达到预期效果。相反,游戏在角色受伤后立即死机。3 j. e5 ~( N. g0 f' j) a

3 M7 Q4 v- [8 ^1 J7 N9 O/ i3 {4 P3 Z请问这是为什么?如果想实现这种操作的话,正确的方法是什么?5 ]/ b6 s8 g& ^1 {( [9 B0 U
: e. N: X' d, \2 D# n6 _3 [
之所以产生这个想法,是因为最近在汉化的一款游戏需要对字库进行扩容。汉化已经几乎完成了,然而游戏中的一些小字体区域还存在一些问题,如果不改会很难看。7 N: ^( I! R* l  a3 F
' n1 R1 P! }5 S" p( N9 Y4 g0 H
这些小字体由于只使用一个字节进行编码,游戏原本只能显示256个字符。我希望将编码方式改为00-EF为正常映射,F0-FF则切换VDP至相应页码。我认为这需要将原本的程序跳转至一空白处之后再进行自由发挥。
$ c8 r- T0 `8 F# I: v
5 F+ N3 J1 q. |3 S我并没有任何汇编或反汇编经验,所以打算先从最简单的进行尝试。想不到一上来就遇到了问题。
! H0 J. O; N- t! y/ N. F5 N! K9 i2 B) W3 E. }! e7 `
期待您的回复!
回复

使用道具 举报

签到天数: 1930 天

[LV.Master]伴坛终老

 楼主| 发表于 2024-4-6 01:40:38 | 显示全部楼层
SchreckgSoldat 发表于 2024-4-5 22:29) }# y/ y" ?, j
大佬您好,晚辈这边斗胆咨询您一个关于MD Hack的问题,如有冒犯还请海涵!
* _3 Q6 O. z9 ^9 O8 z' x3 ^  U0 I% m/ f3 O& I$ Y
有幸拜读了您的教程:
+ F1 r9 E: r: u4 P2 t! ~

( W1 Y. S' \6 }3 f# kROM名称:Contra - The Hardcore (J).bin$ @5 k" H3 }1 ~3 G

# z4 k2 {2 t6 S& Y
  1. 011DEA  932A000D  sub.b  D1,($d,A2)        ->4EF9 001FDD00 jmp $1fdd00.L; o  x. \7 Y/ r) V. l4 L% \
  2. 011DEE  1C2A000D  move.b ($d,A2),D6        ->4E71 nop1 I: z! r8 R/ Z/ A
  3. 011DF2  6A02          bpl $11df6
    $ x. u* d  \$ `. i5 {; S( D
  4. 7 M# ~: I: G# K) n
  5. 1FDD00:5 `6 x- i: s7 d/ ~7 m' Y
  6. 932A000D  sub.b  D1,($d,A2)
    % S; [( ^0 r) x6 L9 n0 c% x
  7. 1C2A000D  move.b ($d,A2),D6' w/ ^4 s2 W4 Q. q4 f9 s2 Y
  8. 4EF900011DF2 jmp $011df2.L. N; K% o; J. l* z  s4 _
复制代码
回复

使用道具 举报

签到天数: 3 天

[LV.2]偶尔看看I

发表于 2024-4-6 12:18:46 | 显示全部楼层
疾风之狼 发表于 2024-4-6 01:40# C: E! }. `. f7 r
ROM名称:Contra - The Hardcore (J).bin
+ ?) w( J5 w/ I! P. f( H" p9 Q. Q' J
感谢大佬!
5 r8 ]+ L8 a" `" q5 M
; u# J/ L* V5 d. u7 Q) T请问造成这种现象的原因是什么呢?为什么向后移动一个命令写入JMP就可以正常运行,而像我那样就不可以呢?
回复

使用道具 举报

签到天数: 1930 天

[LV.Master]伴坛终老

 楼主| 发表于 2024-4-6 18:06:29 | 显示全部楼层
SchreckgSoldat 发表于 2024-4-6 12:186 k/ v/ |4 Q# }/ w! o
感谢大佬!/ _/ V; ]3 U+ _; Q9 s
% O  G5 e+ T$ v+ u
请问造成这种现象的原因是什么呢?为什么向后移动一个命令写入JMP就可以正常运行,而像我 ...
  1. 011DE0 7A00        moveq #$0,D5- m& I$ j  G7 m* M
  2. 011DE2 6006        bra $11dea
    1 u- w1 a1 |7 j* I1 w
  3. 011DE4 45F8FA20        lea $fa20.w,A2  ?% b6 R1 v8 S7 j3 x1 e* M
  4. 011DE8 7A01        moveq #$1,D5
    1 e* d  N* h7 D2 F$ B0 L( E% f
  5. 011DEA 932A000D        sub.b D1,($d,A2)
    / ~" w9 t# Y- c% T6 a& d
  6. 011DEE 1C2A000D move.b ($d,A2),D6
    # h! H4 M5 g/ C: ~9 p  T
  7. 011DF2 6A02        bpl $11df6, X$ ~/ J9 x4 m  W
复制代码
. j1 }) ^# n7 @
1 y' K. N% S" j" s
你改错位置,011DE8地址指令没有执行到,程序是从011DE2跳到011DEA执行。' x; A1 }; o9 y( @) h% t4 P, ?

" g' @4 x; {+ n6 Z你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
4 {) z( f* ^3 q- Z0 |3 `你改错位置,011DE8地址指令没有执行到,程序是从011DE2跳到011DEA执行。9 E6 h, N, g3 y
: c; H* v- M, Y  x$ _5 ^" M
你011DE8改成4EF9 0008  ...

( X% }# R6 j8 g! W醍醐灌顶了!非常感谢!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-4-23 11:33

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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