EMU618社区

 找回密码
 立即注册
搜索
查看: 1774|回复: 19

[研究] 菜鸟hack勇者斗恶龙4(dq4)fc英文版实践(实际上记录自己过程)

[复制链接]

签到天数: 31 天

[LV.5]常住居民I

发表于 2012-11-25 11:02:57 | 显示全部楼层 |阅读模式
本帖最后由 sdiencelee 于 2012-11-29 18:38 编辑
, m8 v5 j+ l: ]  Z8 ]$ d8 F
" U& O" h5 u  g, f由于此处无法上传本地图片,所以只能先在其他地方发个贴,贴过来图片,http://tieba.baidu.com/p/20079507263 [( Z, }6 P0 X0 `
dq4是我玩的第一个英文rpg游戏,当时2001年左右,刚大学毕业,用fcsim的模拟器(dos的模拟器,虽无即时存档功能,但有电池存档,不至于心血白费,方便快速关机,逃避家长偷袭,也是那时候唯一可
& [. ?' Z2 H. w7 X* W, N以玩霸王的大陆模拟器),多亏是英文版,还可以无攻略通(其实那时候也不太知道有攻略这回事)有人当此为废话可以无视,看下面的。
: ~  O  a) Z7 r0 C. Z* B首先- y( g, h9 d& L( c
一、为debug做准备找到1.virtuanes的debug版本和2.比较新版的fceux,这两个东东因为互有优缺点,
9 K) o! E- v# Q- H所以,均准备出来
& e' t8 i; t: f- i4 G4 e# m9 C( b7 |- V9 o
【补充知识,对于ec码与vnes及fceu等模拟器的地址之间有如下关系9 h" \  b/ `. w: k
对于前面的那段,ram:(0-7ff),ec码地址与模拟器地址相同
  u& {3 z: f& N2 ^# g$ v对于后面的那段,sram :ec码地址为800-,模拟器地址为6000-,可以看出两者关系 模拟器地址=ec码6 {: e# C, b# T

! N/ W# x* Q+ [9 q& i地址+5800】9 G0 H5 w% D( u& E0 N) \
我们先要hack最贵的金属盾(50000)那个东东,之所以选择最贵的,因为在设置断点追踪过程中,常会* V2 _' O+ `# ?- `

/ j. c. X# k+ _4 b6 Q再次追踪到零业地址这个变化频率很快的,就会出现断点跳出过快的情况,所以,先找最贵的,利用工, b* r; u. `- X1 b
- i. O. D6 k2 x  a0 A
具知道50000的十六进制为3c50(计算机记数为503c,具体参见6502大奥秘)
% ^) W, D0 K9 V  n. j6 ~- Z5 U, k之后执行到将东西卖给一个人后,当然了,首先作弊将代币个数调到可以买这个金属盾,其实以后往往
6 e% y- }& Y( B6 s4 `9 K* q, S# z& ?( i4 R8 `, M' ?& F
还会特意将东西,调少,干不动某事,其实程序先有指令判断是否可行(在此进行追踪),这样以后的
6 T* U" m5 T2 O$ Y
- H+ G6 P3 T0 q: y! A进程无需看了,会减少不必要的过程。
5 Q  H' i0 }& I0 {' |发现,游戏停止,指令方框内将地址$62ad减去$fd的值在赋给$62ad,(及$62ad=$62ad-$fd),至于我' R; c! i+ L* \8 T: y6 j

% N& r6 B7 f8 G  b2 |8 z们找的这个对不对,我们点击条命令后暂停,3 X. {9 T8 I; p1 q+ x, y4 F
二、其他工具hexedit类如ultraedit(其他亦可),一个16进制十进制等转化器(无需手算,知道了具
* B( q% W+ t! Q体如何做,不必人手做!!让我想起来一个爱因斯坦的典故:大致意思,一个人问爱因斯坦有个著名的桥多长,爱因斯坦说不知道,可以查书问某个海有多宽,还是不知道可以查书,最后那人说什么都不知道,为什么你那么牛,你脑子里装的什么,爱因斯坦说我只思考和记忆书本上没有的东西,跑题ing)% G1 ], k- s& s4 |3 q
其实,以后必须要看6502大奥秘这个东东,但是直接看很烦,我也是先看教程,在看6502大奥秘的。: x1 S, G2 n( V8 a( c4 A$ R
这个实践应该将菜鸟的本人所有的心得,错误均写出来,但是由于最开始的所谓的入门,先找一个最简
- A- g* a/ Q7 _4 z
* u5 O, o" p+ E, g: M( c0 u9 ^2 S: u
/ J5 w" \1 H3 J" h, z* P0 R
8 g2 E) ?" R* X5 g  T3 C0 q单开始hack。就是赌场内的物品价格
! R. @, m( Z8 U' P- s. N% g4 S) _
点击后发现正确,, E' H! L& @  P7 G( z* w$ c
# N" }' Q/ o! v) i# r
% o- `2 G6 G/ e2 [! @! i5 A

' P) K0 b/ X) D5 S1 o* H! p进入实践,首先我们要设置断点,用vnes(virtuanes简写,那个模拟器简写为fceu,下同)) }# d- A1 @5 x, c; {/ X. n# V
通过查询或是ec码,知道要在62ad上设置断点,先存个即时存档以便追踪过程反复读档首先vnes点开ram
) ^1 ?7 A5 N7 }5 l2 `* M4 L0 i6 P. E
及debug,注释内出现 如图填入

签到天数: 31 天

[LV.5]常住居民I

 楼主| 发表于 2012-11-25 11:09:42 | 显示全部楼层
我们接着追踪地址$fe(之所以追踪$fe而不是$fd,因为可能$FD也被其他过程调用,而$fe要在调用$fd# c4 \' u! ~5 O1 j/ E( A7 f5 w
的基础上,所使用的数值必须是对于255才可能调用,避免了麻烦。),点击运行,读原来的档,注释内) K" f" |& `* S2 x) h7 W3 ~, T3 n
出现填入[00fe]=a=0x3c(意思为将寄存器a的值3c赋给地址$fe,图如下444444444444444444,我们发现又
' D- o% G+ i! t4 [4 G6 C要追踪$01.别忙,我们发现就在前几个指令上有给$01赋值的语句,而且值也是503c,该句为lda b34f,x 就是说将$b34f偏移x(寄存器)后,去该地址值赋给寄存器a。其实一般说来,追踪地址到
- |! l6 t7 s" n4 P8000-bfff内,就可以hack rom了(这一点在fceu很明显),在memoryview找到$b34f,之后,左右看看
0 W/ I' M9 L9 D7 g2 w(其实知道x寄存器就可以了,不过免了,比较容易看到),将其改个数测试一下,成功。[img][/img]
9 `4 l5 X% E8 }" z& I) v9 N
% Y: ^* c9 o$ \0 j& n我们记下来pc值以便后面使用。
! A: k) q4 p) @下面我们在此查找4000的流星手镯,这次无需设置读写断点了,而是执行断点(fceu的术语),& n# S2 t* p2 |7 Y; ?
8 m8 s5 @6 e8 {# o( b

) Q: T. i5 @! @/ u# `点击运行读档,后在图内pc填上a484,同样的操作买4000的流星手镯,模拟器暂停,在
9 Y8 q8 T7 l: J& u6 J: K, S4 p' h& D+ H' `! C+ Y7 a* G
内存上,看见A00F(就是4000)和刚才的中间差了一个地址,再按照规律向前看,则出现C409(2500)
# G) R- U8 `! j$ n1 E( _# s8 Y3 p
等,我们改一下,4 I5 F" @6 C9 v8 _9 g

5 t( S4 i! g0 W( A# z& q$ |  D

签到天数: 31 天

[LV.5]常住居民I

 楼主| 发表于 2012-11-25 11:11:33 | 显示全部楼层
之后我们再次跟买东西的对话,发现修改成功(可能是我改错位置)嗯,修改成功,
9 J. O/ [" G3 V4 k2 Z. |7 R& ~0 p5 E2 x4 ]. F
之后我们用ue找到对应位置,发现有两处,想到dq4有许多版本,512k的,1024k的,这个是1024K的可能出现重复数据,
3 |/ S7 l3 o  C7 N' N7 n# D(最开头的是分别是5和d,相差8,基本确定为重复数据),对此,还可以用fceu修改。执行断点写入B333(前图中有),之所以不写a484,因为fceu会将a484那一段代码全部写出,即使被跳转而没有执行相关代码,在此处不方便查看。( j  v3 x# P. Z- `: ^
设置好后,找个东西买(由于没有fceu没调代币,只能买最便宜的)

签到天数: 31 天

[LV.5]常住居民I

 楼主| 发表于 2012-11-25 11:13:31 | 显示全部楼层
(试了试转帖工具,很好用)
7 J* b, S( E( E4 x; |暂停于此,十六进制编辑器,转到B3F4(应该是B34F,差不多,懒得再截图),之后,点击要改的位置,点击转到相应rom位置
8 I8 ^: z/ A3 }9 I8 Z
8 [; u. O6 ], N1 Q改一下数值,保存另一个rom(直接保存原文件,往往当机),- u! _9 M' j' z' h) e
关闭后重新执行,看一下效果
2 `: X1 T# Z- L" u终于改成了。以后我会将实践的普通物品的写下,应该会简略些,除了比较不一样的,会配图,其他只是写些追踪的地址及指令。普通物品,最开始着实难倒我了(因为没有转到好的追踪方法及没有耐心),连ue直接查找,15000的dragon killer用3a98和983a两种改都无效,没办法,慢慢跟踪找到了,(待续)1 U& X2 R, F$ m* ~* X3 h+ f; V

签到天数: 31 天

[LV.5]常住居民I

 楼主| 发表于 2012-11-25 11:27:48 | 显示全部楼层

huchuan

本帖最后由 sdiencelee 于 2012-11-29 17:03 编辑   V+ l1 _9 l% v/ |9 k% E8 @+ \
3 ^# w" e) g; ~7 r" d
第一楼不知道为什么文本有出入?4 P+ h+ U% D! E# @
8 W! |' b9 |* g0 e5 `& e! \

8 A  q$ A$ t% m不喜欢在加新楼,再次写入自己的。
8 {- X9 o7 |& P: ]! ]这是怪物数据的搜索,由于在百度贴吧说有没有一个一战1千经验的hack,正好适合我这个菜鸟练一下。搜索到每次战斗后的经验,$ c* ]8 Q  m$ E6 ~
' o$ p" @& u/ S0 Y5 W: S' @  x3 r
为地址$7203,对其追踪,发现,$7203会将每一次打死一个敌人的经验累加起来,本来想改一下那个累加的值,最后的语句改为赋给1000
! w8 L, R9 {- C0 k4 K& i) u. x  d) d  n7 [& N
的经验,多赋值几次也没关系,没想到出了错误.索性先追踪,怪物的经验值,以便找到怪物的其他信息,9 p5 k2 V5 Q% Z% l' P: T
想了半天,就是10050(4227)的metal babble符合要求,4 B, h5 p6 l" ^/ c: H) a
5 255 65 1023 150 10 10050     Gardenbur(5), Final Cave(5), Royal Crypt(5) (怪物信息)
) G: g' H% u2 p) E  }值比较大(255以内),2字节(上下看看可以更加确认所追踪非误),$ X5 X9 S8 Q& \
再次使用金手指ec码,72e4锁定为8会心一击,6E45敌人代码锁定为75,6E49敌人个数锁定为8,遇敌存档,3 n: z9 e0 n5 W- ~4 T* K) T$ f! M
设$7203为断点,最后追到$76,再追$77,vnes注释内写[0077]=a=0x27,没有停止,最后看了看 改为 [0077] 0x27,追踪到$20,6 v4 u6 G! C; P' b3 |$ Y$ a0 ^% P8 @: I
填[0020] 0x27,停止后,下移10行,如图,! Y' Z: I5 s$ O0 ~3 J* z
2 l! c3 g! U, X
发现ram内8A50,行与提供的数值符合,应该找到地址了.记住这个$C3FD为执行断点,以便找到将其他一
' |8 g3 J9 M4 y, U1 C7 Z; y6 b+ p' y0 {, Q7 a3 t6 O) r

& C2 k4 j/ c2 ~  ~4 o些敌人数据.
7 H, p* m$ S5 C" `) m又换回了工作单位,还得重新两边,下面,看看最开始的怪物,数据,用fceu设置$C3fd为执行断点.将敌人定代码00,个数8,有些异常,先想想,找找天幻的专门的东西。

签到天数: 31 天

[LV.5]常住居民I

 楼主| 发表于 2012-11-25 17:14:05 | 显示全部楼层
找dragon killer(屠龙),来到rosavillage,在即将买屠龙的地方存档,先将6157金钱地址作为断点,买入后停止在pc为86ca上,6157的值来自$00,由于一抬眼看到了3a(15000计算机表示为983a),在此将指令行上拉,以便看看有无98出现,为此先点停止刷新,在拉上去,看方框中内容,意思是将地址$72的之后3位减去地址$76的三位在赋给地址$72(后三位),可以追踪到$72是地址$6157赋值过来的(已经对此hack无用了),地址$76正是dragon killer价格,之后将其设为断点(图没注意被覆盖,补个图),1# @/ W9 B* M) T+ S
追踪到pc值为821a,数值来自地址$70,发现以后停止都在这个点,如此再次继续,写$70=a=0x3a,到8D58,来自$03C2,以后表示为(8D58:$03C2>),和(BAA9:$0001),经过点击执行后5条命令后暂停,排除出PC为8D58的可能,之后,再次追踪,用如上法排查后) v6 L" K' K% W
(A06F:$6E13>),5 p4 P& g5 j6 N
再次后,我们将金钱数改为14999,正好钱不够,停在此处,发现方框内语句为将$6E13的值加上 $01,x(使用寻址方式,可以无视)的值在赋给$6E13,而对于$01,和$6E13再次追踪,发现,均来自地址6E13,而且,前面的PC因为在(A06F左右),这样我们只能向上拉,最后看到,先停止刷新,其实我在原来过程中,是一步步追到此处得到的,(8bde:$8DE2,X>),之后找到对于ram附近,经确认那个8f对应为方框中地址,之后由于看见前面有3X aX(两位的头不是3a码),所以也就顺便将其改了,四位全部改为11,不知道会有什么效果.读档后,发现价格改成了,*****记住pc值为8bde,测试,读档后再次跟老板说话,哈哈,改成了,变成了17000,虽然不知道如何改对的反正是成了.
* k5 U$ {( ?5 G4 X2 h) h% ?现在我自然是稍微知道如何成的,其实,这段就是我最开始的hack过程,我早说过,我会本人在hack过程中的错误也会说出来.至于如何成的,请见后.其实,只要按照那个执行断点继续下去,也会慢慢明白的.待续

签到天数: 31 天

[LV.5]常住居民I

 楼主| 发表于 2012-11-25 17:16:53 | 显示全部楼层
为什么百度老出事、贴个这个图挡住,什么意思,

签到天数: 31 天

[LV.5]常住居民I

 楼主| 发表于 2012-11-26 07:24:06 | 显示全部楼层
之后,用fceu将对用的rom地址改过后,成功了." f5 G( F) |" \' G& b
我们也没有看到改了那么多数,dragon killer的几个有点类似我们预想的,我们再试试8000的睡觉剑(这次只改对应那一个地址),设置执行断点8bde,再次买东西时停止了(A=0x37?),为什么,先让他继续吧,去买8000的剑,有时候会该暂停的不停了,不知道为什么,反正将debug窗口,关闭在开启就可以了。在直行5条后。如图,方框内,中间的 AND #$7f什么意思,就是寄存器a和7F做逻辑运算"与",就是屏蔽a的最高位,即a取128的余数.D0就成为50,不管他,先填个数吧,写22吧,最后成了3400,对了原来改11的时候dragon killer为17000,似乎相似,好这次直接7500对应改11,也成了1700- E2 N+ |  z  r; E& ]/ Z3 x
# w4 D& V; B( z$ j. F% E

4 t0 w' N- \7 b" a6 O: P差不多明白了,一个地址对应一个价格,而且发现,17正好是11的十六进制,34正好是22的十六进制,至于为什么会加不定个数的零,我也不懂,这样,再想想开始那个37就是55,应该是5500的东西,为了验证这个想法,我们查一下物品的代码,查9 S* Z6 g5 m% Z
ec,: Q( }. b" k* o
曾木棒=8cb,0
, h1 u  G) P3 u' {% H3 J8 }$ |木棒=8cb,12 X; E8 L) x3 ~" u- G2 S% R
铜剑=8cb,2" _, f* T1 i9 E) Z" P  R/ [
铁爪=8cb,3) V4 u: i- Z1 @1 a1 ]
锁链镰刀=8cb,4
7 w) r! [* M* K1 c+ m; \1 a铁枪=8cb,55 K! r3 ]! [  A: H) g6 l
钢剑=8cb,6
3 w* L( A: f, G+ I战斧=8cb,7,
6 g" T6 Z% {; q6 U1 w) o
5 E' D; A  g4 c0 _( {
* ?  B: W% ^* m" ^! F  L之后我们找到一个城,买木杖,30的,正好1e,100的铜剑64,0f是15,对应1500的ironclaw,37,对应550的,58对应880,一下最起码武器走完都可以验证.行了,该上班了.

签到天数: 1112 天

[LV.10]以坛为家III

发表于 2012-11-26 10:55:34 | 显示全部楼层
这图片看的不爽啊,楼主。

签到天数: 31 天

[LV.5]常住居民I

 楼主| 发表于 2012-11-26 16:27:59 | 显示全部楼层
要是被百度给挡了,我也没办法,其他的,请提出应该在注明谢什么,反正我发的那个巧用变化次数找到吞食天地的控制隐藏物品是否被找到的文,以也是常常被挡。可恶的百度。http://bbs.emu618.com/forum.php? ... D328%26typeid%3D328

该用户从未签到

发表于 2012-11-26 18:24:38 | 显示全部楼层
论坛不是有附件功能吗
[发帖际遇]: 湘西小人物 发帖时在路边捡到 4 个 柠檬,偷偷放进了口袋. 幸运榜 / 衰神榜

签到天数: 31 天

[LV.5]常住居民I

 楼主| 发表于 2012-11-26 19:11:16 | 显示全部楼层
欧,试试吧
$ k6 z" V5 r; [5 [  f8 c, S0 zfile:///C:%5CUsers%5CADMINI%7E1%5CAppData%5CLocal%5CTemp%5Cmsohtml1%5C01%5Cclip_image002.jpg
( E/ U( m& ~# t& R# P' _- S0 t7 nfile:///C:%5CUsers%5CADMINI%7E1%5CAppData%5CLocal%5CTemp%5Cmsohtml1%5C01%5Cclip_image004.jpg' w0 B3 X6 X3 M$ \5 r7 x
file:///C:%5CUsers%5CADMINI%7E1%5CAppData%5CLocal%5CTemp%5Cmsohtml1%5C01%5Cclip_image006.jpg. f$ l* g" f6 q6 H' j" {
,看看成否,这是第一楼的三个图

签到天数: 31 天

[LV.5]常住居民I

 楼主| 发表于 2012-11-26 19:14:03 | 显示全部楼层
在此请问斑竹,到底附件在哪里,我用这里的word的黏贴也变成。

该用户从未签到

发表于 2012-11-26 22:30:28 | 显示全部楼层
sdiencelee 发表于 2012-11-26 19:14
* b* Z# J# a4 R2 u$ F* P在此请问斑竹,到底附件在哪里,我用这里的word的黏贴也变成。
. R- b2 @( s  p) ?" d
你查看下权限 ) j  \! \$ s* Q1 ?  f
设置 用户组
[发帖际遇]: 湘西小人物 在论坛发帖时没有注意,被小偷偷去了 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 31 天

[LV.5]常住居民I

 楼主| 发表于 2012-11-27 06:31:38 | 显示全部楼层
谢谢斑竹,在网上看到这里有许多hack的rom的教程或是帖子,也是刚学的一点点hack(不到两个月)
# ]$ g# A1 @+ I& f9 S# A所以,刚来、属于新人,权限低,没关系,我试试在其他的网页贴图吧。

点评

7500航班 http://www.6699.tv/kb/59740/ 罪恶之城2 http://www.6699.tv/dz/59718/  发表于 2013-2-20 18:42

签到天数: 31 天

[LV.5]常住居民I

 楼主| 发表于 2012-11-27 08:54:46 | 显示全部楼层
本帖最后由 sdiencelee 于 2012-11-29 17:33 编辑 9 Y- y5 a' B( G4 q. B

8 J) Q- i; W4 h  b' U4 ]$ W下面,我试试看看到底在后面加零的,成功与否,我也不知,开头说是实践,有错误就要如实写出来。若要暂时放弃此处也会写出来的。在原来我们可以基本确定a03几-a06几这段是在后面加零的,在vnes下,点击pc为??时暂停(执行断点,下同),点击执行后30条指令,之后发现30条不够,慢慢加到近100条,出现了$a065之后的$a067,就出现了18,01就是280的价格.而在a033之后,发现了a059的跳转.A046的跳转,没办法,直接看机器码或是6502的反编译器,暂时找不到6502反汇编器,没办法,先使用fceu的指令记录器(正好顺便教一下这个用法).如图,设置两个执行断点(原来不知道这样设置或是条件不允许如此设置,记录为文件时很大,除了editplus打开快点外,其他都很慢),这次用的120的wooden hat,这是记录出来的东西,我先自己研究研究.
3 ?, m, C. ~( D1 tFCEUX 2.1.6-interim svn2248 - 痕迹记录文件
$ z, M8 D2 ~+ E) k1 O$8BDE:BD E2 8D  LDA $8DE2,X @ $8E29 = #$0C A:47 X:47 Y:00 S:DC P:nvUBdIzc
; f8 G5 ?& d& x/ P, \1 U$8BE1:29 7F     AND #$7F                   A:0C X:47 Y:00 S:DC P:nvUBdIzc4 \" Z* w/ V, w  L$ z
$8BE3:AE 0F 6E  LDX $6E0F = #$00           A:0C X:47 Y:00 S:DC P:nvUBdIzc8 @( ?" Y9 C& U" }# V. Q
$8BE6:20 35 A0  JSR $A035                  A:0C X:00 Y:00 S:DC P:nvUBdIZc
7 q( s# j: @2 ^2 B) @5 R$A035:8D 11 6E  STA $6E11 = #$00           A:0C X:00 Y:00 S:DA P:nvUBdIZc
/ R& l( F/ y- F0 t, h$A038:A9 00     LDA #$00                   A:0C X:00 Y:00 S:DA P:nvUBdIZc  M  O: W2 C- Y0 l; ]5 W3 H& G
$A03A:8D 12 6E  STA $6E12 = #$78           A:00 X:00 Y:00 S:DA P:nvUBdIZc
1 z* t8 h! q% h7 u% ~$A03D:8D 13 6E  STA $6E13 = #$00           A:00 X:00 Y:00 S:DA P:nvUBdIZc
0 D6 J5 n2 r0 b( N$A040:8D 14 6E  STA $6E14 = #$00           A:00 X:00 Y:00 S:DA P:nvUBdIZc    //$6e11=a,$6e12-$5e14=0(初始化)
! P9 A' e0 [& H' w; Z: q; s+ ]$A043:4E 11 6E  LSR $6E11 = #$0C           A:00 X:00 Y:00 S:DA P:nvUBdIZc   //$6e11=$6e11/2
6 T4 d( f. t' I- ~& }2 h8 S8 m$A046:90 16     BCC $A05E                  A:00 X:00 Y:00 S:DA P:nvUBdIzc    //能除开则跳转16个地址即执行A05E,不行则继续执行A048; z7 S  L  h! f3 @
$A05E:16 00     ASL $00,X @ $0000 = #$0A   A:00 X:00 Y:00 S:DA P:nvUBdIzc; c4 T, s# p/ G! f
$A060:36 01     ROL $01,X @ $0001 = #$00   A:00 X:00 Y:00 S:DA P:nvUBdIzc
: Z4 y) \2 g3 f2 X* [& I; }$A062:AD 11 6E  LDA $6E11 = #$06           A:00 X:00 Y:00 S:DA P:nvUBdIZc0 A  j- k' K7 d
$A065:D0 DC     BNE $A043                  A:06 X:00 Y:00 S:DA P:nvUBdIzc& N  R. E* a& h! D! w' a
$A043:4E 11 6E  LSR $6E11 = #$06           A:06 X:00 Y:00 S:DA P:nvUBdIzc& Q! W$ t0 o, P5 R% \" A$ E
$A046:90 16     BCC $A05E                  A:06 X:00 Y:00 S:DA P:nvUBdIzc+ z2 K3 I- m! k6 i3 c4 q
$A05E:16 00     ASL $00,X @ $0000 = #$14   A:06 X:00 Y:00 S:DA P:nvUBdIzc2 T3 U6 k+ X/ T; R! O( g  {
$A060:36 01     ROL $01,X @ $0001 = #$00   A:06 X:00 Y:00 S:DA P:nvUBdIzc
% p# n  A0 v; _, e) h7 n  N$A062:AD 11 6E  LDA $6E11 = #$03           A:06 X:00 Y:00 S:DA P:nvUBdIZc# U' e% N; [, x5 h# |
$A065:D0 DC     BNE $A043                  A:03 X:00 Y:00 S:DA P:nvUBdIzc
& e0 v2 {) a% z* `% x% d. R6 S" @$A043:4E 11 6E  LSR $6E11 = #$03           A:03 X:00 Y:00 S:DA P:nvUBdIzc" @) {( ^, X- y  U) o
$A046:90 16     BCC $A05E                  A:03 X:00 Y:00 S:DA P:nvUBdIzC
3 M1 N. N$ _9 D. y! R' b$A048:B5 00     LDA $00,X @ $0000 = #$28   A:03 X:00 Y:00 S:DA P:nvUBdIzC
+ l4 u1 \- N' {1 Y8 w  n% [# k$A04A:18        CLC                        A:28 X:00 Y:00 S:DA P:nvUBdIzC# q6 o: n0 ?8 D/ e; N4 E( i
$A04B:6D 12 6E  ADC $6E12 = #$00           A:28 X:00 Y:00 S:DA P:nvUBdIzc
% Z+ u$ |  p. u8 K$A04E:8D 12 6E  STA $6E12 = #$00           A:28 X:00 Y:00 S:DA P:nvUBdIzc
6 g  X( C; Q( T' P2 H% P$A051:B5 01     LDA $01,X @ $0001 = #$00   A:28 X:00 Y:00 S:DA P:nvUBdIzc
/ n5 _  k( M5 F$ E. v( S: x; }/ l$A053:6D 13 6E  ADC $6E13 = #$00           A:00 X:00 Y:00 S:DA P:nvUBdIZc2 L; A% z8 O* A, ^
$A056:8D 13 6E  STA $6E13 = #$00           A:00 X:00 Y:00 S:DA P:nvUBdIZc/ R9 Z& F( J9 u+ T
$A059:90 03     BCC $A05E                  A:00 X:00 Y:00 S:DA P:nvUBdIZc
  B- |: I5 d( S8 k6 u$A05E:16 00     ASL $00,X @ $0000 = #$28   A:00 X:00 Y:00 S:DA P:nvUBdIZc  l# x6 I. ^3 X+ T, H; \  e
$A060:36 01     ROL $01,X @ $0001 = #$00   A:00 X:00 Y:00 S:DA P:nvUBdIzc7 [( }9 M2 B$ r8 o
$A062:AD 11 6E  LDA $6E11 = #$01           A:00 X:00 Y:00 S:DA P:nvUBdIZc% ]' i5 m" \, F% P
$A065:D0 DC     BNE $A043                  A:01 X:00 Y:00 S:DA P:nvUBdIzc- R- [$ \3 H( S) e
$A043:4E 11 6E  LSR $6E11 = #$01           A:01 X:00 Y:00 S:DA P:nvUBdIzc4 I1 F# h7 ^1 t0 E; l/ ~
$A046:90 16     BCC $A05E                  A:01 X:00 Y:00 S:DA P:nvUBdIZC
' c3 W/ n0 |3 r$A048:B5 00     LDA $00,X @ $0000 = #$50   A:01 X:00 Y:00 S:DA P:nvUBdIZC: ]! |$ H8 K9 I( S1 l# L5 A
$A04A:18        CLC                        A:50 X:00 Y:00 S:DA P:nvUBdIzC
+ N0 x, o5 Z# y$A04B:6D 12 6E  ADC $6E12 = #$28           A:50 X:00 Y:00 S:DA P:nvUBdIzc
6 i0 D4 h" @* z$A04E:8D 12 6E  STA $6E12 = #$28           A:78 X:00 Y:00 S:DA P:nvUBdIzc. Z! W& I2 ?/ a# x
$A051:B5 01     LDA $01,X @ $0001 = #$00   A:78 X:00 Y:00 S:DA P:nvUBdIzc7 S9 J& ]$ v, ~2 R" I3 s7 X
$A053:6D 13 6E  ADC $6E13 = #$00           A:00 X:00 Y:00 S:DA P:nvUBdIZc
! }1 F0 w8 ~5 `  @+ {- ^$A056:8D 13 6E  STA $6E13 = #$00           A:00 X:00 Y:00 S:DA P:nvUBdIZc0 a, B7 |/ y9 w+ Y4 D  Q3 ^" h
$A059:90 03     BCC $A05E                  A:00 X:00 Y:00 S:DA P:nvUBdIZc. G5 B, |/ E8 @; F% X% |
$A05E:16 00     ASL $00,X @ $0000 = #$50   A:00 X:00 Y:00 S:DA P:nvUBdIZc6 C. ^3 m- b8 a+ F
$A060:36 01     ROL $01,X @ $0001 = #$00   A:00 X:00 Y:00 S:DA P:NvUBdIzc
- c6 a- r5 f$ f& r6 _% l$A062:AD 11 6E  LDA $6E11 = #$00           A:00 X:00 Y:00 S:DA P:nvUBdIZc
: i1 c! K  X# m& b" D$A065:D0 DC     BNE $A043                  A:00 X:00 Y:00 S:DA P:nvUBdIZc
) w) C, e! t$ N) `其实呢,这段机器码很短($A035-$A065),即使对于菜鸟我来说,慢慢来可以一步步写出。即使没有6502的反汇编器(到必要时,才知道某些软件是干什么的,比如这个6502的反汇编器)无非就是慢慢查一下汇编指令的机器码.先慢慢读这段码吧/ Q9 U5 u' N1 k/ _. x3 g' s
【转到了我的qq空间发一下看看如何】
8 P! w! l4 Z7 Y# T4 `下面我试图解释一下,是菜鸟,出错了有相当大可能。# F# M) N1 i$ f0 G* b. v
8 _* L1 F- }- A2 n9 T
A043-A046:$6e11=$6e11/2,能除开则跳转16个地址即执行A05E,不行则继续
. {& l4 q8 F3 c( ]
7 r/ k& L9 Q, n7 b/ _% cA048,将$00的值(哪里来的?),赋给寄存器a
3 D& ?$ c" `  U! Y$ c1 E. V$ }A04A -A056 清位- k" P; }3 r0 q! w0 R: Y" d

签到天数: 31 天

[LV.5]常住居民I

 楼主| 发表于 2012-11-27 16:05:44 | 显示全部楼层
本帖最后由 sdiencelee 于 2012-11-28 20:44 编辑
2 n: E5 F5 s. `. W+ h5 @' c" s1 Q" j: V+ m
我要气死了,qq也在搞这些,都是我自己截出来的图呀。
+ d2 S; l6 Z* B- m1 b! N不喜欢在发帖(上新楼),直接编辑,这也可以保证以后一楼专门一个主题(入经验,怪物)这回先试验一下改改卖出价格,用15000的dragonkiller卖出,慢慢的搜索到断点,将B36b,和B4B8设置两个执行断点(已经看出B36b之前耳朵值为原价,后面的以后为卖出价经过折旧率后),得到一些代码,其中最重要的后面几句% ^/ p/ \1 {1 T  w6 O
…………- z& f: [! |3 d% u% @# N6 i
$B4A5:A5 00     LDA $0000 = #$B4           A:00 X:00 Y:00 S:DE P:nvUBdIZC& @6 J' y7 m1 x% y
$B4A7:38        SEC                        A:B4 X:00 Y:00 S:DE P:NvUBdIzC
  X3 d) X! O- V8 a7 g; _. F7 F4 J! G$B4A8:E5 03     SBC $0003 = #$2D           A:B4 X:00 Y:00 S:DE P:NvUBdIzC
0 Y: W! X- Y4 Q$B4AA:85 00     STA $0000 = #$B4           A:87 X:00 Y:00 S:DE P:NvUBdIzC
0 c) w7 h+ Z( U* Y2 O$B4AC:A5 01     LDA $0001 = #$00           A:87 X:00 Y:00 S:DE P:NvUBdIzC( w" U3 ~, l' g7 w4 u  t
$B4AE:E5 04     SBC $0004 = #$00           A:00 X:00 Y:00 S:DE P:nvUBdIZC0 l/ x, z& x( c/ G; U* C* K9 Q
$B4B0:85 01     STA $0001 = #$00           A:00 X:00 Y:00 S:DE P:nvUBdIZC
, P4 Y+ ^! n$ A8 `, R& @$B4B2:A5 02     LDA $0002 = #$00           A:00 X:00 Y:00 S:DE P:nvUBdIZC' z! a- x3 l2 a0 P( Y( ]
$B4B4:E5 05     SBC $0005 = #$00           A:00 X:00 Y:00 S:DE P:nvUBdIZC
$ P8 {" a3 L; P2 R$B4B6:85 02     STA $0002 = #$00           A:00 X:00 Y:00 S:DE P:nvUBdIZC# m" W% `, o! D7 Y6 _
买了180(b4)的铠甲,应该是卖价是135(B4-2d),改成了B4+2d,就可以了(因为直接改成sbc #$00会有些出错的可能,上次在百度的勇者斗恶龙说到一个1战一千经验的,方法是,7203每次战斗所得到的经验,具体是被打死一个敌人,加上个敌人的经验值再付给7203,结果我想,竟然这可以这样,直接在没打死一个敌人设置断点设成1000的经验,反正打死一个敌人,就直接$7203=#1000,也没事的,结果挂机),将对应位置sec(减法准备)改成clc(加法准备) 38>18,后面的3个E5>65(sbc改为adc).哈哈,还行.现在看出来标志位 P寄存器,字母大写为该字母1,小写为0.+ f1 w4 n7 P9 C) ]4 C# L
以后就是买入四,卖出5,而且人家主动卖的,我可没有逼他,黑社会高利贷就是如此炼成的。{:4_104:} ,反正稍微侧测了下,没事,

签到天数: 125 天

[LV.7]常住居民III

发表于 2012-11-27 19:33:59 | 显示全部楼层
{:4_97:}加油!!
[发帖际遇]: zeng_k 在论坛发帖时没有注意,被小偷偷去了 5 个 柠檬. 幸运榜 / 衰神榜

签到天数: 31 天

[LV.5]常住居民I

 楼主| 发表于 2012-11-30 14:27:59 | 显示全部楼层
现在总结一些技巧搜索技巧,本人还没有自己写代码,毕竟是菜鸟,只是针对追踪过程自己的心得写一下。更像是技巧,而不是技术的过硬。9 c" q3 ~( `) t! }# X
1.当然是存档位置要尽可能的与想要追踪的东西,接近,这样可以减少不必要的过程,提高追踪效率。
4 d* ?+ w& p4 s2.在限制数值为多少时,会使用vnes,而非fceu,因为看到fceu的后面注释语句都加个@,说明在at什么条件下的,而我们所做都是需要语句执行后的状态,所以往往会使用vnes 用最常用的方式[????]=a=0x??(有时候需要将a去掉,写成[????] =0x??,而选择突破口则往往使用1个字节以上的,因为方便上下查看另外一位的(前或是后一位),以便马上判断是否被误追踪.并且,往往再次追踪选择后一位即高一位进行追踪,因为我碰到的都是,很多的地址追踪过程中全是使用一个固定地址,挪后一位也可以提高效率.
' `! R% d1 J. K+ j; c0 U" D+ D) J3.选择突破口是,往往要数值比较大的,因为追踪基本都是直接追进零页地址这个变化频率超快的地方,往往就可以出现断点的非预想型跳出,即使在限制条件为某地址为某数时(由于数较小,所以要限制数要大)
! `) r3 Q' C( b& E* W, d& P4.可以用执行断点时最好使用执行断点.6 ]  K8 Y8 e6 ~& n' t, [
以上是我在搜索过程中的心得,可能是老在hack数据量大的rpg游戏,所以,往往时常要调用常用公式,如加减法,所以才会追踪过程中常会将数据传输到零页地址用特定的子程序进行操作.# X# X5 l  G  G/ c" M7 d6 m4 z
就是这些所总结,毕竟本人是菜鸟的.以后有了慢慢在此楼继续写

签到天数: 31 天

[LV.5]常住居民I

 楼主| 发表于 2012-11-30 10:49:58 | 显示全部楼层
由于消耗的Mp值,很小,过程中常会出现非预定性地址出现,而且跳出频率,往往很快,无暇按a键,所以,必要时使用了手柄状态
+ c3 M% @4 R" E) {7 J* ~7 i' K- R1 ^
地址$14锁定为1的方法,起到强制按a键的作用(具体如何快速的找到这个地址可以参见????的第几楼),为此选择消耗mp最多healusall
, m* D. r7 B- |: v6 n
* `- `, U0 |7 I+ g( F0 O4 F# A3 k作为突破口.7 C  r* ~; ]  o! R+ a! M
安排公主alena和勇者(以便速度快的公主先出手后,勇者再出手,抓住时机此时存档),,打仗后存档,[6004]为断点,来自$76,接着写入
$ y1 u. C7 S6 V& D! f& i
0 c7 G# g. v/ B( R" {[0076]=a=0x24继续,出现了(821e:$6f>),在此则有(8152:$78>),(810d(由c3A6转0023再转):$20>),(a2f5:pla),无奈只能再试一个其# u8 D9 Z) D# Y/ h+ h# e6 r

1 w9 f. h6 g0 Z4 Y( l他消耗MP的魔法,来去掉一些.断点写[006f]=a=0xc,发现果然如预料的由于数小,断点非要求跳出,只能将0014锁定为1.排除了8152.由
( t2 K- l; d! z& U3 e$ v
: d% D2 ^* r; V/ n5 J9 n% f于A2f5的pla暂时找不到在哪,先以此为准,若是对(810d:$20>)改对了,就无需了.再次,则,用healusall,写入[0020]=a=0x24,这回没有" x" g2 S8 y2 m6 r; R7 R

2 V1 K: F- g) n% i8 [) `7 m0 w9 |到战斗状态就停了,对了可能是在判断主角的mp值够不够用,为什么我没有想到呢?记住[0020]=a=0x24这个断点,将其消耗到比较小,直0 W; c& b" u% ^! H' m

" P2 @/ W; g/ }接金手指写入6004赋值1,将公主退下,只是主角一人在马车外,在光标停在healusall的地方,存档,(c3aa(由B92b转来):$BA4E,X>),
* y/ K; S; r+ X. Y
8 U+ }8 G1 q3 C6 d$ ^. W8 R5 N% R(C40D:$02>),(c38d:$20>)[因为又回到了$20,排除],再次使用vivify,看看能否排除(A3aa:6E10 abd #$1f>),(c40d:$02>),先追. V$ @. g) R2 o; R  V0 l  t
, z" W9 Q8 n; s/ f) r
$BA4E,记录执行读那点C92B(以便用fceu),注意x=19,找到BA67,改为1,之后消耗为Mp0后,不能使用,证明改内存成功,试试改rom,用: p7 A- P# C. k& D$ |: ?  w/ h
' ~- D# M( l! _: Z! c( p
fceu,消耗MP到小于36,发现很难停住,直接ue将2个东西替换,成功只消耗一个mp,healusall。如此,没完,因为是菜鸟,先要整理一下思路。未完,待完善!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-11-19 12:12 , Processed in 1.078125 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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