吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 10491|回复: 63
收起左侧

[CTF] 记一次MIPS题目的逆向分析

  [复制链接]
Li1y 发表于 2020-9-17 13:59
本帖最后由 Li1y 于 2020-9-20 21:48 编辑

初步分析

题目链接
https://wws.lanzouj.com/i6Zo2gpbolc

2020HWS选拔赛的IOT逆向题目,内有3个文件

clip_image002.jpg

其中readme.txt内容如下:

题目运行命令如下:

sudo qemu-system-mipsel -M malta -hda openwrt-malta-le-root.ext4 -kernel openwrt-malta-le-vmlinux.elf -nographic -append "root=/dev/sda console=tty50"

需要分析的程序为 ./bin/maze

.ext4格式文件能直接解压缩,复制出/bin/maze,用file看一下文件格式

clip_image004.jpg

发现是小端mips,根据readme.txt的内容能直接模拟整个openwrt系统来运行,而且可以使用gdb调试,但是调试过程中遇到了很多问题,比如莫名其妙突然不能显示输入输出的字符等

因此考虑使用静态分析方式,那么有以下几个工具可以选择

  1. Ghidra

  2. IDA7.5

  3. JEB-MIPS

首先推荐IDA7.5,氪金才能变强,如果想白嫖最好还是选择JEB-MIPS

根据个人经验,JEB-MIPS的伪代码效果要优于Ghidra,在一些异或处理上Ghidra显示的伪代码会和汇编有歧义,使用者容易被误导

个人使用的JEB版本可在如下链接获取

[Android Tools] JEB 3.17.1 Anti-Covid19 Edition by DimitarSerg

https://www.52pojie.cn/thread-1162477-1-1.html

静态分析

根据题目maze也可以知道,这是一个CTF逆向题中典型的迷宫题

sub_400B44为主函数

首先限制了输入长度为32

clip_image006.jpg

其次在sub_4006F0()通过预置的字符串"AMz1nG~#--Ma7e~"得出迷宫布局,即.bss段中的maze数组

clip_image008.jpg

根据字符串的长度和循环次数可以判断出迷宫大小为8*15

我们可以根据伪代码还原出迷宫生成函数,从而打印出迷宫

clip_image010.jpg

剩下的就是判断,上下左右分别用UDLR代替,下图中以ASCII码显示

clip_image012.jpg

根据v1=1,v2=0可以判断起始点是(1,0),而要走32步,则只有如下图路径

clip_image013.png
结果为

DDRDDLDDRRRRRDRDDDDDLLDDLLLUUULU

动态分析

那么如果迷宫生成步骤再复杂一点,很难从伪代码分析还原出迷宫,就需要动态调试了。

而根据前文所述,无法使用openwrt自带的gdb调试,那么通过外接gdb是否可以呢

已知使用qemu可以直接模拟执行静态编译的程序,但是如何对题中这种动态编译,需要外部依赖的程序进行模拟执行呢?

经过查阅资料(https://www.colabug.com/2020/0824/7658729/),参考博主大佬对embedded_heap的调试过程,使用命令如下

qemu-mipsel -L ./ ./bin/maze

clip_image015.jpg

注意,根据博主大佬的过程,需要参照lib文件夹中的两个1kb文件内容,修改对应的so文件,不然会出现解析错误

clip_image017.jpg

解释的可能不是很清楚,直接举例吧,比如ld-musl-mipsel-sf.so.1其实并不是一个ELF格式的程序,用txt打开之后里面只有libc.so,因此删除旧的ld-musl-mipsel-sf.so.1并将libc.so命名为新的ld-musl-mipsel-sf.so.1

clip_image018.png

对libatomic.so.1的处理过程也一样,处理之后就可以愉快的动态调试了

因为要使用gdb调试,所以使用-g参数设置端口

qemu-mipsel -g 1234 -L ./ ./bin/maze

之后安装apt-get install gdb-multiarch,再使用如下命令启动gdb

gdb-multiarch -q ./bin/maze

设置架构和大小端序(默认小端)

set architecture mips

set endian little(本题为小端,可以不使用此命令)

最后远程连接调试端口,如在本地127.0.0.1可以省略不写

target remote :1234

本以为这样就结束了,可以愉快下断点了,但是下完断点执行gdb就崩了,换用pwngdb也是如此,过程如下图

clip_image020.jpg

问题暂时无解,希望知道原因的师傅能告诉我

因此选择使用IDA调试,虽然7.5以下的IDA不支持显示mips的伪代码,但是远程调试还是妥妥的,依旧是使用qemu-mipsel -g 1234 -L ./ ./bin/maze启动远程调试,ifconfig看一下虚拟机的ip,使用IDA打开maze文件,下断点后选择Remote GDB debugger运行

clip_image021.png
填写虚拟机ip和端口,其它参数默认点OK即可

clip_image023.jpg

如果断点下在了初始化迷宫布局结束之后,例如sub_400904处,运行至此处后找到.bss段的maze变量转化为数组即可看到迷宫全貌

clip_image025.jpg
此处还有一个坑点,使用IDA7.0的时候同样的流程看不到.bss段初始化后的结果,全是?

而换用7.2就可以了,泪目,果然氪金才能变强

不过论坛有7.2的版本,下载一个就OK

剩下的见静态调试分析

clip_image027.jpg

最后,求知道为什么gdb调试会崩掉的师傅解惑




【更新,换了Ubuntu就不会崩掉了,玄学。。。】

免费评分

参与人数 27威望 +2 吾爱币 +125 热心值 +23 收起 理由
Liture + 1 + 1 热心回复!
老板来包辣条 + 1 + 1 用心讨论,共获提升!
as494 + 1 + 1 热心回复!
onething + 1 + 1 热心回复!
dingting + 1 + 1 热心回复!
迷魂 + 1 + 1 谢谢@Thanks!
InsafeMacro + 1 + 1 用心讨论,共获提升!
N0exp + 1 + 1 我很赞同!
ycuvuuui1L + 1 + 1 用心讨论,共获提升!
不谙世事的骚年 + 1 + 1 热心回复!
volcanocan + 1 + 1 谢谢@Thanks!
独行风云 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
22222 + 1 热心回复!
gaosld + 1 + 1 热心回复!
poisonbcat + 1 + 1 谢谢@Thanks!
quandu + 1 + 1 支持楼主,支持MIPS,支持loongarch--
linrunqing521 + 1 谢谢@Thanks!
victos + 1 + 1 热心回复!
yixi + 1 + 1 谢谢@Thanks!
Hmily + 2 + 100 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
wuliwuli + 1 热心回复!
fengbolee + 1 + 1 用心讨论,共获提升!
lihaiyangya + 1 + 1 鼓励转贴优秀软件安全工具和文档!
楠宝 + 1 热心回复!
小哥9527 + 1 热心回复!
笙若 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
cui_boran + 1 + 1 热心回复!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| Li1y 发表于 2020-9-18 13:39
BXb 发表于 2020-9-18 10:15
lz,是不是还要安装qeum什么的啊。能指导一下嘛。

是,得装qemu,我的版本是最新版
apt-get install qemu
正在读取软件包列表... 完成
正在分析软件包的依赖关系树      
正在读取状态信息... 完成      
qemu 已经是最新版 (1:4.2-6)。
CHILAS_LEE 发表于 2020-10-21 22:40
MIPS逆向调试工具一直都有点麻烦,感谢楼主分享。IDA7.0我遇到过branch指令单步跟全都不会跳转,无论条件是否满足,并且这个时候查看不了栈这些信息,重启IDA才能恢复正常。
xmhwws 发表于 2020-9-17 14:58
 楼主| Li1y 发表于 2020-9-17 15:09

穷啊,哪里买得起,用的是泄露的7.2
mth123 发表于 2020-9-17 19:38
高手如云啊
Serenade 发表于 2020-9-17 20:47
支持大佬
hzqmwne 发表于 2020-9-17 23:05
过程很详细,学习了
无名哥哥126 发表于 2020-9-18 00:29
详细的教程,支持!
zhutou123 发表于 2020-9-18 01:05
学习一下
qq40078009 发表于 2020-9-18 08:22
过程很详细,学习了
BXb 发表于 2020-9-18 10:15
本帖最后由 BXb 于 2020-9-24 20:27 编辑

学习学习。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-23 20:19

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表