首页
社区
课程
招聘
[原创]FC机之超级玛丽简单逆向分析
发表于: 2013-7-16 22:12 25012

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

2013-7-16 22:12
25012
最近无聊,用模拟器玩了几局超级玛丽。顺便分析一下。
经典的红白机的超级玛丽,相信大家都玩过。
程序是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点吧,想分析的可以继续分析下。


[课程]Linux pwn 探索篇!

上传的附件:
收藏
免费 5
支持
分享
最新回复 (34)
雪    币: 278
活跃值: (709)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
2
标记,学习!!!!!!
2013-7-16 22:20
0
雪    币: 137
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
好邪恶的东东
2013-7-16 22:32
0
雪    币: 12
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
这个很好,膜拜楼主一下
2013-7-16 23:04
0
雪    币: 258
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
这是kanxuer喜闻乐见的探索解决新问题的好帖,顶了
2013-7-16 23:08
0
雪    币: 470
活跃值: (662)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
用牛刀杀鸡!
2013-7-17 06:46
0
雪    币: 305
活跃值: (61)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
马克刘明
2013-7-17 06:51
0
雪    币: 1233
活跃值: (907)
能力值: ( LV12,RANK:750 )
在线值:
发帖
回帖
粉丝
8
我靠,可惜我已经过了玩这游戏的年龄了,fuck
2013-7-17 08:04
0
雪    币: 437
活跃值: (78)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
楼主,这也太经典了
2013-7-17 08:26
0
雪    币: 221
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
3-1加无数命有bug 加多了 之后只要死一次就game over 印象中~
2013-7-17 08:37
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
mark! !!!!!!
2013-7-17 08:47
0
雪    币: 71
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
感谢共享

3q
2013-7-17 09:09
0
雪    币: 547
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
感谢啊,我也一直在玩。。。
2013-7-17 09:30
0
雪    币: 297
活跃值: (235)
能力值: ( LV4,RANK:55 )
在线值:
发帖
回帖
粉丝
14
加个精好难
2013-7-17 09:45
0
雪    币: 198
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
这个也可以破,楼主好有才。回去了也试一下
2013-7-17 11:28
0
雪    币: 535
活跃值: (245)
能力值: ( LV12,RANK:400 )
在线值:
发帖
回帖
粉丝
16
学习了, 多谢分享
2013-7-17 12:01
0
雪    币: 102
活跃值: (457)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
这个好     呀
2013-7-17 12:11
0
雪    币: 1689
活跃值: (379)
能力值: ( LV15,RANK:440 )
在线值:
发帖
回帖
粉丝
18
改内存数据,还可以跳关,在正常的关里游泳,无敌不限时……挺有意思的。
2013-7-17 15:19
0
雪    币: 155
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
十年前逆向过(当时是为了移植到其它平台,需要完全理解所有的逻辑)

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

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

看懂一个几十行汇编的函数都要半天,当然那时候没用过IDA这么高级的工具,都是在DEBUGGER里看
2013-7-17 15:36
0
雪    币: 1411
活跃值: (692)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
虽不明但觉厉,虽不晓但觉吊
2013-7-17 16:00
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
Mark,有空再看~~
2013-7-17 17:45
0
雪    币: 716
活跃值: (162)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
22
希望看看杀鸡刀
2013-7-17 21:37
0
雪    币: 229
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
原来可以用IDa分析nes游戏的啊
2013-7-17 22:19
0
雪    币: 27
活跃值: (90)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
24
3-1关的加无数命,不懂是什么意思
2013-7-17 22:44
0
雪    币: 218
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
25
今晚刚成为正式会员,来学习楼主的作品
2013-7-18 00:42
0
游客
登录 | 注册 方可回帖
返回
//