EMU618社区

 找回密码
 立即注册
帖子
查看: 2303|回复: 17

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

[复制链接]

签到天数: 1986 天

[LV.Master]伴坛终老

发表于 2013-11-12 22:01:29 | 显示全部楼层 |阅读模式
准备东西:68K指令集资料、REGEN DEBUG、十六进制编辑器
/ {8 K# d) ^' {& A/ Q7 m. H3 z
0 j5 K3 W6 N% R5 ]REGEN DEBUG官网下载页面:http://aamirm.hacking-cult.org/www/regen.html
- u$ @! X* n, g* t: P4 E  \
. h' O; C0 T1 \; G+ k2 Y' ?1 T以前写的MD HACK教程是用MD调试器,但这MD调试器在使用过程发现有点缺点,显示机械码只显示前2位,后面地址或数值却没有显示,有可能造成后来新手在修改ROM时寻找不到要修改的数据。
, U. d# q7 U7 b. i  L2 |
5 W) e1 V+ i6 x' j" c. a本篇教程考虑改用REGEN 0.972 Debug版来调试跟踪,现在的REGEN DEBUG很强大,可以考虑放弃MD调试器。
! o. `4 j$ o0 Q5 E: j7 k4 }3 G) w, N( x3 g" R6 V6 l
以《魂斗罗:铁血军团》日版为例,修改目标:体力值不减
5 I: {& L" a2 y0 g0 c8 C# C- g
  o3 q/ J" O* w$ X' J1。先找到《魂斗罗:铁血军团》体力值存放地址,可通过REGEN自带的作弊码查找功能来找,我找到了,存放地址是0xFFFA0D。4 ~; |. y5 [2 K$ W( U
/ `. ], c  n- v$ L& Z
2。选择人物进入游戏后,点击Tools->68000 Debugger进入68000调试器界面,图1:8 z* z) N, N' N/ m& [0 K$ \8 _
* {" Y- ^( Q7 K6 F

7 E, L) [% C) F7 \6 g0 e' Y左上角框是显示汇编指令,右边是寄存器显示
! ]+ O+ m& y* o' o" M9 Z! K' C6 X3 X  i4 A
Address Breakpoints是地址断点4 q5 I  d$ ^4 \3 u4 c
Address Range是对一定范围地址设置断点( B7 A3 a1 G+ r. n- R# k3 g8 Q  P
Register breakpoints是寄存器断点
0 k1 S; b5 v! i  M+ _) ^3 f  jVDP Breakpoint Range是对VDP一定范围地址设置断点7 A: f  T; p+ p9 v+ M! D% V
VRAM breakpoints是VRAM断点$ t9 A9 O" j! j/ N3 T
Go to address是转到指定的地址
3 Z8 V! G' z2 `$ h6 w6 i2 \( bshow disassembly是对指定的地址反汇编0 }  x$ ~0 `  ^
Debug step是进行单步或N步调试
% |  l4 i& E* e) U; |ROM MEMORY是ROM Viewer" Y  \) U# F8 c# R
68000 MEMORY是RAM Viewer
2 {& c% m1 m+ v; x- O8 A" [; B7 x( JZ80 Debug是Z80调试器6 B5 d$ p0 j) e2 ]! H8 O
4 ^: U' q! U* g/ A; S: I+ a
Read是读,Write是写,PC表示是PC地址,Trace是跟踪(选择该项会在模拟器目录下生成ASM文件)/ c1 L* i; ~. }# H; E3 [! k% T

, ^8 ?; K: {6 C+ ^' V' lRESET是重启游戏,RESET68K是68K重启,RESETZ80是Z80重启
2 d: ^9 I# G2 E# K3 m
+ ?1 I8 O( J# v/ U0 D/ H3。在Address Breakpoints的Set Breakpoint右边框输入地址FFFA0D,Write选项加勾,再在Set Breakpoint左边框打勾,图2:
8 Y! J; P; V6 }
4 \, Y( q) C: v, G! Q+ K. d. s. m; Y& w
4。点击OK返回游戏,当被敌人攻中时调试器发生中断,图3:6 J- ^: y! C" t
0 x( t. ^7 X& D# W% b' e3 M
' ]8 @6 O/ A8 i/ ]* t
指令停在011DEE 1C2A000D move.b ($d,A2),D6这一行,前面指令却没有显示,用show disassembly把11DE0~11DFA这段地址反汇编看看,图4:9 {1 s: r( d) ^1 q$ f7 e, m

1 B; w7 z0 a2 F2 j7 s* J& ]' [# u6 U+ M
现在来分析一下:
; V- X7 |) H/ KA2=FFFFFA005 {" ?' V2 N. z- E
D1=00000001
6 T6 Z# i. {: I1 o
6 }8 R- _: @* q6 _011DEA 932A000D sub.b D1,($d,A2)  把$FFFA0D(A2寄存器的数据($FFFFFA00)+$d=$FFFFFA0D)的地址单字节数据减去D1寄存器的数值,结果存入$FFFA0D9 D5 C; b* |# @) M% O1 {6 H
011DEE 1C2A000D move.b ($d,A2),D6 把$FFFA0D的单字节数据存入D6寄存器) C% u' o4 h3 ?! j, B4 _

: @6 k) q6 Q& \只要把11DEA指令NOP掉,就可以实现体力不减,NOP指令机械码是4E71  Q; o" o$ Y" _9 j2 u% d, g
5 e" c; a! x. k- s) t( t
5。点击ROM MEMORY进入ROM viewer界面,来到011DE0地址,在Set new value输入11DEA和4E714E71,再点击Set 1-10 bytes写入,再点击OK退出ROM viewer,图5、图6:$ t. n4 N9 j' d( M

2 g5 r, |; R* ^6 |1 _7 Y3 g
& C. ]' l$ c- m' r4 S注意:在ROM viewer修改,修改结果是不会被写入ROM里,要修改ROM还得用16进制编辑器。
0 Y9 F  d. L- }) x" Y9 }5 `; L4 H9 K' j( H8 N* H, ]
6。再对11DE0~11DFA这段地址反汇编看看,11DEA的指令被NOP掉,图7:( ^6 L4 s( q" g" ]! R% w! F- Z

: p0 J1 E4 K- W: B: _; q1 c" ~/ Q5 W
1 |, ^& ]) H) c0 O; I4 C7。把Set Breakpoint和write的打勾去掉,再点OK回到游戏看看,体力是否不减了?体力不减说明修改成功。图8:
% M+ I3 f% o6 C/ Q5 k4 B7 A+ z6 m7 x% f8 O
9 S; H. M5 z2 G
8。打开WINHEX或UE,载入《魂斗罗:铁血军团》日版ROM,来到0x11DEA,把93 2A 00 0D修改为4E 71 4E 71,保存。图9、图10:
1 t; [+ ~6 z  N" O
9 e% P. J8 k8 u9 A- D+ G4 ]$ K; R% `4 z* w) n
疾风之狼- w! s1 L# C5 l4 H
2013/09/13
+ m* s8 O. ?$ ~

/ q5 Y/ L: l9 \如看不清图片请点击图片放大,或至我博客: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 编辑 6 J! Q+ N9 a7 g8 L" x

3 g7 a: |3 ], `6 S3 y大力顶下~好贴前,坐沙发。

签到天数: 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 个 柠檬. 幸运榜 / 衰神榜

签到天数: 2959 天

[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的问题,如有冒犯还请海涵!( s! X6 f& u9 f4 @/ d  g
1 M4 K4 f! g3 N8 V+ _9 Y
有幸拜读了您的教程:
8 o1 ^# p; {& x* u: N8 c! m/ I* ohttp://2006.emu618.org:6180/thread-193604-1-1.html
& g( V2 Z9 h/ d* H( t, T: H; s5 f  ~: X2 N$ f/ s! V1 t
跟着您的教程做了一遍,收获很大。* L& r( j5 r5 E6 \6 C

7 k) b0 g5 J8 n' Y+ n% W不过我由此想到了一个问题:
- j; d+ ]# x# D$ z. N% S例如《魂斗罗:铁血军团》体力值的例子. V/ \$ m6 @5 k5 @: [

1 U5 d' }+ q% s5 E* c6 F011DE8  7A01  moveq #$1,D5
; n8 O7 Z  Z: F& F/ E/ f0 Y011DEA  932A000D  sub.b  D1,($d,A2). t" t  j$ r( [3 |
011DEE  1C2A000D  move.b ($d,A2),D6
8 D) m$ ~0 y/ c/ g- s5 d: W/ j/ U6 [* U7 T1 ~
实测,在将932A000D改成4E714E71的前提下,再将7A01也改成4E71,不会影响无敌效果。
+ [0 ~7 z* V- ?8 c
. ^0 r6 M# d- h那么我想,如果像下面这样,将011DE8和011DEA处的命令改成JMP,跳转到某个空白处,然后在空白处重新写上011DE8和011DEA处的命令,最后再跳转回011DEE,是不是就可以恢复正常的受伤功能:! a* U+ Q) ~% o: ]9 d

' I* P3 T# @/ ?0 e& G! j0 J011DE8  4EF9000801C0  jmp $0801C0.L
7 ~' u) U/ r+ E$ t( e
0 r: c/ o# ~4 P! Z0801C0  7A01  moveq #$1,D5
0 C/ I9 l2 E8 Y6 m; [' J( u( e2 C0801C2  932A000D  sub.b  D1,($d,A2); `/ ?; i* s: i" \$ ~/ e
0801C6  4EF900011DEE  jmp $011DEE.L$ ]' X; K5 ?4 p$ X$ M/ M1 p
+ t% g; c/ a% ~8 h4 d& W. L- S8 J0 x
011DEE  1C2A000D  move.b ($d,A2),D6
5 b. T4 s+ r, ?$ L3 C1 T2 o. h) ~1 |$ D) z( a( T  \  M
然而修改后并未达到预期效果。相反,游戏在角色受伤后立即死机。
7 t7 j* m# P3 \3 U2 b% U( t1 O; o( s- v; O
请问这是为什么?如果想实现这种操作的话,正确的方法是什么?
1 f+ c9 }4 R6 T" }$ D& U
: ^& [( {0 ^+ f& M% U之所以产生这个想法,是因为最近在汉化的一款游戏需要对字库进行扩容。汉化已经几乎完成了,然而游戏中的一些小字体区域还存在一些问题,如果不改会很难看。6 T5 W) }$ L4 P4 s) Z
. H, J, w) H9 @+ L+ D  Y$ ~: B
这些小字体由于只使用一个字节进行编码,游戏原本只能显示256个字符。我希望将编码方式改为00-EF为正常映射,F0-FF则切换VDP至相应页码。我认为这需要将原本的程序跳转至一空白处之后再进行自由发挥。
) P1 s4 `: `- M! f" F% Y4 K0 C; L  o. t+ E* Y" k8 n0 w1 |" ]
我并没有任何汇编或反汇编经验,所以打算先从最简单的进行尝试。想不到一上来就遇到了问题。7 B4 e& d! l2 D# K) ?

; K# |9 i: B  @+ ?5 K7 i) S* v期待您的回复!
回复 支持 反对

使用道具 举报

签到天数: 1986 天

[LV.Master]伴坛终老

 楼主| 发表于 2024-4-6 01:40:38 | 显示全部楼层
SchreckgSoldat 发表于 2024-4-5 22:29& Q* w* f( x+ c' I" Q8 D. K, F
大佬您好,晚辈这边斗胆咨询您一个关于MD Hack的问题,如有冒犯还请海涵!
( d# V  I* Z! X: `! w/ u" z& m: x/ ]) E2 \
有幸拜读了您的教程:
6 M# o( u! y, H* i" P
# ~0 Y  M* X+ h$ [
ROM名称:Contra - The Hardcore (J).bin+ M0 ]0 m. {6 W: v( ?3 a
8 T! y7 j" Q8 @
  1. 011DEA  932A000D  sub.b  D1,($d,A2)        ->4EF9 001FDD00 jmp $1fdd00.L( C6 g  t; K% X( ^6 C+ M2 H
  2. 011DEE  1C2A000D  move.b ($d,A2),D6        ->4E71 nop
    9 b0 c, s; c; g7 h2 z
  3. 011DF2  6A02          bpl $11df6
    7 F, X' I! U' k" s7 x# G

  4. 7 f) P: Y1 }) u
  5. 1FDD00:/ y; l% k' b' X3 v
  6. 932A000D  sub.b  D1,($d,A2)
    8 T5 ~  O( M; h0 K; S+ h
  7. 1C2A000D  move.b ($d,A2),D6
    8 u+ P; l% m  s0 v
  8. 4EF900011DF2 jmp $011df2.L
    ) U5 _; k" j6 K
复制代码
回复 支持 反对

使用道具 举报

签到天数: 3 天

[LV.2]偶尔看看I

发表于 2024-4-6 12:18:46 | 显示全部楼层
疾风之狼 发表于 2024-4-6 01:400 m' J, u! o+ Z& ]  u
ROM名称:Contra - The Hardcore (J).bin

2 ?/ a! o9 i0 s0 t5 W- Q感谢大佬!
9 ?8 t+ J% b: R2 ^! w( u# m( V& a& \! L1 X/ M
请问造成这种现象的原因是什么呢?为什么向后移动一个命令写入JMP就可以正常运行,而像我那样就不可以呢?
回复 支持 反对

使用道具 举报

签到天数: 1986 天

[LV.Master]伴坛终老

 楼主| 发表于 2024-4-6 18:06:29 | 显示全部楼层
SchreckgSoldat 发表于 2024-4-6 12:18
  i, R: l1 L  d2 A感谢大佬!
' h% [: C8 G" \! H7 l0 i0 C0 _* {* C. Y) e0 j3 {8 s& P( S
请问造成这种现象的原因是什么呢?为什么向后移动一个命令写入JMP就可以正常运行,而像我 ...
  1. 011DE0 7A00        moveq #$0,D56 }. h* X% t5 u9 p  @$ {
  2. 011DE2 6006        bra $11dea# ?$ }! f' q1 [+ I. `  [
  3. 011DE4 45F8FA20        lea $fa20.w,A2
    # c3 B7 _  ]" u* C- A7 y6 {, y
  4. 011DE8 7A01        moveq #$1,D5
    5 P8 Q. G4 b3 B# d- _: v
  5. 011DEA 932A000D        sub.b D1,($d,A2)' T" h; o: ?% o2 p  m
  6. 011DEE 1C2A000D move.b ($d,A2),D6
    5 R" f5 z) A1 g" y- j+ g
  7. 011DF2 6A02        bpl $11df6
    - m3 [4 `; m$ n' d* Q- B
复制代码
3 `4 E! E" c* K
% j2 ~8 k' V" `# S+ @+ ]$ p: B
你改错位置,011DE8地址指令没有执行到,程序是从011DE2跳到011DEA执行。
4 F0 @0 b7 S( [6 {/ k4 x% d& b. c) 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
( A& D" V6 H7 ~- {4 P& E你改错位置,011DE8地址指令没有执行到,程序是从011DE2跳到011DEA执行。
, F) q! Y- b+ V/ S% u; C( q, D; J/ Z0 a
你011DE8改成4EF9 0008  ...

6 x/ E0 H) y. u# g! i醍醐灌顶了!非常感谢!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-22 07:41 , Processed in 1.135742 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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