“Unstripping”二进制文件:使用 Pwndbg 在 GDB 中恢复调试信息

主要观点:GDB 在调试缺少调试符号(即“剥离二进制文件”)的二进制文件时会失去重要功能,作者在 Trail of Bits 扩展了 Pwndbg 以改善剥离调试体验,包括与 Binary Ninja 集成和添加 Go 调试功能。
关键信息:

  • GDB 调试剥离二进制文件的问题,如函数和变量名变为无意义地址等。
  • 扩展 Pwndbg 的两个新功能:与 Binary Ninja 集成以增强 GDB+Pwndbg 智能,能为 Go 二进制调试转储 Go 结构;创建“go-dump”命令用于 Go 值转储。
  • Binary Ninja 集成的细节,如安装 XML-RPC 服务器、获取令牌进行语法高亮反编译、显示当前程序计数器和设置断点等,以及同步栈变量名的实现难点和方法。
  • Go 调试中“go-dump”命令的功能,能解析和转储任意嵌套类型,还可通过解析运行时类型对象获取更多信息,有两种转储方式。
  • 未来可改进的方向,如为 Pwndbg 增加对更多反编译器的支持,为 Go 调试添加对 goroutine 的更好支持。
    重要细节:
  • Binary Ninja 有通用脚本 API,可用于同步符号等信息。
  • 实现同步栈变量名时需推导帧基地址。
  • Go 编译器为程序中使用的每个类型发出运行时类型对象,包含多种信息。
  • “go-dump”命令的转储效果展示,如转储简单和复杂类型。
  • 作者感谢 Trail of Bits 提供机会,感谢经理和 Pwndbg 社区的帮助。
阅读 17
0 条评论