B轮融资|今年的hsctf里遇到了一个比较少见的nds逆向题目,侥幸拿下一血

文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
因为感觉网上整理好的相关资料比较少在这里分享给大家 。
基本介绍NDS:任天堂DS , 是电玩游戏生产商任天堂公司2004年发售的第三代便携式游戏机 。 主要的特征包括了双屏幕显示 , 其中下方的屏幕为触摸屏;并配置有麦克风声音输入装置和 Wi-Fi 无线网络功能 。
这里题目提供了一个chall.nds的文件 , 一个nds的ROM文件可以在pc上使用模拟器来加载运行在这里我使用的是DeSmuME模拟器 。
解题观察题目大致功能首先我们使用模拟器加载题目可以看到是一个需要通过三关才能拿到flag的游戏 。 如下图所示
按下回车后进入第一关
可以看到是要输入数据才可以通过下一关 。 由于DeSmuME并不能下断进行调试 , 只能看反汇编和寄存器的值这里我们继续考虑静态分析 。
静态分析准备打开IDA发现并不能识别它的架构程序基址等等 , 这里我在github上搜到了一个nds的IDA loader插件
https://github.com/EliseZeroTwo/IDA-NDS
安装插件后即可识别代码 。 需要注意的是程序中有ARM7和ARM9的代码如果只识别ARM7则不能在IDA中看到全部函数 。 插件会弹框告诉你 。 识别结果如下图 。
可以看到识别出了很多的函数 , 那么下一步就是需要定位到处理的代码在哪 。
这里我们可以通过静态分析或者观察DeSmuME运行时的pc寄存器的值来确定处理数据的代码位置 。
定位处理代码位置在进入第一关之后等待输入时PC的值为2005B24我们在IDA找到这个位置位于2005AD0这个函数中 。 猜测这个函数的功能就是获取输入 , 这里查看其引用发现上层函数只有一个 , 再查看上层引用如下图(注:其中的stage1 stage2 stage3是我后来改的函数名原本的程序是没有符号表的) 。
我们挨个进入函数查看其功能 。 在我标记的stage1(0x2000D4C)中发现了这样一段代码 。
猜测这里是对我们输入数据的校验 。 也就是stage1的代码 。
再查找stage1的引用定位到函数0x2002e18如下图
猜测接下来的函数是stage2 stage3 后面验证果然如此
stage1观察函数执行流程确定了此处为比较位置
得到正确的输入cuteblueicecube
输入之后进入stage2
- 36氪首发|烹饪机器人公司「智谷天厨」获数千万元天使轮融资,羲融善道独家投资
- 有人觉得中暑就是热出来的,吃一些退烧药就好了,这种做法 蚂蚁庄园今日答案6月28日
- 浮甘瓜于清泉,沉朱李于寒水”描述的是什么场面 蚂蚁庄园今日答案6月28日
- 哪种水果横着切开像星星的形状 蚂蚁庄园今日答案6月29日
- 成年后,近视度数还会再加深吗 蚂蚁庄园今日答案6月29日
- 汽油|今日24时开启!油价或迎年内第2降 重回9元时代:加一箱将少花12.5元
- 疫情期间获近亿元A轮投资,青浦这家企业数字化服务商乘“长三角数字干线”发展快车逆势上扬
- 显示器|买到就是赚到?这台300块的显示器快把我整自闭了
- 马云|马云自己\打脸\之前所说的,如今现身西班牙,开12亿游艇!
- iPhone|美媒:iPhone15确认使用USB - C口,今年升级有遗憾!
