MIPS逆向(一)
静态分析工具可以使用ghidra和IDA Pro,并且支持反编译。
动态调试使用qemu+gdb进行调试。
动态调试
1.环境搭建
安装gdb-multiarch和qemu:
sudo apt-get install qemu sudo apt-get install qemu-user-static sudo apt-get install qemu-system sudo apt-get install gdb-multiarch
QEMU的使用可以查看官方文档https://www.qemu.org/docs/master/user/main.html#features。
2.调试
使用gdb-multiarch
进行调试过程:
一端执行"chroot . ./qemu-mips-static -g 1234 ./usr/bin/httpd",将程序运行起来,-g 1234
的意思表示为监听端口1234,用于远程调试。
另一端使用"gdb-multiarch ./usr/bin/httpd",启动调试。
之后,我们需要设置CPU架构、大小端以及远程调试端口,如下:
set architecture mips #mips32大端,小端是mipsel target remote :1234 set endian little #如果前面报错再执行该命令,可能是大小端问题报错。小端little,大端big
基于qemu-system调试
使用qemu-system虚拟出一个虚拟机,然后将目标程序及相关目录和文件拷贝进去。在虚拟机中执行目标程序并调试。
qemu-system-mips -M malta -kernel Tools/vmlinux-3.2.0-4-4kc-malta -hda /home/lzl/Desktop/FirmAE/images/4.tar.gz -append "root=/dev/sda1 console=tty0" -net nic, -net tap,ifname=tap0,script=no,downscript=no -nographic
试着跑了一下报错,没细看了。具体可以参考SkYe231师傅的文章https://www.mrskye.cn/archives/6130b222/#qemu-%E8%99%9A%E6%8B%9F%E6%9C%BA%E6%A1%A5%E6%8E%A5%E7%BD%91%E7%BB%9C。
对于要下载 qemu 的镜像文件和内核文件,在https://people.debian.org/~aurel32/qemu/下载。
使用ida进行调试过程:
在虚拟机中也可以使用命令"qemu-mipsel -g 1234 -L /home/buildroot-2020.02.7/output/target/ ./httpd"
将程序运行起来,-L参数是指定动态库路径。然后,在ida中选择attach中的remote gdb debugger进行连接,要修改debug options -> set specific optionsz -> Processer中的架构为MIPS。IDA Pro 7.7用得挺舒服的。
使用FirmAE+gdbserver调试:
使用FirmAE虚拟出环境,-d提供的调试在无法正常通过调试的情况下,可以手动到/firmadye目录去执行gdbserver。
同样在环境外执行"gdb-multiarch ./httpd"。
在gdb-中执行:target remote 192.168.0.1:666,其他命令不变。
参考:
https://oneda1sy.gitee.io/2021/03/10/MIPS-Pwn-tools/
https://www.yk2er0.fun/2021/01/22/env/#mips-mipsel%E6%9E%B6%E6%9E%84
https://www.mrskye.cn/archives/6130b222/