EMU618社区

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

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

[复制链接]

签到天数: 2051 天

[LV.Master]伴坛终老

发表于 2013-11-12 22:01:29 | 显示全部楼层 |阅读模式
准备东西:68K指令集资料、REGEN DEBUG、十六进制编辑器' f) S% L& n7 i: h4 A8 m1 T
; T; \1 E! T' e$ A4 ]7 c
REGEN DEBUG官网下载页面:http://aamirm.hacking-cult.org/www/regen.html' O' h4 ^! s7 ^

$ m2 J$ G. K6 B9 m8 k以前写的MD HACK教程是用MD调试器,但这MD调试器在使用过程发现有点缺点,显示机械码只显示前2位,后面地址或数值却没有显示,有可能造成后来新手在修改ROM时寻找不到要修改的数据。
6 q+ i: J9 ?8 x8 Z" J* Y$ S* T. N# h8 q6 Z' c: R3 g
本篇教程考虑改用REGEN 0.972 Debug版来调试跟踪,现在的REGEN DEBUG很强大,可以考虑放弃MD调试器。
; a% G! K' c6 b6 ~, F/ v. K1 m* n! B0 |0 J- h. ?: |8 c! M& E
以《魂斗罗:铁血军团》日版为例,修改目标:体力值不减
- f/ q. m1 v" u; g7 M: X
# ?: X2 T  v' w6 W& y  S  a- B3 }1。先找到《魂斗罗:铁血军团》体力值存放地址,可通过REGEN自带的作弊码查找功能来找,我找到了,存放地址是0xFFFA0D。
. q. a% F# z4 @
8 ~0 j" o) v7 j$ Y# L2。选择人物进入游戏后,点击Tools->68000 Debugger进入68000调试器界面,图1:
  w, o0 t7 P1 p; x0 ~) @$ _$ k" F9 L& z7 q
" s: ~+ O+ V9 m' d. e0 H  Z! V; l7 ]
左上角框是显示汇编指令,右边是寄存器显示
  [9 w9 ~) {& r& Y4 r$ v# W$ \
: {1 F6 G% _# g3 q0 b  o; kAddress Breakpoints是地址断点
( i: ?3 f+ T& F% YAddress Range是对一定范围地址设置断点
; [9 t" f) A- f+ D6 w+ o1 h/ K! \% ?. fRegister breakpoints是寄存器断点7 c+ j( f9 ]' j9 m
VDP Breakpoint Range是对VDP一定范围地址设置断点& D" x2 z4 t7 H3 r6 G
VRAM breakpoints是VRAM断点
+ Q7 D" `) P0 J6 j& W; S) SGo to address是转到指定的地址
) v8 ^. P9 K2 t* nshow disassembly是对指定的地址反汇编# \, K4 ~1 ]: q# ~! |) \* d
Debug step是进行单步或N步调试* B1 e+ \- \% c0 a+ Z$ G; f
ROM MEMORY是ROM Viewer9 \  {- S9 f0 m% I  @4 Z' y1 H
68000 MEMORY是RAM Viewer
; B  _5 b8 j3 [0 H; L$ f. H: T" P! uZ80 Debug是Z80调试器! H$ T5 v# n/ i
: ?7 p, a- s& D7 c4 p3 B% A
Read是读,Write是写,PC表示是PC地址,Trace是跟踪(选择该项会在模拟器目录下生成ASM文件)
/ U6 I7 k+ n! `' @! r+ N7 _/ y$ F) Y+ |4 g) z
RESET是重启游戏,RESET68K是68K重启,RESETZ80是Z80重启
  v% v2 d1 T! J0 f& p$ T
) G- z. u1 c5 j$ N3。在Address Breakpoints的Set Breakpoint右边框输入地址FFFA0D,Write选项加勾,再在Set Breakpoint左边框打勾,图2:) n1 N/ \5 F2 p
9 Z) p7 _# ^% W; J( j$ z

1 Z0 Q- ]( y, C/ X2 t/ [$ {4。点击OK返回游戏,当被敌人攻中时调试器发生中断,图3:7 t6 N/ Z: h) g) M; M
2 W+ E; O. Q3 N- I9 [/ E

% {, T4 V" C' u, M指令停在011DEE 1C2A000D move.b ($d,A2),D6这一行,前面指令却没有显示,用show disassembly把11DE0~11DFA这段地址反汇编看看,图4:: P( ~5 O  O+ p; {
1 x' o) }0 J' P3 Q* `4 i

* w$ q5 M4 {- E# G现在来分析一下:
2 N+ J/ x& b: {5 b" a/ o$ e# K& RA2=FFFFFA00+ R8 y$ d+ s7 U- V/ Q; Q# W
D1=00000001! |% ]3 v  o' q1 p7 J6 a

' D0 n4 O% z9 g7 i, K011DEA 932A000D sub.b D1,($d,A2)  把$FFFA0D(A2寄存器的数据($FFFFFA00)+$d=$FFFFFA0D)的地址单字节数据减去D1寄存器的数值,结果存入$FFFA0D
9 e3 S7 s: G* G/ {011DEE 1C2A000D move.b ($d,A2),D6 把$FFFA0D的单字节数据存入D6寄存器
# p( ], W1 s  h4 B0 v% T8 w2 g9 k, m2 h" ^, D+ C6 O7 R
只要把11DEA指令NOP掉,就可以实现体力不减,NOP指令机械码是4E71
3 }! K! P8 g" \/ ~
  a6 Y! W0 F' Q/ c5。点击ROM MEMORY进入ROM viewer界面,来到011DE0地址,在Set new value输入11DEA和4E714E71,再点击Set 1-10 bytes写入,再点击OK退出ROM viewer,图5、图6:
; m6 n  k( b3 C' k5 U. j1 f* I0 F& C: D1 h) `' Y* a
; ^/ C/ {$ l* z+ A
注意:在ROM viewer修改,修改结果是不会被写入ROM里,要修改ROM还得用16进制编辑器。1 Q% U+ f5 e' V8 b
) M/ _( N. M; s$ {, M! ]
6。再对11DE0~11DFA这段地址反汇编看看,11DEA的指令被NOP掉,图7:
% k; `, j) ]( ]4 T2 ?' H
/ l) `$ @/ `1 v, d; l
) X. d2 ^3 F* i( h7。把Set Breakpoint和write的打勾去掉,再点OK回到游戏看看,体力是否不减了?体力不减说明修改成功。图8:3 j+ Y1 `# F  i, I

2 G3 W) v6 ^4 t6 @  e3 f+ U/ Z
& f! u  e8 z: o; E8。打开WINHEX或UE,载入《魂斗罗:铁血军团》日版ROM,来到0x11DEA,把93 2A 00 0D修改为4E 71 4E 71,保存。图9、图10:& s# z0 F1 V( M- m+ G

( I2 ]0 i' a3 i0 W
2 ?; r3 e6 n5 E3 S# A
疾风之狼
/ q" e1 F6 U% i! ]3 {# S2013/09/13

8 N2 B0 u3 {" R7 E: K# x1 C
; `! j: A! c9 M如看不清图片请点击图片放大,或至我博客: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 编辑
; O( f- n; [* J/ T, c+ W
  n/ W5 S# V' U% m4 X& R/ r大力顶下~好贴前,坐沙发。

签到天数: 2060 天

[LV.Master]伴坛终老

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

签到天数: 2569 天

[LV.Master]伴坛终老

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

签到天数: 107 天

[LV.6]常住居民II

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

签到天数: 3022 天

[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的问题,如有冒犯还请海涵!0 A$ {5 ~# a" s: K' G( g+ M+ S

9 X2 c7 ]$ o+ [) c有幸拜读了您的教程:
/ [1 B- [& u( K1 V: A& V0 t# h) xhttp://2006.emu618.org:6180/thread-193604-1-1.html3 G1 _4 |4 T9 K% S& y' O, l6 E
- ^2 ~1 T+ p9 `0 l) |: Q4 R: r
跟着您的教程做了一遍,收获很大。
- v  `- H3 t, u7 q  j& t! C+ i1 t% c% L  q; J
不过我由此想到了一个问题:
4 n9 i6 X! i4 H7 v例如《魂斗罗:铁血军团》体力值的例子
6 f  }7 c" M) J0 u3 u
. r, X3 @& k9 w5 ?# E5 c011DE8  7A01  moveq #$1,D5
* @6 h2 x/ G# _' S. p1 ~011DEA  932A000D  sub.b  D1,($d,A2)4 G9 C7 V1 R$ I! l1 B% ~! b
011DEE  1C2A000D  move.b ($d,A2),D6
- w1 T0 V1 P# g5 `! `; s, @
8 r7 i6 l# d; l& P5 o实测,在将932A000D改成4E714E71的前提下,再将7A01也改成4E71,不会影响无敌效果。
; n$ o7 m1 g) l" I  A8 y9 X  x2 I1 s' _) M* i/ S$ W
那么我想,如果像下面这样,将011DE8和011DEA处的命令改成JMP,跳转到某个空白处,然后在空白处重新写上011DE8和011DEA处的命令,最后再跳转回011DEE,是不是就可以恢复正常的受伤功能:
+ h- ]- v; e# `- g8 C% o
8 V7 Q+ N! w# j0 z$ r011DE8  4EF9000801C0  jmp $0801C0.L
# T8 K; X' H: a& a! J5 b( ~4 H, h, z" u- N( S
0801C0  7A01  moveq #$1,D50 I% {( D# V5 D( H$ q) @9 W
0801C2  932A000D  sub.b  D1,($d,A2). ]5 K( C2 `* l' |3 X
0801C6  4EF900011DEE  jmp $011DEE.L# ^  y+ S; g, i5 k2 _9 |
6 Y# N: x+ z1 c" G, T
011DEE  1C2A000D  move.b ($d,A2),D6
% }2 h, |, [  @3 P0 {. C
* a, m2 q" d3 [1 x! C( v5 d8 q3 z然而修改后并未达到预期效果。相反,游戏在角色受伤后立即死机。/ P2 y  A) u. F2 k1 O7 t4 i/ j

3 z2 L, j) j0 Q7 o请问这是为什么?如果想实现这种操作的话,正确的方法是什么?
4 N1 P. N) q4 i8 }- s+ L( V1 D
3 R; Z- b; X8 V# C  g* v. |/ w; p2 q之所以产生这个想法,是因为最近在汉化的一款游戏需要对字库进行扩容。汉化已经几乎完成了,然而游戏中的一些小字体区域还存在一些问题,如果不改会很难看。
; T: f) w' m1 ?  \# B) [6 C
& l+ `# ~; s. a" `! s2 S这些小字体由于只使用一个字节进行编码,游戏原本只能显示256个字符。我希望将编码方式改为00-EF为正常映射,F0-FF则切换VDP至相应页码。我认为这需要将原本的程序跳转至一空白处之后再进行自由发挥。0 A" e; i3 j1 a# w3 r$ ]) m5 n

7 L2 M* Y: W6 `6 ^我并没有任何汇编或反汇编经验,所以打算先从最简单的进行尝试。想不到一上来就遇到了问题。0 U5 r: a8 ]& h- U% Y* z! r$ E$ y+ f

5 O" O8 `" {. G" X( N8 o9 \6 p期待您的回复!
回复 支持 反对

使用道具 举报

签到天数: 2051 天

[LV.Master]伴坛终老

 楼主| 发表于 2024-4-6 01:40:38 | 显示全部楼层
SchreckgSoldat 发表于 2024-4-5 22:29
; E" |( ~: ]$ q6 M大佬您好,晚辈这边斗胆咨询您一个关于MD Hack的问题,如有冒犯还请海涵!, e: [# _; U8 z( }
/ t5 e& p: R- U! V: d% S4 ]
有幸拜读了您的教程:

* Z! q5 O3 N5 W0 e- S7 @" K* @9 N' z! T* o* x4 ~% Q
ROM名称:Contra - The Hardcore (J).bin
- \; l  |: n' ]- m
4 f0 J: A3 ~& _" A& ?
  1. 011DEA  932A000D  sub.b  D1,($d,A2)        ->4EF9 001FDD00 jmp $1fdd00.L
    ! L' K6 c# t+ u- h' Q3 {! K
  2. 011DEE  1C2A000D  move.b ($d,A2),D6        ->4E71 nop( j: H3 |+ f; X5 Q4 B
  3. 011DF2  6A02          bpl $11df6
    7 ^, W2 G( q8 S' g
  4. 3 d. D- k1 ^# q; h# x" D6 z9 G
  5. 1FDD00:
    $ o" S3 n$ w* j, _& B, E# E
  6. 932A000D  sub.b  D1,($d,A2)  t; `9 u; F6 Y6 H2 e/ F
  7. 1C2A000D  move.b ($d,A2),D6
    # p" r2 |0 r2 S% o: X2 l! M6 z4 g
  8. 4EF900011DF2 jmp $011df2.L
    ! j7 S2 a$ i$ d. K. Y2 l. u% r
复制代码
回复 支持 反对

使用道具 举报

签到天数: 3 天

[LV.2]偶尔看看I

发表于 2024-4-6 12:18:46 | 显示全部楼层
疾风之狼 发表于 2024-4-6 01:40
- m% q  J2 Q/ dROM名称:Contra - The Hardcore (J).bin

1 r6 k6 f* W' x, h感谢大佬!
+ p+ A/ b+ h4 x+ z  R! ?) b5 r
- n. _3 M) l; w* D请问造成这种现象的原因是什么呢?为什么向后移动一个命令写入JMP就可以正常运行,而像我那样就不可以呢?
回复 支持 反对

使用道具 举报

签到天数: 2051 天

[LV.Master]伴坛终老

 楼主| 发表于 2024-4-6 18:06:29 | 显示全部楼层
SchreckgSoldat 发表于 2024-4-6 12:180 P8 |( H) |; f& _1 G: t
感谢大佬!
0 i! d' L- N. X. B3 n& _
7 K7 [8 N% J6 A/ M# t7 D7 q1 w& F1 J请问造成这种现象的原因是什么呢?为什么向后移动一个命令写入JMP就可以正常运行,而像我 ...
  1. 011DE0 7A00        moveq #$0,D5
    + D. ~7 H2 J: G% j% f9 r# s
  2. 011DE2 6006        bra $11dea1 R$ B1 w$ T: G; i
  3. 011DE4 45F8FA20        lea $fa20.w,A2; e" J, ^" `+ w4 V5 s' r# C% O
  4. 011DE8 7A01        moveq #$1,D5
    8 s  [. O$ t2 H( x2 J1 o( r
  5. 011DEA 932A000D        sub.b D1,($d,A2)
    : c% ]7 ~) {0 s$ m) O
  6. 011DEE 1C2A000D move.b ($d,A2),D6
    5 N! A  l) L' i
  7. 011DF2 6A02        bpl $11df6
    : l7 }) t  |' k- \6 Z
复制代码
! ~- b# d( T- A/ R% f# J
  Q: }* S. N- c5 t7 J: i
你改错位置,011DE8地址指令没有执行到,程序是从011DE2跳到011DEA执行。
$ x# k9 f( I: R- {: |, ~/ D1 T( N
你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
" q+ X, ]  n% F: O% z* Q8 k7 m你改错位置,011DE8地址指令没有执行到,程序是从011DE2跳到011DEA执行。
# l2 @  n7 c; @# Y) Z
4 W* I! V8 f: B- c你011DE8改成4EF9 0008  ...
, O+ W7 u* I2 n6 o9 I- {; c
醍醐灌顶了!非常感谢!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-26 07:53 , Processed in 1.104493 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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