前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DDCTF 2018 逆向 baby_mips Writeup

DDCTF 2018 逆向 baby_mips Writeup

作者头像
xfkxfk
发布2018-05-15 17:15:45
1.5K0
发布2018-05-15 17:15:45
举报

0x00 背景

最近一直在研究IoT设备的安全,而在IoT设备上程序很多都是MIPS架构的。所以对MIPS指令有一定研究,而在DDCTF 2018中刚好有一道逆向题目是MIPS程序,于是尝试做了一下。

0x01 环境搭建

由于我们通常的操作系统指令集都是x86的,所以无法跑MIPS程序。这时候就需要装QEMU来模拟,QEMU通过源码编译较为复杂,我们又没有特殊的需求,所以直接使用ubuntu的APT进行安装即可。

由于MIPS架构有两种——大端MIPS和小端MIPS。所以,我们需要确定这个程序是大端MIPS还是小端MIPS。

ELF 32-bit LSB很明显,这个程序是32位小端的MIPS。所以,我们使用qemu-mipsel baby_mips来运行这个程序。因为我们需要远程调试MIPS程序,所以要加上-g 端口参数,qemu-mipsel -g 1234 baby_mips,此时用IDA pro就可以通过Remote GDB Server来调试这个MIPS程序。

0x02 题目分析

直接打开IDA来载入程序,搜索字符串,可以看到

查找这个字符串的交叉引用,直接到sub_403238

可以看到一个简单的流程,程序根据loc_400420函数的返回结果来判断是否为正确的key。那么,到这里我们需要理解loc_400420具体干了什么。进入函数之后,代码比较乱而且还有很多无法识别的代码块。

这时候为了方便我们理解,就得来远程调试这个MIPS程序。随后,在虚拟机中使用QEMU启动该程序,使用IDA连接虚拟机的gdb服务,然后让程序跑起来。在输入完key后,程序会在这里崩溃掉。

当我们把这条指令以数据的形式展示后,发现指令为0xEB023DC5。而且我们发现,识别不出来的代码段。都有个特点,就是指令的头两个字节为\xEB\x02,且在x86指令集中\xEB为跳转指令。

我们把操作码反汇编成汇编代码后发现第一条指令是jmp 0x4,刚好MIPS指令集每条指令大小为4字节。

于是做出猜测,是不是程序让我们遇到这个指令就跳转四字节呢?然后我们把以\xEB\x02开头的指令全部替换为nop

替换好之后,我们再使用IDA载入程序,发现已经没有不能识别的代码段了。然后,为了方便我们了解key比对函数的功能,我们可以需要对MIPS进行反编译,目前可以反编译MIPS程序的工具有两个。

  • Retdec
  • JEB-mips

我们首先使用Retdec来反编译该程序

接着我们尝试使用JEB-mips来反编译改程序

可以很轻易的看出,这块其实就是一个16元1次方程组,我们写一个python脚本来解这个方程组。

结果如下

四舍五入后输入程序中,得到最终的flag如下

0x03 Refer

https://wenku.baidu.com/view/1908905f178884868762caaedd3383c4bb4cb469.html

https://blog.csdn.net/KoalaZB/article/details/52733910?locationNum=3

https://zhuanlan.zhihu.com/p/24893371

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-04-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 逢魔安全实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x00 背景
  • 0x01 环境搭建
  • 0x02 题目分析
  • 0x03 Refer
相关产品与服务
远程调试
远程调试(Remote Debugging,RD)在云端为用户提供上千台真实手机/定制机/模拟器设备,快速实现随时随地测试。运用云测技术对测试方式、操作体验进行了优化,具备多样性的测试能力,包括随时截图和记录调试日志,稳定的支持自动化测试, 设备灵活调度,用例高效执行, 快速定位产品功能和兼容性问题。云手机帮助应用、移动游戏快速发现和解决问题,节省百万硬件费用,加速敏捷研发流程。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档