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

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

文章图片

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

文章图片

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

文章图片

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

文章图片

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

文章图片

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

文章图片

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

文章图片

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

文章图片

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

文章图片

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