iOS应用在上线前都会裁去符号表,以避免被逆向分析,restore-symbol 便是用于恢复符号表的利器。
符号表原理:https://blog.csdn.net/sharpyl/article/details/88610991
git:https://github.com/tobefuturer/restore-symbol
1.下载源码编译
git clone --recursive https://github.com/tobefuturer/restore-symbol.git
cd restore-symbol && make
./restore-symbol
2.恢复OC的符号表
./restore-symbol ./origin_XXX -o ./XXX_with_symbol
origin_XXX 为Clutch砸壳后,没有符号表的 Mach-O 文件
-o 后面跟输出文件位置
3.把 Mach-O 文件重签名打包
打包运行,可以看到OC函数这部分的符号已经恢复了,但是block的符号没能正确显示。
4.提取block符号表
a. IDA提供了Python的SDK,下载脚本ida_search_block.py(https://github.com/tobefuturer/restore-symbol/blob/master/search_oc_block/ida_search_block.py);
b. 用IDA打开要分析APP的 Mach-O 文件,等待分析完成;
c. 菜单栏 File -> Script file... 选择ida_search_block.py;
d. 运行完成后,block符号表提取完成,生成block_symbol.json;
5. 再次恢复
./restore-symbol ./origin_AlipayWallet -o ./AlipayWallet_with_symbol -j block_symbol.json
-j 后面得到的json符号表
6. 签名打包
得到一份具有OC函数符号表和block符号表的可执行文件