ida 解析linux.bin,使用IDA配合qemu实现调试嵌入式BIN文件

新人第   不知道几次发帖    直接两开花吧

因为某些需要

我手上多了一个从嵌入式设备Flish中读取出来的二进制文件

我们事先通过firmwork 之类的工具确定了对方是Linux的操作系统并且确定了 拿到手的BIN文件时他的Boot 程序   ELF文件格式

然后这个时候完全看静态分析的代码太累了  (虽然说可以直接找到Linux的源代码来阅读,但是难免以后还会遇到类似的问题且找不到源码的时候)

所以就决定学习下怎么通过调试器来直接调试这类BIN文件

之前在网上找了很久的资料,最终实现了调试  ,以下我把主要的步骤和大家分享下(步骤其实非常简单大佬勿喷)

0x01.首先的话想在PC段模拟ARM指令集的BIN文件运行肯定要用到虚拟机来模拟一个虚拟CPU  这类的虚拟机推荐使用QEMU来实现

QEMU的话是一款非常强大的纯软件实现的虚拟化模拟设备,几乎可以模拟我们接触过的大部分CPU架构。包括 IA-32 (x86),AMD 64,MIPSR4000,SPARCsun3PowerPC

(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-devsudo apt-get install libglib2.0-0sudo 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的选项。-E  var=value为program进程设置环境变量-g  portQEMU开启调试模式,等待GDB连接PORTLD_PRELOAD=newlib使用新的动态库newlib劫持系统调用

举例:比如我当前想要启动一个ARM架构的BOOT.elf文件(我手上这个就是ELF文件格式的)

那么我输入的命令就是

qemu-arm boot.elf

如果我还想有调试器调试他  我就可以给他设置一个调试接口

qemu-arm -g 1234 boot.elf端口号就是1234QEMU的调试器使用的事GDB提示器  所以使用GDB的调试器就可以从网口来连接他实现调试

0x04.

1)这个时候我们回到物理机的IDA上启动对应的工程文件选择我们的调试器为GDB debuger

114045j5a5l1qwg5looqw1.png

2)然后设置我们的调试目标的IP 以及端口(得保证虚拟机和主机能互相PING的通)

Debugger->process options

114047yxzrjdjj2fjznt8m.png

3)设置调试选项

114050nigxmg5xwbd7yyyl.png

将Suspend on debugging start与suspend on process entry point勾选   方便开始调试时断点在入口处

4)接下来就是开始调试   Debugger->Attach to process

114053nh96mhl8ky4klf98.png

0x05.这样调试目前可以实现对其他架构的文件进行调试,但是假如遇到非ELF文件格式 的Bin文件  的话就比较麻烦了

当前的想法是手动编译一个该架构下的AXF或者ELF文件,然后将对应的BIN文件作为一个可执行的节链接或者直接添加进

前者中,在通过前者跳转到入口地址。。。还在实验中,如果大家有更好的方法的话可以分享分享,以上是我的调试历程

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值