首页
论坛
专栏
课程

[调试逆向] [原创]FC机之超级玛丽简单逆向分析

2013-7-16 22:12 18424
光刃
3

[调试逆向] [原创]FC机之超级玛丽简单逆向分析

2013-7-16 22:12
18424
最近无聊,用模拟器玩了几局超级玛丽。顺便分析一下。
经典的红白机的超级玛丽,相信大家都玩过。
程序是NES文件格式的,网上找了一些资料并且做了一些整理:

开始地址  用途       结束地址
$0000   2K字节RAM,做4次镜象(即$0000-$07FF可用)  $1FFF
$2000   寄存器       $2007
$2008   寄存器($2000-$2008的镜像,每8个字节镜像一次)  $3FFF
$4000   寄存器       $401F
$4020   扩展ROM       $5FFF
$6000   卡带的SRAM(需要有电池支持)    $7FFF
$8000   卡带的下层ROM      $BFFF
$C000   卡带的上层ROM      $FFFF

6502CPU介绍
一 CPU寄存器
累加器 A(8 bit)                    类似于EAX        
变址寄存器 X ,Y (8 )                         类似于ESI,EDI
堆栈指针寄存器 S ( 8) 100H-1FFH    类似于ESP
程序计数PC(16)                  类似于EIP   
标志寄存器 P(8)                               类似于ELF
            
二 CPU指令

6502                     X86            
lda #$04              mov al,04h
lda  $04               mov al,[04h]
jmp($4000)           mov eax ,[4000]           
                             jmp eax   
      
TAX                      MOV X,A
TXA                      MOVA,X                    
TAY                      MOV Y,A
TYA                      MOV A,Y                        
TSX                      MOV X,S
TXS                      MOX S,X
PHP                     push p
PLA                     pop  a
PLP                     pop  p
lda  内存单元  ;mov  a,内存单元
ldx  内存单元  ;mov x,内存单元
ldy  内存单元  ;mov y,内存单元
sta  内存单元  ;mov 内存单元,a
stx  内存单元  ;mov 内存单元, x
sty  内存单元  ;mov 内存单元,y
adc  操作数   ;and a,操作数
sbc  操作数   ;sub a,操作数
inx                 ;inc x
iny                 ;inc y
dex                ;dec,x
dey                ;dec,y

and  操作数          and  a,操作数
eor  操作数           xor  a,操作数
ora  操作数            or   a,操作数

cmp 操作数         cmp a,操作数
cpx 操作数         cmp x,操作数
cmy 操作数         cmp y,操作数

rts                          retn
brk                          int
JSR                        call

nop机器码 0EAH

分析PE程序需要用到OD;,分析NES也要相应的调试器,这里我用到的是VirtuaNES
静态分析,当然还是IDA了;

--------------------------------
开始分析:
游戏,命是最重要的。喜欢超级玛丽的人都知道3-1关的加无数命,原理就是连续踩坏蛋,100;200;400;800;。。。。。。8000;1命;
那么怎么实现这个命的功能呢?
我的思路是达到每踩一次坏带就加一次命的效果。
;D9DA(59EA)----AD10EAEAEAEA


图1

除了生命,什么最重要呢?那就是时间了 这次来个时间无限
通过反复分析 发现B74F为时间递减函数,直接nop掉就可以了。想分析的童鞋可以分析分析


图2


图3

这样 时间就不递减了,可以痛快的玩了。

我就分析这2点吧,想分析的可以继续分析下。



[推荐]看雪企服平台,提供安全分析、定制项目开发、APP等级保护、渗透测试等安全服务!

上传的附件:
上一主题 下一主题
最新回复 (34)
邓韬 9 2013-7-16 22:20
2
0
标记,学习!!!!!!
小林先生 2013-7-16 22:32
3
0
好邪恶的东东
safeboy 2013-7-16 23:04
4
0
这个很好,膜拜楼主一下
lhjjx 2013-7-16 23:08
5
0
这是kanxuer喜闻乐见的探索解决新问题的好帖,顶了
zoomlp 2013-7-17 06:46
6
0
用牛刀杀鸡!
Captains 2013-7-17 06:51
7
0
马克刘明
boywhp 12 2013-7-17 08:04
8
0
我靠,可惜我已经过了玩这游戏的年龄了,fuck
zyicai 2013-7-17 08:26
9
0
楼主,这也太经典了
水晶蜗牛 2013-7-17 08:37
10
0
3-1加无数命有bug 加多了 之后只要死一次就game over 印象中~
lxmls 2013-7-17 08:47
11
0
mark! !!!!!!
mumaren 2013-7-17 09:09
12
0
感谢共享

3q
litintin 2013-7-17 09:30
13
0
感谢啊,我也一直在玩。。。
evilor 2013-7-17 09:45
14
0
加个精好难
dingk 2013-7-17 11:28
15
0
这个也可以破,楼主好有才。回去了也试一下
thisIs 9 2013-7-17 12:01
16
0
学习了, 多谢分享
liucq 2013-7-17 12:11
17
0
这个好     呀
hackerlzc 10 2013-7-17 15:19
18
0
改内存数据,还可以跳关,在正常的关里游泳,无敌不限时……挺有意思的。
kman 2013-7-17 15:36
19
0
十年前逆向过(当时是为了移植到其它平台,需要完全理解所有的逻辑)

FC游戏里超级玛丽算是比较好逆向的(当然要全部理解那套不容易,有很多绘图技巧,FC机器的内部接口等,之前国内有本书研究得很透彻)

楼主可以逆向看看超时空要塞之类的大型游戏(超级玛丽算小型的,我记得好像就80KB,大型FC有的几百KB要分好几个BANK),那里面的汇编技巧之猥琐,为了节省一个字节而使用的大量猥琐汇编技术,是现在的汇编代码所远远无法想象的

看懂一个几十行汇编的函数都要半天,当然那时候没用过IDA这么高级的工具,都是在DEBUGGER里看
黑色舞曲 2013-7-17 16:00
20
0
虽不明但觉厉,虽不晓但觉吊
MONKEYiiD 2013-7-17 17:45
21
0
Mark,有空再看~~
elance 6 2013-7-17 21:37
22
0
希望看看杀鸡刀
转身 2013-7-17 22:19
23
0
原来可以用IDa分析nes游戏的啊
tihty 3 2013-7-17 22:44
24
0
3-1关的加无数命,不懂是什么意思
逍遥枷锁 2013-7-18 00:42
25
0
今晚刚成为正式会员,来学习楼主的作品
kman 2013-7-18 12:26
26
0
IDA很早就支持NES红白机使用的6502指令集了,包括增强的65C02指令集也是支持的。

https://www.hex-rays.com/products/ida/gallery/6502.shtml

IDA is the most powerful existing 6502 disassembler

所有支持的处理器:
https://www.hex-rays.com/products/ida/gallery/index.shtml
小龙程序 2013-7-18 23:00
27
0
支持!IDA国内基本没教程!!
lrjlrj 2013-7-19 09:20
28
0
楼主牛啊,学习了,举一反三,我看看其它的rom分析如何。
Fido 2013-7-19 10:46
29
0
回复支持一下..呵呵..楼主真心能折腾..膜拜哟..哈哈
Prolovecui 2013-7-19 16:29
30
0
这个最喜欢了,适合去探索一下的。
sword之名 2013-7-20 17:13
31
0
牛叉,这都行,真是无孔不入啊,,,,,楼主的发现让我多了一些玩的,立马下小游戏去
zhilinger 2013-7-21 13:56
32
0
“踩怪加命”的确很邪恶,要不加个限制,例如踩特定的怪?
wendax 2018-6-9 23:53
33
0
大神  实在是太详细了
wendax 2018-6-9 23:57
34
0
等等  ,ida怎么拖进去啊  我是二进制打开的    我打开没有东西
BlackJZero 2018-6-10 13:28
35
0
游客
登录 | 注册 方可回帖
返回