前言:
qemu的远程调试非常简单,开启-g参数绑定本地端口即可,只是其中IDA需要进行一定的设置才能调试mips架构的二进制文件,并暂停进程进行调试。(关于Linux中如何运行IDA以及搭建buildroot的环境,网上教程比较多,也可以找我交流。)
QEMU的使用模式:
使用模式用于运行单个可执行文件,由于部分可执行文件运行时需要结合运行库,因此需要结合chroot指令,将运行时的root路径修改为【目标可执行文件】的文件系统的root目录。
另外在使用qemu仿真可执行文件时,qemu需要依赖部分宿主机的系统库文件,我这里采用的方式比较简单粗暴,直接将宿主机的某些库文件复制到目标文件系统中chroot后的绝对路径,然后才能正常运行,步骤如下:
cd squashfs/ 进入需要仿真的可执行文件根目录下
cp $(which qemu-mips) ./ 将qemu对应架构的使用模式可执行文件复制到当前文件夹下便于执行,具体需要复制的架构可以使用readelf -h file查看目标可执行文件得出。
ldd qemu-mips 查看qemu-mips执行需要的依赖,如下图,其中第一行的linux-vdso.so.1文件驻留于linux的内存中,因此不需要手动进行复制:
直接用简单粗暴的脚本把依赖复制到对应的位置上:
gedit move.sh 编写脚本将依赖复制到目标可执行文件的文件系统中的对应位置,move.sh内容如下:
就可以正常使用chroot+qemu使用模式的组合了。
使用chroot命令,结合之前的qemu-mips环境随便运行一个固件内的可执行文件:
上面为uhttpd服务传入的参数分别表示:
-p:监听端口
-h:http文件根目录位置
-c:http配置文件位置
可以看到这次uhttpd服务并没有直接被执行,而是等待我们去链接并调试。在另一边打开IDA,并选择Debugger中的Attach,下面选择Remote gdb debugger:
弹出如下对话框:
在hostname中填入运行待调试可执行程序的主机IP、Port中填入之前-g参数附加的端口号。将设置完毕后的配置保存为默认网络设置。
由于这里调试的是mips架构的可执行文件,所以需要点击上图中的Debug options进行高级设置,首先勾选Events中的Suspend on debugging start,意为在调试开始时暂停进程:
接下来就是重点了,需要指定目标进程的架构,在上图中右下角Set specific options中选择mips:
选择了mips架构后需要选择是大端序还是小端序,这些信息使用readelf -h file就能查看到,我这里采用的例子是大端序的文件。
设置完毕后,如果前面的配置都是正确的,会弹出如下对话框:
选择attach一个目标主机端口上正在运行的线程,选择第一个即可,结果如下:
提示已经成功attach到了该进程上,现在就可以浏览和调试该可执行程序的运行过程以及内存情况了。如下图所示:
到这里动态调试就设置成功,各位二进制大佬就可以各显神通了。
相关参考
另外关于mips的反编译工具retdec的使用,其实在retdec的github readme里面介绍了,github地址如下:
https://github.com/avast-tl/retdec
编译过程在 build-and-installation 小节下面,使用时运行下面的命令即可:
$RETDEC_INSTALL_DIR/bin/retdec-decompiler.sh test.exe
或者参考这篇帖子:https://bbs.pediy.com/thread-227079.htm
之前还发现了一款可以在源码中检出危险函数调用的工具flawfinder。
官网:https://www.dwheeler.com/flawfinder/
debian下载方式 sudo apt-get install flawfinder
欢迎各位指点交流。
原文作者:伤字号
原文链接:https://bbs.pediy.com/thread-246192.htm
转载请注明:转自看雪论坛
看雪阅读推荐:
1、[分享]一张表格看懂:市面上最为常见的 Android 安装包(APK)五代加固技术发展历程及优缺点比较!
2、[原创]Xposed第三课(微信篇) 防止好友消息撤回
3、[翻译]绕过 ASLR + NX 第一部分
4、[原创]Computer.Systems.A.Programmer.s.Perspective.2nd.个人笔记版
5、[翻译]腾达AC15路由器上的远程代码(CVE-2018-5767)执行演练