首页
社区
课程
招聘
[原创]QEMU+IDA远程调试mips可执行文件
发表于: 2018-8-10 00:14 24222

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

2018-8-10 00:14
24222

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

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

先介绍一下QEMU的使用模式:

使用模式用于运行单个可执行文件,由于部分可执行文件运行时需要结合运行库,因此需要结合chroot指令将运行时的root路径修改为目标可执行文件的文件系统的root目录。

另外在使用qemu仿真可执行文件时qemu需要依赖部分宿主机的系统库文件,我这里采用的方式比较简单粗暴,直接将宿主机的某些库文件复制到目标文件系统中chroot后的绝对路径,然后才能正常运行,步骤如下:

然后直接用简单粗暴的脚本把依赖复制到对应的位置上:

或者参考这篇帖子:

https://bbs.pediy.com/thread-227079.htm

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内容如下: 
 

  
 
  
  

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2018-8-16 09:57 被伤字号编辑 ,原因: 添加了qemu-mips+chroot后提示No file or directory named qemu-mips错误的解决办法
收藏
免费 4
支持
分享
打赏 + 1.00雪花
打赏次数 1 雪花 + 1.00
 
赞赏  junkboy   +1.00 2018/08/10
最新回复 (29)
雪    币: 131
活跃值: (415)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
2
发帖这个编辑器直接粘贴图片上来发布之后就不显示了,必须得点击上面的插入图片的按钮上传,很迷。。。
2018-8-10 07:45
0
雪    币: 416
活跃值: (162)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
3
楼主可以考虑建个群,交流交流
2018-8-10 15:10
0
雪    币: 131
活跃值: (415)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
4
蓝色淡风 楼主可以考虑建个群,交流交流
emmm。。。我水平有限。。。感觉建群了能解决的问题也不多。。
2018-8-10 15:43
0
雪    币: 11
活跃值: (12)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
5
楼主辛苦。问个额外的问题,在使用IDA 远程调试arm/mips架构的程序时,如何跟踪由execve()起来的程序? 貌似gdb可以使用catch exec,但在使用gdb-multiarch时遇到几个问题:1) 使用ni单步步过好像也会单步进入,和si效果一样;2) 在进行远程调试时感觉很慢(比IDA要慢),另外会出现指令和地址对不上的情形,所以暂时没有尝试使用gdb-multiarch去执行catch exec来进行跟踪调试。
最后于 2018-8-13 19:32 被照片记录谁编辑 ,原因:
2018-8-13 19:26
0
雪    币: 131
活跃值: (415)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
6
照片记录谁 楼主辛苦。问个额外的问题,在使用IDA 远程调试arm/mips架构的程序时,如何跟踪由execve()起来的程序? 貌似gdb可以使用catch exec,但在使用gdb-multiarch时遇到几 ...
先静态确定了execve调用处的位置,调试的时候再直接跳转到对应地址下断。另外gdb调试子进程可以用set follow-fork-mode试试。
而且话说单步步入之后不就可以调试execve的过程了嘛?gdb-multiarch我暂时也没用过,不是特别了解
2018-8-14 09:44
0
雪    币: 7048
活跃值: (3527)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
7
感谢分享!!!
2018-8-15 10:04
0
雪    币: 131
活跃值: (415)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
8
加了一个chroot . ./qemu-mips报错的解决方案
2018-8-16 10:22
0
雪    币: 11
活跃值: (12)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
9
伤字号 先静态确定了execve调用处的位置,调试的时候再直接跳转到对应地址下断。另外gdb调试子进程可以用set follow-fork-mode试试。 而且话说单步步入之后不就可以调试execve的过程 ...
多谢。另外,gdb-multiarch是一个与gdb类似的工具,但它支持多种架构,这样就不用针对每种架构都要去找对应架构的gdb了。当然,也可以在直接使用IDA Pro。
2018-8-16 21:22
0
雪    币: 11
活跃值: (12)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
10
伤字号 加了一个chroot . ./qemu-mips报错的解决方案
也可以试试采用对应架构的qemu-static版本,比如qemu-mips-static,这样chroot之后就不会有qemu-mips-static找不到依赖库的问题了。
2018-8-16 21:24
0
雪    币: 131
活跃值: (415)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
11
照片记录谁 也可以试试采用对应架构的qemu-static版本,比如qemu-mips-static,这样chroot之后就不会有qemu-mips-static找不到依赖库的问题了。
加static需要重新编译  我比较懒 就喜欢用apt install的版本
2018-8-17 09:32
0
雪    币: 1491
活跃值: (985)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
12
【2018-08-16更新开始】加一个qemu-mips的脚本吧,解决chroot之后qemu-mips运行找不到依赖库然后报错文件不存在的:
这方面加一个吧,分析的时候确实遇到了这个问题,一直没有解决
2018-8-17 14:55
0
雪    币: 131
活跃值: (415)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
13
仙果 【2018-08-16更新开始】加一个qemu-mips的脚本吧,解决chroot之后qemu-mips运行找不到依赖库然后报错文件不存在的: 这方面加一个吧,分析的时候确实遇到了这个问题,一直没有 ...
加。。加啥 解决依赖库的脚本吗?
我在更新那段内容里那个迁移依赖库的move.sh就能解决问题了
或者还是其他别的什么问题呢?
2018-8-17 15:05
0
雪    币: 1491
活跃值: (985)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
14
伤字号 加。。加啥 解决依赖库的脚本吗? 我在更新那段内容里那个迁移依赖库的move.sh就能解决问题了 或者还是其他别的什么问题呢?
我回去试一下,这个问题,困扰几天了
2018-8-17 15:36
0
雪    币: 131
活跃值: (415)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
15
仙果 我回去试一下,这个问题,困扰几天了
好的。。。把ldd之后打印出来的所有依赖库文件复制到当前固件的根目录下面的相对路径就行了  只是中间有些目录需要手动创建  我在那个move.sh脚本里应该写的都比较明白。。
2018-8-17 16:00
0
雪    币: 2
活跃值: (15)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
16
,那个,请问,用http是因为比较方便吗
2018-8-17 18:36
0
雪    币: 11
活跃值: (12)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
17
伤字号 加static需要重新编译 我比较懒 就喜欢用apt install的版本
我用的Ubuntu,直接使用apt-get安装的static版本的qemu。
最后于 2018-8-17 21:11 被照片记录谁编辑 ,原因:
2018-8-17 21:10
0
雪    币: 11
活跃值: (12)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
18
regedit小表 ,那个,请问,用http是因为比较方便吗
用http只是一个示例吧,其他的程序都大同小异。
2018-8-17 21:13
0
雪    币: 131
活跃值: (415)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
19
照片记录谁 用http只是一个示例吧,其他的程序都大同小异。
是的。。实际情况中直接调试http的场景并不多见
2018-8-20 09:55
0
雪    币: 6790
活跃值: (4441)
能力值: (RANK:600 )
在线值:
发帖
回帖
粉丝
20
蓝色淡风 楼主可以考虑建个群,交流交流
建议在帖子里交流,这样大家交流心得可以让更多后来者看到!
2018-8-22 10:49
0
雪    币: 416
活跃值: (162)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
21
gjden 建议在帖子里交流,这样大家交流心得可以让更多后来者看到!
嗯嗯
2018-8-22 12:57
0
雪    币: 285
活跃值: (1095)
能力值: ( LV13,RANK:405 )
在线值:
发帖
回帖
粉丝
22
仙果 我回去试一下,这个问题,困扰几天了
也可以将mips-gcc编译目录(bulidroot/output)下的库文件直接拷贝到当前目录的lib目录下
2018-12-17 22:42
0
雪    币: 73
活跃值: (923)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
如果是从固件里面提取出来的文件系统,把整个文件系统目录扔到qemu里面,chroot到当前目录就不会有问题了
2018-12-19 09:19
0
雪    币: 653
活跃值: (162)
能力值: ( LV4,RANK:51 )
在线值:
发帖
回帖
粉丝
24
我通过move.sh解决了依赖库的问题,但在sudo chroot . ./qemu.mips bin/boa又报了一个错误:
qemu:handle_cpu_signal received signal outside vCPU context @ pc=0x562daa0b8570
qemu:handle_cpu_signal received signal outside vCPU context @ pc=0x7f4cd373a179
 想问问您这是什么问题,该如何解决。
最后于 2019-4-28 10:43 被FunRoot编辑 ,原因:
2019-4-28 09:50
0
雪    币: 131
活跃值: (415)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
25
FunRoot 我通过move.sh解决了依赖库的问题,但在sudo chroot . ./qemu.mips bin/boa又报了一个错误:q ...
有截图嘛?盲猜一个qemu的架构和固件的架构不一致吧。。。
2019-6-3 10:34
0
游客
登录 | 注册 方可回帖
返回
//