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

本文分享了一次在HSCTF中遇到的涉及NDS逆向分析的挑战。通过静态分析和ida插件,识别代码位置,逐步解密三关游戏的过关策略,包括输入校验、点击图片数字和走迷宫。最终成功拿到flag,flag{cuteblueicecube_1-16-20-6-21-4-16-18_A-X-Y-B-R-L}。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为感觉网上整理好的相关资料比较少在这里分享给大家。

基本介绍

NDS:任天堂DS,是电玩游戏生产商任天堂公司2004年发售的第三代便携式游戏机。主要的特征包括了双屏幕显示,其中下方的屏幕为触摸屏;并配置有麦克风声音输入装置和 Wi-Fi 无线网络功能。这里题目提供了一个chall.nds的文件,一个nds的ROM文件,可以在pc上使用模拟器来加载运行,在这里我使用的是DeSmuME模拟器。

解题

观察题目大致功能

首先我们使用模拟器加载题目,可以看到是一个需要通过三关才能拿到flag的游戏。如下图所示

按下回车后进入第一关

[<img src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/a7b11c5ec55e4cf0b9b91a79181b8009~tplv-k3u1fbpfcp-zoom-in-crop-mark:4536:0:0:0.image)](https://link.juejin.cn/?target=https%3A%2F%2Fwww.oschina.net%2Faction%2FGoToLink%3Furl%3Dhttps%253A%252F%252Fp0.ssl.qhimg.com%252Ft01674b1d6be19325de.png "https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fp0.ssl.qhimg.com%2Ft01674b1d6be19325de.png"" style="margin: auto" />

可以看到是要输入数据才可以通过下一关。由于DeSmuME并不能下断进行调试,只能看反汇编和寄存器的值这里我们继续考虑静态分析。

静态分析准备

打开IDA发现并不能识别它的架构程序基址等等,这里我在github上搜到了一个nds的IDA loader插件github.com/EliseZeroTw…安装插件后即可识别代码。需要注意的是程序中有ARM7和ARM9的代码,如果只识别ARM7则不能在IDA中看到全部函数。插件会弹框告诉你。识别结果如下图。

[<img src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/b4c4f5d95d70441892835698058e1657~tplv-k3u1fbpfcp-zoom-in-crop-mark:4536:0:0:0.image)](https://link.juejin.cn/?target=https%3A%2F%2Fwww.oschina.net%2Faction%2FGoToLink%3Furl%3Dhttps%253A%252F%252Fp1.ssl.qhimg.com%252Ft01b6f33b8cf9bf98bf.png "https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fp1.ssl.qhimg.com%2Ft01b6f33b8cf9bf98bf.png"" style="margin: auto" />

可以看到识别出了很多的函数,那么下一步就是需要定位到,处理的代码在哪。这里我们可以通过静态分析或者观察DeSmuME运行时的pc寄存器的值来确定处理数据的代码位置。

定位处理代码位置

在进入第一关之后等待输入时,PC的值为2005B24我们在IDA找到这个位置,位于2005AD0这个函数中。猜测这个函数的功能就是获取输入,这里查看其引用发现上层函数只有一个,再查看上层引用如下图(注:其中的stage1 stage2 stage3是我后来改的函数名,原本的程序是没有符号表的)。

[<img src="

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值