使用IDA配合qemu实现调试嵌入式BIN文件

新人第   不知道几次发帖    直接两开花吧
因为某些需要  
我手上多了一个从嵌入式设备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的选项。-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

        


        
        
        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文件作为一个可执行的节链接或者直接添加进
     前者中,在通过前者跳转到入口地址。。。还在实验中,如果大家有更好的方法的话可以分享分享,以上是我的调试历程


THE END
喜欢就支持以下吧
点赞0
分享
评论 抢沙发
  • 管埋员的头像-小北的自留地

    昵称

  • 取消
    昵称