逆向 - 恢复符号表

获取符号表偏移前的地址

  1. 当App准备上线打生产环境的包时,编译器去掉符号表信息;所以在iOS逆向调试的时候,lldb调试中查看代码的函数调用栈时符号偏移前的地址
    = 符号偏移后的地址(lldb断点地址) - ASLR偏移地址,其中 ASLR偏移地址是App启动后系统分配的内存区域的的首地址,在lldb中通过image list -o
    -f来获取某一进程的ASLR地址。如下图获取QQ的ASLR地址:image list -o -f | grep QQ

恢复符号表

  1. 克隆第三方库: git clone https://github.com/tobefuturer/restore-symbol
  2. 到库目录里: cd restore-symbol
  3. 编译成功后会在当前目录生成一个 restore-symbol 可执行文件 : make
  4. 在macOS终端运行(设置为全局命令): sudo cp ./restore-symbol /usr/local/bin
  5. cd 到砸壳去签名后文件的目录
  6. lipo -info WeChat.decrypted 查看是否是fat的文件,如果是fat的文件,那么看 7
  7. fat文件瘦身:lipo WeChat.decrypted -thin arm64 -output
    WeChat.decrypted.arm64
  8. 获取符号表:restore-symbol WeChat.decrypted.arm64 -o WeChat.symbol
  9. 文件 WeChat.symbol 是我们恢复符号表的文件,如果是瘦身回来的直接使用瘦身的,不用合并
  10. WeChat.app 是微信的原包文件,替换掉原先的MatchO文件:cp WeChat.symbol WeChat.app/WeChat
  11. 签名成功后走下面打包。(签名看最下面的介绍)
  12. 准备打包:mkdir Payload & cp -r WeChat.app Payload
  13. 打包成IPA文件:zip -r WeChat.ipa Payload
  14. iTool安装IPA文件,或者不用打包IPA,通过ideviceinstaller -i [ipa文件]

恢复Block 的符号表

  1. Mac版IDAfn+Alt+F7打开脚本,或者menu+文件+Script file
    加载https://github.com/tobefuturer/restore-symbol/blob/master/search_oc_block/ida_search_block.py这个脚本
  2. IDA控制台输出Search completed表示,恢复完成。在IDA打开文件路径有:block_symbol.json
  3. 在原先恢复函数符号表的Mach-O文件中,继续恢复Block符号表restore-symbol WeChat.symbol -o WeChat.symbol -j block_symbol.json
  4. 然后根据上面流程10重新打包安装

逆向中使用 POD

  1. 导入 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
  1. 使用 pod
    在文件中导入直接使用就行;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值