EMU618社区

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

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

[复制链接]

签到天数: 2170 天

[LV.Master]伴坛终老

发表于 2013-11-12 22:01:29 | 显示全部楼层 |阅读模式
准备东西:68K指令集资料、REGEN DEBUG、十六进制编辑器# j4 {6 F; ?0 l! g: O5 k" C9 d
1 b! B: q/ Z  y- L
REGEN DEBUG官网下载页面:http://aamirm.hacking-cult.org/www/regen.html
3 e  u5 ~" Q/ q' Q6 l- `8 a6 l: v0 d8 X$ d
以前写的MD HACK教程是用MD调试器,但这MD调试器在使用过程发现有点缺点,显示机械码只显示前2位,后面地址或数值却没有显示,有可能造成后来新手在修改ROM时寻找不到要修改的数据。
- K, m- G* W9 k9 @/ Y; v" o* g* l
, S1 p  g. `1 A. K6 Y) Y. m4 B本篇教程考虑改用REGEN 0.972 Debug版来调试跟踪,现在的REGEN DEBUG很强大,可以考虑放弃MD调试器。
* G  m! g9 ?2 z# v1 L% [* f: i
& Q' k/ @% Z* [; ?7 O以《魂斗罗:铁血军团》日版为例,修改目标:体力值不减
1 X/ d# q1 R: X( Q
5 }7 S( V9 N* X# _# K1。先找到《魂斗罗:铁血军团》体力值存放地址,可通过REGEN自带的作弊码查找功能来找,我找到了,存放地址是0xFFFA0D。
! j& S3 u% ]! M8 ?- o6 D. f" G
5 T$ W6 W' U+ F" {2。选择人物进入游戏后,点击Tools->68000 Debugger进入68000调试器界面,图1:
1 u6 q. K4 H1 e# G  z& M! y. ?. {% H4 j4 m8 b

; O! Z$ }+ j  a$ O" _3 z左上角框是显示汇编指令,右边是寄存器显示- C' R: B% V2 O0 i
3 h& |- w% d8 d6 Y
Address Breakpoints是地址断点1 e3 r- A7 y& }
Address Range是对一定范围地址设置断点- N0 ~1 ?) J  N6 O: Q
Register breakpoints是寄存器断点: h' Q  n" n) ~* M8 }( O( O3 ~
VDP Breakpoint Range是对VDP一定范围地址设置断点
4 b& a. D- K/ j( @: Y. r. `VRAM breakpoints是VRAM断点# C# k1 q: D# `6 D
Go to address是转到指定的地址8 `' I% }' P2 P2 R+ L
show disassembly是对指定的地址反汇编
1 G- x! g$ B- [2 a( {$ r/ [& bDebug step是进行单步或N步调试9 f7 O/ r" U5 f1 ?" Q
ROM MEMORY是ROM Viewer
8 ^2 f0 Y" N' ~; z68000 MEMORY是RAM Viewer
# F5 h2 _9 p- C4 x1 V$ ~Z80 Debug是Z80调试器# P+ S4 K, s8 n7 T
( `: O" L) C" r* {
Read是读,Write是写,PC表示是PC地址,Trace是跟踪(选择该项会在模拟器目录下生成ASM文件)# T. y4 o8 |( \+ X6 t

$ J, Q$ }3 J( o2 N/ a# NRESET是重启游戏,RESET68K是68K重启,RESETZ80是Z80重启
5 r, S6 u- X( S; p0 H$ }6 v
2 b8 S: Q% j; S$ V3。在Address Breakpoints的Set Breakpoint右边框输入地址FFFA0D,Write选项加勾,再在Set Breakpoint左边框打勾,图2:, \7 q- {+ n$ v# L+ j
, m6 X0 q& a7 ?( {8 T: g; }* c
$ ?$ Y8 n7 u, K! h
4。点击OK返回游戏,当被敌人攻中时调试器发生中断,图3:, c2 L& p0 n$ Z! Y, O% M
! ?, W! g9 p: w- G+ n0 B; a3 K
- e7 G8 }" \6 N3 c+ v
指令停在011DEE 1C2A000D move.b ($d,A2),D6这一行,前面指令却没有显示,用show disassembly把11DE0~11DFA这段地址反汇编看看,图4:
; i# P+ P( P. m/ ^0 w
" M% b6 L8 X1 o% Z+ C6 S
6 M3 n8 C+ `* Q+ m5 E+ k7 b现在来分析一下:
4 E1 U8 F/ G/ O8 @* P& F% P3 [A2=FFFFFA00
9 r+ H. ]; w/ o! k/ o  {D1=00000001! N* ~9 r# N+ ~1 V' b
  X) P' V9 F; \2 Q' K
011DEA 932A000D sub.b D1,($d,A2)  把$FFFA0D(A2寄存器的数据($FFFFFA00)+$d=$FFFFFA0D)的地址单字节数据减去D1寄存器的数值,结果存入$FFFA0D( \, x, N. X) {. k5 A$ y
011DEE 1C2A000D move.b ($d,A2),D6 把$FFFA0D的单字节数据存入D6寄存器
. X: t( s& L0 X: `: V  l, p! T# [
只要把11DEA指令NOP掉,就可以实现体力不减,NOP指令机械码是4E71$ J$ t2 R  G9 h+ e5 j3 }
; F! x' m* H" G9 R+ P) d" i
5。点击ROM MEMORY进入ROM viewer界面,来到011DE0地址,在Set new value输入11DEA和4E714E71,再点击Set 1-10 bytes写入,再点击OK退出ROM viewer,图5、图6:
' r% I0 ]2 Z& A" T% w' \3 L$ }( y
" ^& }" n4 L. H' _7 w  E
/ f, I! [* \. q- K; q5 s9 X注意:在ROM viewer修改,修改结果是不会被写入ROM里,要修改ROM还得用16进制编辑器。
5 C) C* \, {# R/ h% O7 s
! Q9 J6 T3 @6 ^3 _$ c6。再对11DE0~11DFA这段地址反汇编看看,11DEA的指令被NOP掉,图7:
+ X3 H& D9 i) g9 E$ C* ^7 m  |9 D6 j- m7 S8 [3 p8 c
" d- ?6 A+ q  Y) F
7。把Set Breakpoint和write的打勾去掉,再点OK回到游戏看看,体力是否不减了?体力不减说明修改成功。图8:% Z0 v4 }9 h: F9 e. ]

2 o' W7 W' ~8 X: V% W
; t* W4 Y! }; M! `8。打开WINHEX或UE,载入《魂斗罗:铁血军团》日版ROM,来到0x11DEA,把93 2A 00 0D修改为4E 71 4E 71,保存。图9、图10:
4 A- ]) l" k; U: H6 n
" o. ]9 e/ b, T; }' ~! S" ?- U) x7 t8 ^4 e2 h
疾风之狼
& L/ U" P: k; z6 O/ B) B5 g6 B1 K2013/09/13

* ~7 D- @4 o0 u6 [1 v1 d4 v" N3 }1 t* \  C
如看不清图片请点击图片放大,或至我博客: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 编辑 8 m% p. l) ]: r

, @0 B: |/ f: h4 T2 D大力顶下~好贴前,坐沙发。

签到天数: 2060 天

[LV.Master]伴坛终老

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

签到天数: 2585 天

[LV.Master]伴坛终老

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

签到天数: 107 天

[LV.6]常住居民II

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

签到天数: 3133 天

[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的问题,如有冒犯还请海涵!
- j$ o  Y+ T; Y4 M& L$ Q9 T: s0 H5 l5 A& K; S$ M
有幸拜读了您的教程:
; F' G$ U6 m* |  p+ |/ |http://2006.emu618.org:6180/thread-193604-1-1.html
2 _# T' p$ g, N$ R! `) m+ @$ J3 U/ q  `/ X+ c7 K- z2 U' Z4 p4 I
跟着您的教程做了一遍,收获很大。
: r8 t6 r" d7 l2 ^/ K# p0 j$ f* P& N7 c* b/ `
不过我由此想到了一个问题:) Y; u( _% e5 t
例如《魂斗罗:铁血军团》体力值的例子
  \% r" w4 m& f  q/ R* W8 O1 L
6 f8 c/ Z# R! O$ I3 N' j/ t011DE8  7A01  moveq #$1,D5
. y' N) z( I. B011DEA  932A000D  sub.b  D1,($d,A2)1 s% g8 h& J6 R5 ~$ i, U8 G( c, O/ f
011DEE  1C2A000D  move.b ($d,A2),D66 u* f, z; o5 i1 p6 Z

* l( Q6 F% T  e1 ^实测,在将932A000D改成4E714E71的前提下,再将7A01也改成4E71,不会影响无敌效果。
) N, m6 o( ~3 k1 V- j
* u% B- l9 y5 u0 P7 \( E* ^0 H" f那么我想,如果像下面这样,将011DE8和011DEA处的命令改成JMP,跳转到某个空白处,然后在空白处重新写上011DE8和011DEA处的命令,最后再跳转回011DEE,是不是就可以恢复正常的受伤功能:
4 l6 u+ u/ J) ^: T! w; ]
% v* H3 y7 b/ D( W' \+ q011DE8  4EF9000801C0  jmp $0801C0.L
% w& N+ u) |' R5 g# g5 J
/ g2 K" d4 p8 B+ d9 u; i% F0801C0  7A01  moveq #$1,D5
3 ~7 k4 |  A- h# w% D$ y8 j# D* g0801C2  932A000D  sub.b  D1,($d,A2)
" {% u4 p9 M$ A4 {2 ]0801C6  4EF900011DEE  jmp $011DEE.L
3 ^% Z8 C' \1 z. Z" \2 d5 k( Y6 T0 F* I7 `1 h
011DEE  1C2A000D  move.b ($d,A2),D64 Z1 d, [7 K- T$ t& r  H
: |0 {: j/ C0 V
然而修改后并未达到预期效果。相反,游戏在角色受伤后立即死机。
, f$ r' S: l5 \- L( n6 w  y; Q  b- H; I' Q/ N# z
请问这是为什么?如果想实现这种操作的话,正确的方法是什么?
5 Q4 I& {; S9 ?9 d' D! N) l( w# K- h3 F4 K7 \( Y) u
之所以产生这个想法,是因为最近在汉化的一款游戏需要对字库进行扩容。汉化已经几乎完成了,然而游戏中的一些小字体区域还存在一些问题,如果不改会很难看。
" N8 p& v3 |7 _) Z7 [# h! y3 @
' }1 W9 \- J8 e. a& y7 H/ C这些小字体由于只使用一个字节进行编码,游戏原本只能显示256个字符。我希望将编码方式改为00-EF为正常映射,F0-FF则切换VDP至相应页码。我认为这需要将原本的程序跳转至一空白处之后再进行自由发挥。- E% V2 W! D% o$ A% l

3 f/ a& b* Y/ v& ?我并没有任何汇编或反汇编经验,所以打算先从最简单的进行尝试。想不到一上来就遇到了问题。+ W% U8 _; \9 ?
" M1 M+ d2 W, k2 n0 k
期待您的回复!
回复 支持 反对

使用道具 举报

签到天数: 2170 天

[LV.Master]伴坛终老

 楼主| 发表于 2024-4-6 01:40:38 | 显示全部楼层
SchreckgSoldat 发表于 2024-4-5 22:29" K7 Q4 [! D! ]
大佬您好,晚辈这边斗胆咨询您一个关于MD Hack的问题,如有冒犯还请海涵!
. J* I1 k0 L7 Y" F* P% B$ N5 e; b: i0 C0 D( r$ o" b6 T1 K
有幸拜读了您的教程:

% J5 x) o- d# \0 G. x  c& @$ `
2 s6 {; V7 Z- I# j* K1 F4 {ROM名称:Contra - The Hardcore (J).bin
/ B0 `+ Y- I  Q! `2 D5 z: A7 W
! _  u) p8 ?+ W( f" C, g) Y  T
  1. 011DEA  932A000D  sub.b  D1,($d,A2)        ->4EF9 001FDD00 jmp $1fdd00.L
    3 A- S9 i) o/ {3 o0 y9 C
  2. 011DEE  1C2A000D  move.b ($d,A2),D6        ->4E71 nop
    ; P, `. S8 n$ _9 V( F" W6 b2 o
  3. 011DF2  6A02          bpl $11df6* p3 {; C  Z! d, v  Y9 ~) ~
  4. 1 q% b5 G7 ^  t6 j  j( ]
  5. 1FDD00:
    / O6 b5 l- y& `& f# C
  6. 932A000D  sub.b  D1,($d,A2)3 M* @' G( p% H
  7. 1C2A000D  move.b ($d,A2),D6( T  O, \- l- _" C- w
  8. 4EF900011DF2 jmp $011df2.L
    . f2 ^$ |0 D3 }3 x4 R
复制代码
回复 支持 反对

使用道具 举报

签到天数: 3 天

[LV.2]偶尔看看I

发表于 2024-4-6 12:18:46 | 显示全部楼层
疾风之狼 发表于 2024-4-6 01:40' C+ o5 t, G) j+ z' N# X& k' \/ ~+ ?
ROM名称:Contra - The Hardcore (J).bin

1 w6 F8 I' \1 ]* `' ]0 P' C" F8 q# _感谢大佬!
/ {* I# g) y- Z' z
3 b1 t6 s% f9 F; [7 R请问造成这种现象的原因是什么呢?为什么向后移动一个命令写入JMP就可以正常运行,而像我那样就不可以呢?
回复 支持 反对

使用道具 举报

签到天数: 2170 天

[LV.Master]伴坛终老

 楼主| 发表于 2024-4-6 18:06:29 | 显示全部楼层
SchreckgSoldat 发表于 2024-4-6 12:184 K, ^2 i4 [' n6 {  S. T
感谢大佬!
! m( c5 V: U8 R$ `
2 ?* U# c5 |$ A5 y, h5 Y请问造成这种现象的原因是什么呢?为什么向后移动一个命令写入JMP就可以正常运行,而像我 ...
  1. 011DE0 7A00        moveq #$0,D5" r/ r) j/ z1 O& ^5 y& q, u0 Q
  2. 011DE2 6006        bra $11dea
    4 r4 x  I5 w  n  [; k) p- m
  3. 011DE4 45F8FA20        lea $fa20.w,A2
    9 A# D" M, X* G0 k6 ?! {
  4. 011DE8 7A01        moveq #$1,D5
    & A, k1 q( _8 f6 }' R, E* |
  5. 011DEA 932A000D        sub.b D1,($d,A2)
    4 x7 |, @# }9 Y) D# q0 c* K
  6. 011DEE 1C2A000D move.b ($d,A2),D6
    ! n" G! v. F. z: `4 D# }" O' t" y' F
  7. 011DF2 6A02        bpl $11df6
    - ]  D' h1 i; _% m$ m
复制代码
! `: j6 }4 l) b$ _& C1 J( Z
7 ]2 k  r" [' `: G4 @( P
你改错位置,011DE8地址指令没有执行到,程序是从011DE2跳到011DEA执行。% l7 R+ H  M2 g2 ]) K
( r0 Y+ `& w, F( b3 K
你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& I$ [% J' o9 e( b& i: Y" l
你改错位置,011DE8地址指令没有执行到,程序是从011DE2跳到011DEA执行。3 l  K0 `  f. b
/ \; Y2 j. G0 G6 `+ q! y
你011DE8改成4EF9 0008  ...
* |  ?/ `5 j1 L5 S+ F: @9 J; \
醍醐灌顶了!非常感谢!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-24 05:12 , Processed in 1.099609 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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