温馨提示×

如何反汇编so动态库文件

小樊
42
2026-10-09 08:51:16
栏目: 编程语言

反汇编 .so(Linux/Android 下的共享动态库,ELF 格式)文件,本质上是把机器码还原成汇编指令。下面按常见工具 + 实战步骤来说明。


一、常用反汇编工具

1️⃣ objdump(最基础)

系统自带,适合快速看汇编。

objdump -d libxxx.so

常用参数:

objdump -d -M intel libxxx.so      # Intel 语法
objdump -d -S libxxx.so            # 汇编+源码(需带符号)
objdump -T libxxx.so               # 查看动态符号表

2️⃣ readelf(分析 ELF 结构)

不直接反汇编,但很重要:

readelf -h libxxx.so     # ELF 头
readelf -S libxxx.so     # 段表
readelf -s libxxx.so     # 符号表

3️⃣ IDA Pro(最强大,推荐)

  • 支持 ARM / x86 / x64
  • 自动识别函数、字符串、控制流
  • 可 F5 伪代码(Hex-Rays)

步骤:

  1. 打开 libxxx.so
  2. 选择架构(armeabi-v7a / arm64 / x86)
  3. 等待分析完成
  4. 定位函数(Shift+F12 找字符串)

4️⃣ Ghidra(免费、强大)

NSA 开源:

  • 支持反汇编 + 反编译
  • 适合没有 IDA 的情况
ghidraRun

导入 .so → 自动分析


5️⃣ Hopper(macOS 友好)

轻量级,支持 ARM/Intel


6️⃣ Android 专项

如果是 Android .so:

  • adb pull 出来
  • 注意架构(armeabi-v7a / arm64-v8a)
  • 用 IDA / Ghidra
  • 可配合 frida 动态分析

二、典型反汇编流程(以 IDA 为例)

  1. 确认架构
    file libxxx.so
    
  2. 用 IDA 打开
  3. 找函数
    • Exports(导出函数)
    • Imports(导入函数)
    • Strings(字符串)
  4. F5 看伪代码
  5. 结合动态调试
    • IDA + gdb / lldb
    • Frida hook

三、常见问题

❓ stripped(去符号)的 so

  • 函数名消失
  • 需要:
    • 识别入口(JNI_OnLoad / 导出函数)
    • 通过字符串定位逻辑
    • 动态调试辅助

❓ ARM Thumb 模式

  • ARM 有 ARM / Thumb 两种指令集
  • IDA 会自动切换
  • 手动修正:
    Alt+G → 设置 T 标志
    

四、简单示例

# 查看所有函数反汇编
objdump -d libtest.so | less

# 只看某个函数
objdump -d libtest.so | grep -A 20 "func_name"

五、学习建议

  • 先学 ARM / x86 汇编基础
  • 学会看:
    • 函数 prologue / epilogue
    • 栈操作
    • 系统调用
  • 配合动态调试进步最快

如果你愿意,可以告诉我:

  • 是 Android / Linux
  • ARM 还是 x86
  • 是否已 strip
  • 目的是 分析 / 修改 / Hook

我可以给你更针对性的步骤。

0 踩