iOS的Mach-O文件

APP的使用过程

源码-编译、链接、签名生成app文件-zip压缩生成IPA文件-上传到App Store-下载到手机。

源码-编译、链接、签名生成app文件-zip压缩生成IPA文件-通过PP助手、iFunBox、Xcode等工具安装到手机。

逆向APP的思路

界面分析

Cycript、Reveal

代码分析

对Mach-O文件的静态分析,MachOView、class-dump、Hopper Disassembler、ida等

动态调试

对运行中的APP进行代码调试,debugserver、LLDB

代码编写

注入代码到APP中,必要时还可能需要重新签名、打包ipa

工具的使用

class-dump

顾名思义,它的作用就是把Mach-O文件的class信息给dump出来(把类信息给导出来),生成对应的.h头文件

官方地址:http://stevenygard.com/projects/class-dump/

下载完工具包后将class-dump文件复制到Mac的/usr/local/bin目录,这样在终端就能识别class-dump命令了

 常用格式

class-dump  -H  Mach-O文件路径  -o  头文件存放目录

-H表示要生成头文件

-o用于制定头文件的存放目录

Hopper Disassmbler

nHopper Disassmbler能够将Mach-O文件的机器语言代码反编译成汇编代码、OC伪代码或者Swift伪代码

常用快捷键 Shift + Option + X 找出哪里引用了这个方法

动态库的加载

在Mac\iOS中,是使用了/usr/lib/dyld程序来加载动态库

dynamic link editor,动态链接编辑器

dynamic loader,动态加载器

https://opensource.apple.com/tarballs/dyld/

常见Mach-o文件类型

MH_OBJECT

目标文件(.o)

静态库文件(.a),静态库其实就是N个.o合并在一起

MH_EXECUTE:可执行文件

.app/xx

MH_DYLIB:动态库文件

.dylib

.framework/xx

MH_DYLINKER:动态链接编辑器

/usr/lib/dyld

MH_DSYM:存储着二进制文件符号信息的文件

.dSYM/Contents/Resources/DWARF/xx(常用于分析APP的崩溃信息)

 

Mach-O文件包含3个主要区域

Header

文件类型、目标架构类型等

Load commands

描述文件在虚拟内存中的逻辑结构、布局

Raw segment data

在Load commands中定义的Segment的原始数据

 

窥探Mach-O的结构

命令行工具

file:查看Mach-O的文件类型

file  文件路径

otool:查看Mach-O特定部分和段的内容

lipo:常用于多架构Mach-O文件的处理

查看架构信息:lipo  -info  文件路径

导出某种特定架构:lipo  文件路径  -thin  架构类型  -output  输出文件路径

合并多种架构:lipo  文件路径1  文件路径2  -output  输出文件路径

GUI工具

MachOView(https://github.com/gdbinit/MachOView)

APP的可执行文件、动态库都是由dyld负责加载的

 

 

 

你可能感兴趣的:(iOS逆向)