欢迎光临
我们一直在努力

第十六节_反汇编工具介绍

第十六节 反汇编工具介绍

(第1章 安卓逆向概论)

学习目标

学完本节,希望你能够:搞清反汇编是啥、咋把二进制变成汇编;熟悉 IDA、Ghidra、Radare2、objdump 的用途和场景;会分析 ELF、DEX、.so;会用 Frida/Xposed 做动态分析、Hook 关键函数;能提取、反编译、分析 Android 二进制。


一、反汇编是啥?

用一句话说清楚

反汇编(Disassembly)是指将 机器码(Binary Code)转换为汇编代码(Assembly Code),从而理解程序的运行逻辑。

示例

二进制指令ARM 汇编等价 C 代码
E3A00005 MOV R0, #5 int a = 5;
E0801001 ADD R1, R0, R1 b = a + b;
EB000001 BL function function();

查看 ELF 文件架构

file libnative.so

示例输出:

libnative.so: ELF 64-bit LSB shared object, ARM aarch64



二、常用反汇编工具有啥?

1. objdump(Linux 自带)

反汇编 ELF 文件

objdump -d libnative.so | head -n 20

解析 ELF 段信息

readelf -h libnative.so


2. IDA Pro(交互式反汇编器)

安装 IDA Free

wget https://out7.hex-rays.com/files/idafree83_linux.run
chmod +x idafree83_linux.run
./idafree83_linux.run

打开 ELF 文件

  • File → Open → 选择 libnative.so
  • 选择 CPU 架构(ARM/ARM64)
  • 开始分析,查看函数表、字符串、交叉引用(XREF)
  • 快捷键

    操作快捷键
    交叉引用 X
    切换汇编/C 代码 F5
    查找字符串 Shift + F12

    3. Ghidra(NSA 开源工具)

    安装 Ghidra

    wget https://ghidra-sre.org/ghidra_10.1.5_PUBLIC_20231005.zip
    unzip ghidra_10.1.5_PUBLIC_20231005.zip
    cd ghidra_10.1.5
    ./ghidraRun

    分析 ELF 文件

  • File → New Project → Import libnative.so
  • 选择 ARM 处理器
  • 双击函数,查看反汇编结果
  • 使用 Decompiler 还原 C 代码
  • Ghidra 常用快捷键

    操作快捷键
    查找字符串 Ctrl + Shift + F
    交叉引用 Ctrl + Shift + X
    反编译 F4

    4. Radare2(开源 CLI 反汇编工具)

    安装 Radare2

    git clone https://github.com/radareorg/radare2.git
    cd radare2
    sys/install.sh

    反汇编 ELF

    r2 -AA libnative.so

    常用命令

    命令作用
    aa 自动分析
    afl 显示所有函数
    pdf @ main 反汇编 main()
    izz 查找字符串


    三、逆向里咋分析 Android ELF?

    1. 提取 libnative.so

    adb shell run-as com.example.app cat /data/app/com.example.app/lib/arm64/libnative.so > libnative.so

    2. 解析 ELF 头

    readelf -h libnative.so

    3. 反汇编

    objdump -d libnative.so | head -n 20

    4. Hook ELF 运行时行为

    使用 Frida Hook open()

    Java.perform(function() {
    var libc = Module.findExportByName(null, "open");
    Interceptor.attach(libc, {
    onEnter: function(args) {
    console.log("File Opened: " + Memory.readUtf8String(args[0]));
    }
    });
    });

    执行

    frida -U -n com.example.app -e "…"



    四、咋 Hook DEX 代码?

    使用 Frida Hook DEX 运行时

    Java.perform(function() {
    var DexClassLoader = Java.use("dalvik.system.DexClassLoader");
    DexClassLoader.loadClass.implementation = function(name) {
    console.log("Hooked Dex Load: " + name);
    return this.loadClass(name);
    };
    });

    执行

    frida -U -n com.example.app -e "…"



    动手练一练

  • 用 objdump 反汇编 ELF
  • objdump -d libnative.so | head -n 20

  • 用 IDA/Ghidra 反编译 ELF
  • 导入 libnative.so
  • 查找字符串
  • 分析关键函数
  • Hook open() 调用
  • Java.perform(function() {
    var libc = Module.findExportByName(null, "open");
    Interceptor.attach(libc, {
    onEnter: function(args) {
    console.log("File Opened: " + Memory.readUtf8String(args[0]));
    }
    });
    });

  • Hook DexClassLoader
  • Java.perform(function() {
    var DexClassLoader = Java.use("dalvik.system.DexClassLoader");
    DexClassLoader.loadClass.implementation = function(name) {
    console.log("Hooked Dex Load: " + name);
    return this.loadClass(name);
    };
    });


    本节小结

    你只要记住这几条就行:反汇编是把机器码转成汇编,objdump 简单快、IDA/Ghidra 可交互和反编译 C、Radare2 是命令行;ELF 用 file/readelf -h 看架构,用 Frida Hook 可动态看调用和改行为。


    本节思考与练习

  • 概念:反汇编和反编译有啥区别?IDA 和 Ghidra 各适合啥场景?
  • 动手:用 objdump 反汇编一个 so,找到 main 或导出函数。
  • 动手:用 IDA 或 Ghidra 打开同一个 so,看字符串和交叉引用。
  • 动手:用 Frida Hook 一个 so 里的 open(),打印打开的文件路径。
  • 下一节预告:下一节讲 ELF 文件解析(第十七节),把 ELF 头、程序头、节表、符号表讲清楚。

    赞(0)
    未经允许不得转载:171主机测评 » 第十六节_反汇编工具介绍
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址