2015-03-15 | 来源:互联网 | 小编:admin | 人看过
开始之前先说几句废话
第一,HACK之前先了解一下6502汇编指令,NES相关资料里有指令集说明文档,如果你看不懂英文的话就下载《6502汇编大奥秘》,里面有指令中文说明........^_^
个人建议:没必要把6502全部汇编指令硬背下来再跟踪调试,那样会很累,你可以一边调试一边查询指令说明.......
第二,还需要准备一些工具:NES调试跟踪工具(VirtualNes Debugger版或者no$nes-w、FCEUXD SP等NES调试跟踪工具)、十六进制之类编辑工具(Winhex或者UltraEdit32)
第三,了解修改步骤:
1、首先要确定你要修改什么。连要修改什么都不知道,那怎能谈上修改呢。
2、获取作弊码,换句话说就是要获得要修改数据的地址。推荐使用EC,这个软件自带作弊码和跟踪修改功能。
3、获得指令代码及其在Rom中的地址。一般通过VirtualNes Debugger版或者no$nes-w、FCEUXD SP等NES调试跟踪工具,再配合内存查看和十六进制之编辑工具确定指令以数据方式储存在Rom中的哪个地址。
4、修改相应指令或数据。一般来说要做尽量少的修改,而且不能让程序运行出错。
5、测试游戏运行情况,看游戏能不能按照你修改目的正常运行。
第四,偶以日版《赤影战士》和VirtualNes Debugger版来为例子教大家如何HACK:
偶需要修改的数据:暗器数不减,放雷电必杀不减血,被敌人攻击不减血,一开始拥有99颗暗器雷
1、获取作弊码,这个好容易得到,EC这个软件附带N多作弊码,省去自已手工查找作弊码了。^_^
[P1 生命值]
ON=6F0,10
[P1 暗器数量]
ON=662,FF
[P1 武器种类]
刀=6B2,0
ON=6B2,3
[P1 武器威力]
ON=680,FF
[P1 暗器种类]
标=671,0
雷=671,1
[P1 隐身]
OFF=0000,0
ON=601,4C
[P2 生命值]
ON=6F4,10
[P2 暗器数量]
ON=666,FF
[P2 武器种类]
刀=6B6,0
ON=6B6,3
[P2 武器威力]
ON=684,FF
[P2 暗器种类]
标=675,0
雷=675,1
[P2 隐身]
OFF=0000,0
ON=605,4C
[GameInfo]
Name=Shadow of the Ninja (FC/NES)
System=FC
Text=赤影战士(水上魂斗罗),双人、动作游戏,由大胖子提供!
2、通过调试跟踪获取指令代码及其在Rom中的地址,并用16进制编辑工具修改ROM其中数据
偶按照暗器数不减,放雷电必杀不减血,被敌人攻击不减血,一开始拥有99颗暗器雷顺序来教大家如何跟踪调试修改:
(1)暗器不减:
首先打开VirtualNes Debugger并加载赤影战士日版ROM,如图1:
接下来游戏进行到获到暗器飞镖20个,如图2:
接下来开始跟踪飞镖数量,先打开RAM,再打开DEBUG,先打开DEBUG的话,不然RAM就用不来:如图3、图4:
先点暂停,根据如下面作弊码提供的暗器数量地址,如暗器数量地址是662,就在注释内出现后面方框中输入[0662](注:可以用这东东当条件断点),再点右边确定让游戏继续运行,如图5:
[P1 暗器数量]
ON=662,FF
使用一次飞镖,程序会发生中断停在B840这一行,如图6:
B840 : DE 6206 DEC $0662,X;[0662]-- =0x13
查指令表得知B840这个地址DEC $0662,X指令作用是将0662+(X)=真正暗器地址的数值减1;既然这样,只要把这条DEC $0662,X指令改为LDA $0662,X就可以让暗器数量不减了。LDA $0662,X作用是把0662+(X)=真正暗器地址的数值读入寄存器A。(X)是寄存器X的数值。
举个例子:假设X寄存器数值是6,指令是“LDA $1234,X” 这条指令看上是将$1234地址数值读入寄存器A,但实际上$1234不是真正数值存放地址,1234必须加上寄存器X的数值才是真正数值存放的地址。1234+(X=6)=123A,LDA $1234,X指令应该是这样解释:将1234+(X=6)=123A地址读入寄存器A。
LDA xxxx,Y和LDA xxxx,X一样,不过寄存器X变成寄存器Y。
查指令机器码得知DE是DEC - Absolute,X,BD是LDA - Absolute,X,注意寻区方式要一样....把DE修改为BD就可以不减暗器数量了。
注意:别把BD修改成其他LDA指令,这样会死机的,因为指令寻区方式不一样。
另外,有一些其他游戏是这样的:改为LDA $XXXX,X 那么就会破坏了寄存器A原来的数据了,后面的程序如果要直接用寄存器A的数值的话,那么就会造成游戏出错,如果后面的程序在用寄存器A的数值之前对寄存器A赋于新值就没事了。
接下来在RAM中找到B840:DE 62 06,如图7:
用笔纸抄下红框中数据,以便在查找,接得在RAM中把DE修改BD,如图8:
关闭DEBUG和RAM,回到游戏中测试吓暗器数量是否不减,暗器不减了,说明指令修改成功。如图9:
关闭模拟器,接下来用十六进制修改工具(如UltraEdit32)修改ROM,还记得之前用纸笔抄下的数据么?
打开UltraEdit32,载入赤影战士ROM,编辑之前按一下Insert把插入方式设为覆盖方式,如图10:
点击UltraEdit32“搜索”>“查找”,在弹出查找框中查找内容(N)后面方框中输入你用纸笔抄下的数据,再点“查找下一个”就能找到这个数据,如图11:
如图12,
结果出来,UltraEdit32高亮度显示你就是要找的数据,把DE修改为BD,再点“文件”>“保存”保存你修改结果。如图13:
关闭UltraEdit32打开模拟器载入修改后的ROM测试暗器数量是否不减,不减的话说明修改成功了,如图14:
暗器雷数量不减修改方法和暗器飞镖数量不减修改方法一样。就不再说了,留给大家练习一下。