文章目录
- 前言
- OSX基础
- 工具
- 方法
- 动态调试
- 附录
- 参考链接
前言
如果你想真正成为软件高手,就得了解底层运作机制。逆向,不会让你成为扎克伯格或张一鸣,但或许能让你成为安全专家。
OSX基础
Mac OS X下二进制可执行文件的动态链接库是dylib文件。 所谓dylib,就是bsd风格的动态库。基本可以认为等价于windows 的dll和linux的so。mac基于bsd,所以也使用的是dylib。
工具
包括反汇编工具、调试器等
- xcode自带的工具:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
- IDA Pro:是目前最棒的一个静态反编译软件,为众多0day世界的成员和ShellCode安全分析人士不可缺少的利器!IDA Pro Disassembler and Debugger是一款交互式的,可编程的,可扩展的,多处理器的,交叉Windows或Linux WinCE MacOS平台主机来分析程序, 被公认为最好的花钱可以买到的逆向工程利器。IDA Pro已经成为事实上的分析敌意代码的标准并让其自身迅速成为攻击研究领域的重要工具。它支持数十种CPU指令集其中包括Intel x86,x64,MIPS,PowerPC,ARM,Z80,68000k,c8051等等。它的优点是可以更好的反汇编和更有深层分析。可以快速到达指定的代码位置;可以看到跳到指定的位置的jmp的命令位置;可以看参考字符串;可以保存静态汇编等。
- Hopper Disassembler:分析工具,Hopper 3.11.5, HDS,Hopper 是一种适用于 OS X 和 Linux 的逆向工程工具,可以用于反汇编、反编译和调试 32位/64位英特尔处理器的 Mac、Linux、Windows 和 iOS 可执行程序!
- otx反汇编:brew install otx
- MachOView
- otool(object file displaying tool) :查询依赖库, 针对目标文件的展示工具,用来发现应用中使用到了哪些系统库,调用了其中哪些方法,使用了库中哪些对象及属性,它是Xcode自带的常用工具
- Interface Inspector允许我们研究任何Mac App运行时候的UI结构和属性
- 动态观察程序运行,那就得要调试器,就用Xcode自带的gdb吧
- 编辑二进制文件,系统自带的vim就可以,hex 编辑器
- class-dump:可以从面相对象编程的OC二进制文件中提取类的信息。这就是搜集信息的第三个层面,程序代码中蕴含的信息。otx反汇编时其实已经包含零零碎碎的信息啦,只不过class-dump的信息是按面向对象的思想整理过的。
- offset:目标代码不好定位,offset可以方便地把otx中的内存地址转换成二进制文件中的偏移。
- 找到目标函数的虚拟内存地址。工具: hopper 或 otx 都可以满足。
方法
界面分析 -> 动态分析 -> 静态分析 -> 动态库注入 -> …
- 界面分析:在Mac上面也有类似iOS Reveal的工具叫做Interface Inspector。
- 动态分析: 动态跟踪的方法有多种,除了iOS逆向中使用的Frida, lldb , Mac上面还可以使用Dtrace。
通过执行了一些操作去分析问题。 - 静态分析: 根据假设的某个条件(因素)静止不变去分析。
- 动态库注入: 动态库注入可以通过DYLD_INSERT_LIBRARIES注入,也可以直接注入到可执行文件的Load Command。
- 动态调试,主要工具 gdb
首先,ps -ax|grep “要破解的程序名”,得到其进程 id,如 1234
接着,使用 gdb,用 attach “进程 id”
然后,bt 查看函数调用栈,找到可疑函数后,使用 up
继续,用 si 等命令单步跟踪,set 等命令改变参数的值
再来,使用 disassemble 命令,查看确认要修改的二进制字符串
最后,用十六进制编辑器查找并修改二进制字符串
2. 动静结合,主要工具 otool + gdb
a. otool -tV “目标程序” > dis.asm
b. 文本编辑器打开 dis.asm,查找可疑的函数
c. 使用 gdb 打开目标程序,并在可疑的函数中设置断点,如 b *0x00001234
d. run 运行程序,断点处,si 等跟踪, set 设置关键参数值
e. 用计算器计算需要修改的序列偏移,或 disassemble 命令
f. 用十六进制编辑器查找并修改二进制字符串
常用的命令:
attach 1234
b *0x1234
clear *0x1234
bt
disassemble
si
finish
set $eaxgcc test.c -o test
otool -tV target > dis.asm
动态调试
工具:Hopper+LLDB+Radare2
lldb /Applications/Camtasia\ 2020.app
附录
参考链接
- 《macOS软件安全与逆向分析》随书源码
- MacOS逆向技术基础-第一版