首页
论坛
课程
招聘
[原创]QEMU+IDA远程调试mips可执行文件
2018-8-10 00:14 18522

[原创]QEMU+IDA远程调试mips可执行文件

2018-8-10 00:14
18522
qemu的远程调试非常简单,开启-g参数绑定本地端口即可,只是其中IDA需要进行一定的设置才能调试mips架构的二进制文件并暂停进程进行调试。(关于Linux中如何运行IDA以及搭建buildroot的环境,网上教程比较多,也可以找我交流。)

【2018-08-16更新开始加一个qemu-mips的脚本吧,解决chroot之后qemu-mips运行找不到依赖库然后报错文件不存在的:

先介绍一下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使用模式的组合了。
【2018-08-16更新结束】

使用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到了该进程上,现在就可以浏览和调试该可执行程序的运行过程以及内存情况了。如下图所示: