吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 13415|回复: 12
上一主题 下一主题
收起左侧

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

  [复制链接]
跳转到指定楼层
楼主
叶子青 发表于 2019-6-25 11:46 回帖奖励
本帖最后由 叶子青 于 2019-6-25 18:33 编辑

新人第   不知道几次发帖    直接两开花吧
因为某些需要  
我手上多了一个从嵌入式设备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  port
QEMU开启调试模式,等待GDB连接PORT
LD_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文件作为一个可执行的节链接或者直接添加进
     前者中,在通过前者跳转到入口地址。。。还在实验中,如果大家有更好的方法的话可以分享分享,以上是我的调试历程


免费评分

参与人数 7威望 +1 吾爱币 +11 热心值 +7 收起 理由
JTC + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
看看人间的太阳 + 1 + 1 感谢分享
willJ + 1 + 6 + 1 感谢楼主的分享,期待更多分享
PearlyNautilus + 1 用心讨论,共获提升!
sumile + 1 + 1 用心讨论,共获提升!
陈世界 + 1 + 1 我很赞同!
czstara12 + 1 + 1 用心讨论,共获提升!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
 楼主| 叶子青 发表于 2019-6-25 18:30 |楼主
天空藍 发表于 2019-6-25 18:06
不懂这些东西,小白好奇发问。请问是linux领域的调适吗?qume可以有windows的程式吗?。你的思路是开启qume并 ...

我物理机运行IDA的是WIN10   然后开了一个Linux的虚拟机,在这个虚拟机下跑QEMU来虚拟一个ARMCPU,用来运行这个BIN文件  然后IDA和QEMU之间通过网络连接
推荐
 楼主| 叶子青 发表于 2019-6-25 18:31 |楼主
天空藍 发表于 2019-6-25 18:06
不懂这些东西,小白好奇发问。请问是linux领域的调适吗?qume可以有windows的程式吗?。你的思路是开启qume并 ...

有适用于Windows的QEMU  叫QEMU for Windows  你可以去查一下
4#
心里乐开花 发表于 2019-6-25 12:16
5#
人帅真无奈 发表于 2019-6-25 12:18
感谢分享
6#
天空藍 发表于 2019-6-25 18:06
不懂这些东西,小白好奇发问。请问是linux领域的调适吗?qume可以有windows的程式吗?。你的思路是开启qume并启动linux系统,然后运行bin程序,在从本体机上使用IDA去做附加调适?
7#
天空藍 发表于 2019-6-25 18:38
叶子青 发表于 2019-6-25 18:31
有适用于Windows的QEMU  叫QEMU for Windows  你可以去查一下

好的,谢谢。
8#
六卖神剑 发表于 2019-6-25 21:09
说不定用得着,收藏备用
9#
chen4321 发表于 2019-6-26 06:03
多谢指教
10#
情有独钟 发表于 2019-7-2 08:59
感谢楼主分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-21 19:51

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表