什么是符号表?

符号表(Symbo Table)是一种用于语言翻译器(例如编译器和解释器)中的数据结构。在符号表中,程序源代码中的每个标识符都和它的声明或使用信息绑定在一起,比如其数据类型、作用域以及内存地址

获取符号表偏移前的地址

当App准备上线打生产环境的包时,编译器会去掉符号表信息;所以在iOS逆向调试的时候,lldb调试中查看代码的函数调用栈时

符号偏移前的地址 = 符号偏移后的地址(lldb断点地址) - ASLR偏移地址

其中ASLR偏移地址是App启动后系统分配的内存区域的的首地址,在lldb中通过:

image list -o -f

来获取某一进程的ASLR地址。

恢复符号表

方法其实很固定,就是使用restore-symbol这个开源命令行工具。

恢复函数的符号表

  1. 克隆第三方库: git clone https://github.com/tobefuturer/restore-symbol
  2. 到库目录里: cd restore-symbol
  3. 编译成功后会在当前目录生成一个 restore-symbol 可执行文件
  4. 在macOS终端运行(设置为全局命令): sudo cp ./restore-symbol /usr/local/bin。或者自己手动拷贝到/usr/local/bin目录下也可以
  5. 给已经砸壳的IPA文件瘦身:lipo -info xxx 查看是否是fat的文件,如果是fat的文件,fat文件瘦身:lipo xxx-thin arm64 -output xxx.arm64
  6. 获取符号表:restore-symbol xxx.arm64 -o xxx.symbol
  7. 然后将xxx.symbol替换IPA包里原来的xxx二进制,记得给xxx.symbol改名啊
  8. 扔到IPAPatch里调试吧

恢复block的符号表

iOS中 block 是一段特殊的代码块,反汇编后再汇编语言中以sub_xxxx表示,例如:sub_123456ASD,我们恢复block的符号表需要借助IDA和python脚本来实现,需要下载这个脚本

  1. Mac版IDAfn+Alt+F7打开脚本,或者menu+文件+Script file 加载
  2. IDA控制台输出Search completed表示(也有可能不出现,截图中没出现,但是已经有block_symbol.json文件了),恢复完成。在IDA打开文件路径有:block_symbol.jsoniOS逆向----恢复符号表
    iOS逆向----恢复符号表
  3. 在原先恢复函数符号表的Mach-O文件中,继续恢复Block符号表restore-symbol xxx.symbol -o xxx.symbol -j block_symbol.json
    iOS逆向----恢复符号表
  4. 然后重新打包用IPAPatch运行即可

相关文章:

  • 2021-05-25
  • 2022-12-23
  • 2021-08-25
  • 2021-05-17
  • 2021-08-20
  • 2022-12-23
  • 2021-08-20
猜你喜欢
  • 2021-11-14
  • 2022-12-23
  • 2021-05-19
  • 2021-11-07
  • 2021-10-22
  • 2021-06-15
  • 2022-01-21
相关资源
相似解决方案