FC 游戏 炸.弹人续关码逆向.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
6502 FC游游戏戏 炸炸弹弹人人续续关关码码逆逆向向 4年前做的,现在有空整理一下发出来混个邀请码…. FC游戏-炸弹人1代, 信很多80后都玩过吧,我小时候挺喜欢玩的,游戏玩的不怎么样,但是对那个续关码很感兴趣,曾经记了20多 页纸试图找出其中的规律,只知道最后一位是校验位 -_-! 要想知道续关码的算法,首先要知道它的处理器,一搜才知道,原来NES用的是6502,这可是一款经典的CPU,Apple一代和二代都 是用的它,还有国产的文曲星…说到文曲星,当年(2003年)表哥送我一台文曲星(具体什么型号忘了),我上网查到可以用数据线升级 BASIC功能,就满泰安城找数据线去了,把跟我去的同学都逛烦了,最后也没有找到,不然也许能早入门个几年……:) 用到的资源: 炸炸弹弹人人ROM 文文件件 B mber Man (J).nes http ://www.r mnati /srv/r ms/284 11/nes/B mberman-J.html 6502 指指令令集集 http ://www.la gu.c m/la gubbs/shared wn.asp?id=270srv= 1 FCEU0.98.12.win (带Debug功能的NES模拟器)http ://mmm. /s ft 10/FCEU0.98.12.win.rar NESpackage (Ida 载入nes格式的插件) http ://bbs.pediy.c m/sh wthread.php?t= 125458 首先,我们把 NESpackage\nesdbg\bin\nes_stub.plw c py到ida 的 \l aders文件夹里面,这样Ida才能识别NES格式的文件,用Ida载入 B mber Man (J).nes 我们可以看到ida 已经识别出代码段和数据段了,下面要做的就是定位代码, 要定位代码,就要知道数据的存储地址,懒得去自己调试,最快的方法还是站在巨人的肩膀上…从网上搜了个炸弹人的金手指 ; 炸弹人1代金手指 #1 0068-01-09 生命无限 #1 0073-02-09C0 最强的雷 #1 0075-01-01 速度加快 #1 0076-04 免疫功能 #1 007D-02-0101 其他功能 #1 007A-01-01 无敌 #1 0058-01-4A 最终关 要注意的是续关码只保存了一部分数据 (例如,不保存剩余生命数),我知道0x75 (加速鞋子)是保存在续关码里面的 用FCEU载入游戏,玩到最后一条命的时候,打开调试窗口 当主角死了但是还没有出现续关码的屏幕前,切换到调试窗口,点击单步,先让游戏暂停下来,在0x75设内存读取断点,然后点击运行 可以看到,程序中断在 e31b 切换到ida ,看看e31b在干什么? E31b处的指令是 LDA ($34),Y 查询6502指令集 得知,这种寻址方式属于零页间接索引地址,内存34和35处放置着一个16位地址,把这个地址再加上Y寄存器的值作为有效地址,再把 有效地址指向的数据送到A寄存器中 我们看前面那条指令 JSR sub_E327 Jsr是6502 的call指令,我第一眼以为是像jmp一样不回来了呢 让我们到 子函数sub_E327 里面看看吧 原来地址在这里面,双击E334 ,来到这里 不好…ida把这里认作了代码…. 只好手动undefine ,一共20个16位地址 BYTE offset [20]={ 0x67 0x77 0xDD 0x61 0x99 0x66 0xDC 0x64 0x79 0x9A 0x74 0x63 0x75 0x62 0x9B 0x65 0x94 0xDE 0x76 0x95 }; 经过无数的模拟器调试,我们知道了各个内存对应的属性 typedef struct { BYTE score_1; //分数右1位 BYTE Remote_bomber; //遥控 BYTE stage_low; //关卡低4位 BYTE score_7; //分数右7位

文档评论(0)

wdjz + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档