可直接用终端命令反编译未加壳未混淆的mach-o程序:先用file确认格式,otool查看结构与符号,再用otx(x86_64)或hopper(需权限)生成汇编/伪代码,radare2支持深度静态分析与函数反编译。

在Mac终端里反编译一个没有加壳、未混淆的简单macOS程序(如Mach-O格式的命令行工具),核心目标是还原出可读的汇编或伪代码,而非完整源码。这类操作不依赖图形界面,全程用终端命令完成,适合快速分析逻辑结构或调试行为。
确认目标程序是Mach-O格式
打开终端,进入目标程序所在目录,执行:
file ./your_program
若输出含“Mach-O”字样(例如“Mach-O 64-bit executable x86_64”或“arm64”),说明它是原生macOS可执行文件,可继续;若显示“ELF”“PE”或“data”,则不是本教程适用对象,停止操作。
用otool查看基础结构和符号表
执行:
otool -l ./your_program | grep -A2 "LC_LOAD_DYLIB\|LC_MAIN"
这一步能快速判断程序是否带加密或混淆:如果LC_MAIN段缺失,或大量LC_LOAD_DYLIB指向可疑路径(如/libinject.dylib),说明可能被加固,不适合用本方法继续。
再执行:
otool -tV ./your_program
列出所有导出符号。若看到清晰函数名(如_main、_calculateSum、-[ViewController viewDidLoad]),说明符号未剥离,后续反编译效果会好;若全是__mh_execute_header、__dyld_private这类系统符号,说明符号已删,只能靠静态分析猜逻辑。
用Hopper或otx生成汇编/伪代码
方法一:使用开源命令行工具 otx(仅支持x86_64,不支持arm64)
先安装:
brew install otx
再执行:
otx ./your_program > disasm.s
生成的disasm.s是AT&T语法汇编,可直接阅读跳转逻辑和函数调用链。注意:otx不处理Objective-C运行时消息,对C++虚函数也仅展示调用地址。
方法二:使用Hopper Disassembler(需GUI,但终端可触发)
确保已安装Hopper v4+(官网下载,支持M1/M2/M3)
在终端中执行:
/Applications/Hopper\ v4.app/Contents/MacOS/Hopper -e ./your_program -o ./output.hopper
【必须提前给Hopper授予“完全磁盘访问”权限】,否则会静默失败且无报错。权限位置:系统设置 → 隐私与安全性 → 完全磁盘访问 → 点右下角锁图标解锁 → 拖入Hopper应用。
生成的output.hopper是Hopper项目文件,双击即可打开查看反编译后的伪代码(类似C风格)。它能自动识别Objective-C类方法、字符串引用和常见libc调用。
用radare2做深度静态分析
第一步:安装radare2
brew install radare2
第二步:加载并分析
r2 -A ./your_program
第三步:列出所有函数
afl
第四步:反编译主函数(假设为main)
s sym.main
pdf
pdf命令输出的是近似C的伪代码,对简单逻辑(如if/for/算术运算)还原度高;但遇到block、GCD dispatch或ARC内存管理时,会显示底层寄存器操作,需结合上下文理解。若pdf输出为空或报错“no function found”,说明该函数未被r2自动识别,需手动定义:
af @ sym.main











