一、APP从开发到安装到手机的过程
二、逆向APP的思路
界面分析
Cycript、Reveal代码分析
对Mach-O文件的静态分析
MachOView、class-dump、Hopper Disassembler、ida等动态调试
对运行中的APP进行代码调试
debugserver、LLDB代码编写
注入代码到APP中
必要时还可能需要重新签名、打包ipa
三、class-dump
顾名思义,它的作用就是把Mach-O文件的class信息给dump出来(把类信息给导出来),生成对应的.h头文件
下载完工具包后将class-dump文件复制到Mac的/usr/local/bin目录,这样在终端就能识别class-dump命令了
常用格式
class-dump -H Mach-O文件路径 -o 头文件存放目录
-H表示要生成头文件
-o用于制定头文件的存放目录
四、代码的编译过程
不同的OC代码,编译出来的汇编代码可能是一样的
五、Hopper Disassmbler
Hopper Disassmbler能够将Mach-O文件的机器语言代码反编译成汇编代码、OC伪代码或者Swift伪代码
常用快捷键
Shift + Option + X
找出哪里引用了这个方法
六、动态库共享缓存(dyld shared cache)
从iOS3.1开始,为了提高性能,绝大部分的系统动态库文件都打包存放到了一个缓存文件中(dyld shared cache)
缓存文件路径:/System/Library/Caches/com.apple.dyld/dyld_shared_cache_armX
dyld_shared_cache_armX的X代表ARM处理器指令集架构
v6
iPhone、iPhone3G
iPod Touch、iPod Touch2v7
iPhone3GS、iPhone4、iPhone4S
iPad、iPad2、iPad3(The New iPad)
iPad mini
iPod Touch3G、iPod Touch4、iPod Touch5v7s
iPhone5、iPhone5C
iPad4arm64
iPhone5S、iPhone6、iPhone6 Plus、iPhone6S、iPhone6S Plus
iPhoneSE、iPhone7、iPhone7 Plus、iPhone8、iPhone8 Plus、iPhoneX
iPad5、iPad Air、iPad Air2、iPad Pro、iPad Pro2
iPad mini with Retina display、iPad mini3、iPad mini4
iPod Touch6
所有指令集原则上都是向下兼容的
动态库共享缓存一个非常明显的好处是节省内存
现在的ida、Hopper反编译工具都可以识别动态库共享缓存
七、动态库的加载
在Mac\iOS中,是使用了/usr/lib/dyld程序来加载动态库
- dyld
dynamic link editor,动态链接编辑器
dynamic loader,动态加载器
dyld源码
https://opensource.apple.com/tarballs/dyld/
可以使用dyld源码中的launch-cache/dsc_extractor.cpp
将#if 0前面的代码删除(包括#if 0),把最后面的#endif也删掉
编译dsc_extractor.cpp
clang++ -o dsc_extractor dsc_extractor.cpp
使用dsc_extractor
./dsc_extractor 动态库共享缓存文件的路径 用于存放抽取结果的文件夹