获取符号表偏移前的地址
当App准备上线打生产环境的包时,编译器去掉符号表信息;所以在iOS逆向调试的时候,lldb调试中查看代码的函数调用栈时符号偏移前的地址 = 符号偏移后的地址(lldb断点地址) - ASLR偏移地址,其中 ASLR偏移地址是App启动后系统分配的内存区域的的首地址,在lldb中通过image list -o -f来获取某一进程的ASLR地址。如下图获取QQ的ASLR地址:image list -o -f | grep QQ
恢复符号表
克隆第三方库: git clone https://github.com/tobefuturer/restore-symbol 到库目录里: cd restore-symbol 编译成功后会在当前目录生成一个 restore-symbol 可执行文件 : make 在macOS终端运行(设置为全局命令): sudo cp ./restore-symbol /usr/local/bin cd 到砸壳去签名后文件的目录 lipo -info WeChat.decrypted 查看是否是fat的文件,如果是fat的文件,那么看 7 fat文件瘦身:lipo WeChat.decrypted -thin arm64 -output WeChat.decrypted.arm64 获取符号表:restore-symbol WeChat.decrypted.arm64 -o WeChat.symbol 文件 WeChat.symbol 是我们恢复符号表的文件,如果是瘦身回来的直接使用瘦身的,不用合并 WeChat.app 是微信的原包文件,替换掉原先的MatchO文件:cp WeChat.symbol WeChat.app/WeChat 签名成功后走下面打包。(签名看最下面的介绍) 准备打包:mkdir Payload & cp -r WeChat.app Payload 打包成IPA文件:zip -r WeChat.ipa Payload iTool安装IPA文件,或者不用打包IPA,通过ideviceinstaller -i [ipa文件]
恢复Block 的符号表
Mac版IDAfn+Alt+F7打开脚本,或者menu+文件+Script file 加载https://github.com/tobefuturer/restore-symbol/blob/master/search_oc_block/ida_search_block.py这个脚本 IDA控制台输出Search completed表示,恢复完成。在IDA打开文件路径有:block_symbol.json 在原先恢复函数符号表的Mach-O文件中,继续恢复Block符号表restore-symbol WeChat.symbol -o WeChat.symbol -j block_symbol.json 然后根据上面流程10重新打包安装
逆向中使用 POD
导入 pod
# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'
target 'QG_FQ' do
# Uncomment the next line if you're using Swift or would like to use dynamic frameworks
# use_frameworks!
# Pods for QG_FQ
end
target 'QG_FQDylib' do
use_frameworks!
pod 'YYModel'
pod 'MBProgressHUD' , '~> 1.1.0'
end
使用 pod 在文件中导入直接使用就行;