设为首页收藏本站

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

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

[复制链接]

签到天数: 1992 天

[LV.Master]伴坛终老

发表于 2013-11-12 22:01:29 | 显示全部楼层 |阅读模式
准备东西:68K指令集资料、REGEN DEBUG、十六进制编辑器% b+ S$ J& i+ m; m
" Q! {( B4 C: g3 M1 r) Z
REGEN DEBUG官网下载页面:http://aamirm.hacking-cult.org/www/regen.html& ?) A. d# c& D) I0 n9 T6 o5 x
5 k3 p$ }' v  |, n1 y
以前写的MD HACK教程是用MD调试器,但这MD调试器在使用过程发现有点缺点,显示机械码只显示前2位,后面地址或数值却没有显示,有可能造成后来新手在修改ROM时寻找不到要修改的数据。6 j: V7 w; F) Q

6 ?7 w& E  d& i& k本篇教程考虑改用REGEN 0.972 Debug版来调试跟踪,现在的REGEN DEBUG很强大,可以考虑放弃MD调试器。' f$ V) b+ A; O+ y
3 |8 _' _6 H) s) n  N$ z5 p
以《魂斗罗:铁血军团》日版为例,修改目标:体力值不减
; D" L# o  X- ~
2 K" ?) }! a+ N1。先找到《魂斗罗:铁血军团》体力值存放地址,可通过REGEN自带的作弊码查找功能来找,我找到了,存放地址是0xFFFA0D。/ `. y3 u/ G+ N& f8 Y
4 X0 ]" `# B% E8 l
2。选择人物进入游戏后,点击Tools->68000 Debugger进入68000调试器界面,图1:( r2 A& W0 X6 |1 Z
5 v" p, h4 D* L) N7 m1 K
$ D0 \. T/ C6 T7 @
左上角框是显示汇编指令,右边是寄存器显示1 l- I- R8 _0 F3 y

" ?) x9 Y& G; l: MAddress Breakpoints是地址断点" L* o: ]9 {& ~& ^( L* _( @6 I
Address Range是对一定范围地址设置断点
+ x2 W7 ?4 @* u/ q) K3 tRegister breakpoints是寄存器断点
) Z& i7 R7 o/ y; ?VDP Breakpoint Range是对VDP一定范围地址设置断点3 X+ ], T9 z; i0 _# V! P
VRAM breakpoints是VRAM断点& R6 m4 |- b! B" I
Go to address是转到指定的地址
) s7 _/ }/ |/ b$ W4 Z( C: p8 ushow disassembly是对指定的地址反汇编' v! @4 [; P. a) }3 c0 j! p
Debug step是进行单步或N步调试
. \& Q# t+ T7 ~6 k3 s- J% tROM MEMORY是ROM Viewer( u! C. V, h- m" b& u! o) M
68000 MEMORY是RAM Viewer
# ~) [$ O  \  e% [. O3 t- AZ80 Debug是Z80调试器
0 L( Q. A/ Y) B. b! w
( w$ ~, o. _& [Read是读,Write是写,PC表示是PC地址,Trace是跟踪(选择该项会在模拟器目录下生成ASM文件)& ?8 ~) Y7 z5 `, l) G5 I
5 D7 {: R  s8 H- h' r, w- }
RESET是重启游戏,RESET68K是68K重启,RESETZ80是Z80重启
) j7 l6 d' c. h
( c7 x* Z: s- G# k# O" v  z3。在Address Breakpoints的Set Breakpoint右边框输入地址FFFA0D,Write选项加勾,再在Set Breakpoint左边框打勾,图2:
% Y6 J% }( G/ @. L' |9 f# E7 v0 k, @& g/ W
$ M7 c) Z2 M; ~0 I
4。点击OK返回游戏,当被敌人攻中时调试器发生中断,图3:7 J/ ]+ r1 R2 n) j. V
" W: q2 X: U: m. S; m: q4 W
8 W2 R$ {8 Z' z5 E- r0 h2 i
指令停在011DEE 1C2A000D move.b ($d,A2),D6这一行,前面指令却没有显示,用show disassembly把11DE0~11DFA这段地址反汇编看看,图4:) s* w& v7 e, h9 }. I0 H

7 q6 F& A$ d' m% X3 W. i
, X" x. E* a( s2 B- w# @现在来分析一下:2 f; l$ S. {) Z
A2=FFFFFA00
7 i/ R1 L  z. X% h8 s+ v& L5 WD1=00000001
; H- s- s# e: H( Z5 \
0 q6 g! s! P1 T7 G011DEA 932A000D sub.b D1,($d,A2)  把$FFFA0D(A2寄存器的数据($FFFFFA00)+$d=$FFFFFA0D)的地址单字节数据减去D1寄存器的数值,结果存入$FFFA0D
- H- E! O3 D6 p% L, @1 S011DEE 1C2A000D move.b ($d,A2),D6 把$FFFA0D的单字节数据存入D6寄存器% v1 X% O* B. a$ x7 a( C1 k2 ?: o
- ^' S1 @( L+ `- g
只要把11DEA指令NOP掉,就可以实现体力不减,NOP指令机械码是4E71# t7 {0 m  r# c* }

: z$ Z5 t3 Q! t4 P! `) G2 B5。点击ROM MEMORY进入ROM viewer界面,来到011DE0地址,在Set new value输入11DEA和4E714E71,再点击Set 1-10 bytes写入,再点击OK退出ROM viewer,图5、图6:: y9 n% h4 O: W

' ^/ K3 V' y0 a4 _7 N
+ D$ X5 K5 I% Z8 F' J" S6 M注意:在ROM viewer修改,修改结果是不会被写入ROM里,要修改ROM还得用16进制编辑器。
# C4 \9 K7 R; }! m  S" A. U5 j! u+ g7 g
6。再对11DE0~11DFA这段地址反汇编看看,11DEA的指令被NOP掉,图7:
2 X' {( W( d9 k# z2 L: y$ d+ f% b, U6 M+ k8 W0 u; O& [
' |8 W! h9 m( n) A+ f3 r) u9 L! q0 ~* U
7。把Set Breakpoint和write的打勾去掉,再点OK回到游戏看看,体力是否不减了?体力不减说明修改成功。图8:; L2 g. g7 @$ c! c: s$ }) v' J

1 U' h, X8 j1 Q, k* |  m3 L# M3 g3 A1 A5 U4 t+ D) T  J
8。打开WINHEX或UE,载入《魂斗罗:铁血军团》日版ROM,来到0x11DEA,把93 2A 00 0D修改为4E 71 4E 71,保存。图9、图10:
% q5 x6 R9 s  N$ [
2 s. v, Q/ D8 P# u0 u' o
( f, u5 J- S# d( {* \: O
疾风之狼
0 i2 L. g, i3 A2 d* ^% x+ n; P2013/09/13

8 P( a1 c' k5 `* ]/ f
! j, Q# ~, b( |  e如看不清图片请点击图片放大,或至我博客: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 编辑 % }; o5 x; m4 Q( P3 {

# h" a* C, B7 k" ]  y% J& j0 {/ f3 B! F大力顶下~好贴前,坐沙发。
回复

使用道具 举报

签到天数: 2060 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 2561 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 107 天

[LV.6]常住居民II

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

使用道具 举报

签到天数: 2964 天

[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的问题,如有冒犯还请海涵!
! m$ N4 T- s& B+ |8 p! v
: i9 [  C1 g" H" |有幸拜读了您的教程:0 ^* l# d# l! h7 R3 D: H$ |6 {
http://2006.emu618.org:6180/thread-193604-1-1.html
( i4 l$ z! b% t0 J
' Q% O  W# @" M- I6 _5 F: o* R& p跟着您的教程做了一遍,收获很大。
" c* [- B2 M) ]% m, r/ L. D6 o2 z; U; T# K4 ]+ F
不过我由此想到了一个问题:
/ o: A: S# s+ D, {例如《魂斗罗:铁血军团》体力值的例子# b) u( k& K+ g

0 Q# `4 S3 K# X+ L) \  g011DE8  7A01  moveq #$1,D5& S( ^1 h3 |" z( K- Q. [
011DEA  932A000D  sub.b  D1,($d,A2)* Z/ o  o& M  h' }: j
011DEE  1C2A000D  move.b ($d,A2),D64 K- l' g7 l4 ^) G: J0 W0 s

5 h+ e* K7 @, P/ i  H1 J/ x9 {* V1 x实测,在将932A000D改成4E714E71的前提下,再将7A01也改成4E71,不会影响无敌效果。
4 \+ Q2 Y0 Z& D
' R& A* @2 ]  O" W' V% Y+ h那么我想,如果像下面这样,将011DE8和011DEA处的命令改成JMP,跳转到某个空白处,然后在空白处重新写上011DE8和011DEA处的命令,最后再跳转回011DEE,是不是就可以恢复正常的受伤功能:
! o' |% w3 k; W5 [3 D& U' |! q: v4 C% U- u0 _' Y
011DE8  4EF9000801C0  jmp $0801C0.L
/ y* l0 D* E8 r+ z! C; |. b/ e& F- N
0801C0  7A01  moveq #$1,D54 _  f# k0 Q+ u0 _
0801C2  932A000D  sub.b  D1,($d,A2)% ^5 J+ F! k+ T2 Z
0801C6  4EF900011DEE  jmp $011DEE.L' r% E) [) U4 o6 `4 X" p$ C
4 W' i( G. ~$ y' a4 u3 a# \
011DEE  1C2A000D  move.b ($d,A2),D6
+ ^  P/ p- Y( a: G' g$ M: K
6 f( L3 l2 ~. N, T然而修改后并未达到预期效果。相反,游戏在角色受伤后立即死机。
8 N" O: \. q# A' P
" X2 ?/ J9 O- n3 y+ [2 d4 S0 `请问这是为什么?如果想实现这种操作的话,正确的方法是什么?
& V, |! K6 x2 F# m
2 Z& X2 F" E8 e  F% X8 i6 h之所以产生这个想法,是因为最近在汉化的一款游戏需要对字库进行扩容。汉化已经几乎完成了,然而游戏中的一些小字体区域还存在一些问题,如果不改会很难看。0 J: Y' A" u  H: |7 `' W
3 y' A" j# n: v5 l& S0 {
这些小字体由于只使用一个字节进行编码,游戏原本只能显示256个字符。我希望将编码方式改为00-EF为正常映射,F0-FF则切换VDP至相应页码。我认为这需要将原本的程序跳转至一空白处之后再进行自由发挥。
- [: [4 J! k. q8 j8 H! {+ h6 S7 j( D0 n4 s7 J0 r- K
我并没有任何汇编或反汇编经验,所以打算先从最简单的进行尝试。想不到一上来就遇到了问题。& ~& \. L* m. X$ Y) y& G5 V: Y

+ Y; g+ o1 d; \' i; J- Y期待您的回复!
回复

使用道具 举报

签到天数: 1992 天

[LV.Master]伴坛终老

 楼主| 发表于 2024-4-6 01:40:38 | 显示全部楼层
SchreckgSoldat 发表于 2024-4-5 22:297 g$ y3 e" `- s3 u9 T6 D
大佬您好,晚辈这边斗胆咨询您一个关于MD Hack的问题,如有冒犯还请海涵!, V. Y+ j& `0 ?: d0 s
' `8 g* Y' @+ {- Y3 G! }9 d4 g& C  @
有幸拜读了您的教程:
+ h) t+ j: N5 Y1 s

$ a! j. }' E# w9 P- ]8 l: p4 y$ ZROM名称:Contra - The Hardcore (J).bin
9 Y% {9 c( o* L$ S- A) f2 G9 Y; I: m8 b& h& g* C
  1. 011DEA  932A000D  sub.b  D1,($d,A2)        ->4EF9 001FDD00 jmp $1fdd00.L: _) M. q; w  ?$ J) @' p
  2. 011DEE  1C2A000D  move.b ($d,A2),D6        ->4E71 nop
    ; y5 }" L$ f) ?9 j& p2 T
  3. 011DF2  6A02          bpl $11df6
    + S- H5 y8 z4 F; Z  b7 u+ r

  4. 9 m% _0 y9 k& I/ Q" W7 g- K
  5. 1FDD00:3 C% t% h" ~8 o( Q( K1 G$ F7 H
  6. 932A000D  sub.b  D1,($d,A2)
    ) H# ?* h. ^( u' T
  7. 1C2A000D  move.b ($d,A2),D6
    ) p; `% \4 J/ x# j' D! D- m
  8. 4EF900011DF2 jmp $011df2.L
    $ _1 M/ G" ~/ {+ \
复制代码
回复

使用道具 举报

签到天数: 3 天

[LV.2]偶尔看看I

发表于 2024-4-6 12:18:46 | 显示全部楼层
疾风之狼 发表于 2024-4-6 01:40( W" o8 s$ F& s- ~1 e" b
ROM名称:Contra - The Hardcore (J).bin

5 j6 o/ w# A: r7 P" L/ P& ~感谢大佬!
: s3 n6 W  k1 R" y1 l# s+ L3 ]4 [
) E0 q" `! V6 ?3 U  c; E请问造成这种现象的原因是什么呢?为什么向后移动一个命令写入JMP就可以正常运行,而像我那样就不可以呢?
回复

使用道具 举报

签到天数: 1992 天

[LV.Master]伴坛终老

 楼主| 发表于 2024-4-6 18:06:29 | 显示全部楼层
SchreckgSoldat 发表于 2024-4-6 12:18+ E! }: W# D6 y) b
感谢大佬!3 N& z, j; c( h' a- m" ]

0 i1 b: G% ~" ^请问造成这种现象的原因是什么呢?为什么向后移动一个命令写入JMP就可以正常运行,而像我 ...
  1. 011DE0 7A00        moveq #$0,D5; [& ]0 y( T$ B5 Z# J- K7 w4 f( O
  2. 011DE2 6006        bra $11dea
    ' C% d# u3 f9 M% u) _' v
  3. 011DE4 45F8FA20        lea $fa20.w,A2: n7 c9 ^  o* R- \+ |& L3 K
  4. 011DE8 7A01        moveq #$1,D5, g" V/ ~+ S1 X! X9 `( h
  5. 011DEA 932A000D        sub.b D1,($d,A2)5 X' [+ N7 |  O& _! o. M8 N
  6. 011DEE 1C2A000D move.b ($d,A2),D6: Y6 }' Y8 u4 o/ C
  7. 011DF2 6A02        bpl $11df6
    * [3 {0 `2 H0 x  L
复制代码
) D) q8 k+ o9 Y0 K* l3 ]3 J/ X" D

: k" Q9 e5 Z1 d3 L$ ^9 T你改错位置,011DE8地址指令没有执行到,程序是从011DE2跳到011DEA执行。$ f0 M0 Q. y" a$ S" d8 J
4 ~5 n; O6 i8 _
你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+ R3 b8 c- M/ [/ D! x- Z1 M
你改错位置,011DE8地址指令没有执行到,程序是从011DE2跳到011DEA执行。- E, f" q- W; v4 |; s

8 v4 r( r+ q7 K/ h2 ]( W你011DE8改成4EF9 0008  ...

. t2 `" K8 C8 I# W' U$ X醍醐灌顶了!非常感谢!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-6-25 23:57

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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