|
新人第 不知道几次发帖 直接两开花吧
因为某些需要
我手上多了一个从嵌入式设备Flish中读取出来的二进制文件
我们事先通过firmwork 之类的工具确定了对方是Linux的操作系统并且确定了 拿到手的BIN文件时他的Boot 程序 ELF文件格式
然后这个时候完全看静态分析的代码太累了 (虽然说可以直接找到Linux的源代码来阅读,但是难免以后还会遇到类似的问题且找不到源码的时候)
所以就决定学习下怎么通过调试器来直接调试这类BIN文件
之前在网上找了很久的资料,最终实现了调试 ,以下我把主要的步骤和大家分享下(步骤其实非常简单大佬勿喷)
0x01.首先的话想在PC段模拟ARM指令集的BIN文件运行肯定要用到虚拟机来模拟一个虚拟CPU 这类的虚拟机推荐使用QEMU来实现
QEMU的话是一款非常强大的纯软件实现的虚拟化模拟设备,几乎可以模拟我们接触过的大部分CPU架构。包括 IA-32 (x86),AMD 64,MIPS R4000, SPARCsun3 PowerPC
(PReP 及 Power Macintosh)架构还有就是我们要用到的ARM架构.
现在新版本的QEMU支持在Windows/Linux上运行, 通常Linux上的用的较多,Windows下的版本叫做 QEMU for windows ,我接下来的实验主要都是在ubuntu虚拟机环境下完成的
QEMU for Windows感兴趣的同学可以下载下来研究下
0x02.我们需要先在安装一个QEMU 直接通过指令
sudo apt-get install qemu
实现安装,当然QEMU正常运行还需要安装以下三个软件支持包
sudo apt-get install zlib1g-dev sudo apt-get install libglib2.0-0 sudo apt-get install libglib2.0-dev
安装成功以后可以尝试输入qemu-指令 Tab键后自动补全则安装成功 (我为了验证能否正常工作,实际上还模仿网上编译了一个Linux内核文件,创建根目录系统之类的操作,当然这里略过)
0x03.起初我调试的思路是,在QEMU上运行一个Linux3.0的内核 (因为这个设备就是Linux3.0的操作系统)然后在这个Linx3.0上运行当前这个BIN文件,再通过IDA提供的调试服务器 linux_surver
来实现调试,后面查阅多方资料发现网上都是通过类似方案调试的MIPS架构或者ARM安卓之类的东西,而且有点麻烦,后来查了下QEMU的使用方式,发现可以有跟简单的操作
QEMU主要有两种工作模式
1)用户模式 可以用来启动不同架构编译的Linux程序
2)模拟模式 类似虚拟机功能
模拟模式就是之前说的 类似VM虚拟机 直接跑的情况 而用户模式则是可以直接启动不同架构
下的程序,感觉好像很有用的样子
用户模式的参数
qemu-mipsel [options] program [arguments...]
qemu-mipsel 是使用的架构,当前选择的MIPS
“program"是需要qemu运行的其他处理器编译的程序;
arguments"是“program"的参数;
“options"是qemu-mipsel或qemu-mipsel的选项。[table][tr][td=1,1,284] -E var=value[/td][td=1,1,284]为program进程设置环境变量[/td][/tr][tr][td=1,1,284]-g port[/td][td=1,1,284]QEMU开启调试模式,等待GDB连接PORT[/td][/tr][tr][td=1,1,284]LD_PRELOAD=newlib[/td][td=1,1,284]使用新的动态库newlib劫持系统调用
举例:比如我当前想要启动一个ARM架构的BOOT.elf文件(我手上这个就是ELF文件格式的)
那么我输入的命令就是
qemu-arm boot.elf
如果我还想有调试器调试他 我就可以给他设置一个调试接口
qemu-arm -g 1234 boot.elf 端口号就是1234QEMU的调试器使用的事GDB提示器 所以使用GDB的调试器就可以从网口来连接他实现调试
0x04.
1)这个时候我们回到物理机的IDA上启动对应的工程文件选择我们的调试器为GDB debuger
2)然后设置我们的调试目标的IP 以及端口(得保证虚拟机和主机能互相PING的通)
Debugger->process options
3)设置调试选项
将Suspend on debugging start与 suspend on process entry point勾选 方便开始调试时断点在入口处
4)接下来就是开始调试 Debugger->Attach to process
0x05.这样调试目前可以实现对其他架构的文件进行调试,但是假如遇到非ELF文件格式 的Bin文件 的话就比较麻烦了
当前的想法是手动编译一个该架构下的AXF或者ELF文件,然后将对应的BIN文件作为一个可执行的节链接或者直接添加进
前者中,在通过前者跳转到入口地址。。。还在实验中,如果大家有更好的方法的话可以分享分享,以上是我的调试历程
来源:http://www.12558.net
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
|