无法使用 GDB 反汇编/跟踪加密的 Mach-o 二进制文件

逆向工程 拆卸 数据库 料斗 男子气概 雷达2
2021-06-23 04:11:05

我正在尝试分析加密的 Mach-O 二进制文件(非 iPhone二进制文件),并且观察到以下奇怪的行为:

  • 当我将此二进制文件加载到 GDB 并尝试在入口点指示的地址处反汇编代码时,GDB 返回垃圾而不是任何有意义的 asm。
  • 雷达2也会发生同样的情况
  • Hopper 反汇编器显示相同的入口点地址,但提供清晰的反汇编。

我试图在 GDB 中执行这个应用程序 - 根本没有任何作用。令人惊讶的是,从终端执行这个应用程序效果很好。

我担心我的目标已经以某种 GDB/radare2 无法应对的方式被打包/压缩/混淆。令人惊讶的是,Hopper 处理得非常好。

不幸的是,我没有完整版的 Hopper。此外,我希望能够在 GDB 中调试这个应用程序。有没有办法做到这一点?

有没有其他人遇到过这样的事情?如果是这样,我应该如何进行?

2个回答

实际上,GDB 依靠 GNU binutils 来打开和反汇编二进制文件。因此,二进制格式的管理是通过libbfd.so.

通常,MacOS X binutils 带有 Mach-O 管理,但也可能是您使用了有问题的包。或者,您也可以尝试在 MacOS X 以外的其他系统上打开 Mach-O,而在其他系统上,Mach-O 支持极少添加到默认包中。

获得 Mach-O 支持(以及 GNU binutils 中所有可能的格式和体系结构)的最佳方法是使用选项--enable-targets=all.

就个人而言,我使用的是 Debian 不稳定版。我习惯于重新编译从源代码中获取的整个包。以下是要遵循的步骤:

  1. 将以下行添加到您的/etc/apt/sources.list

    deb-src ftp://ftp.debian.org/debian/ unstable main contrib
    
  2. 更新您的软件包列表:

    su -c 'apt-get update'
    
  3. 获取编译包所需的binutils包:

    su -c 'apt-get build-dep binutils'
    
  4. 获取binutils的来源

    apt-get source binutils
    
  5. 进入binutils源码目录:

    cd binutils-x.x.x/
    
  6. binutils-x.x.x/debian/rules改写下面一行像这样(去除所有其他目标):

     multiarch_targets = all
    
  7. 构建包(这可能需要很长时间):

    dpkg-buildpackage -rfakeroot -us -uc
    
  8. 安装binutils-multiarch软件包:

    dpkg -i binutils-multiarch_x.x.x_amd64.deb
    

非常感谢您的回答!

我做了一些更多的研究,发现了以下内容:

  • 因为我的目标是 Macintosh 系统的一部分,所谓的“Apple 二进制保护”可以保护它不被直接反汇编/调试。

otool -l [target]" 显示以下信息:

Load command 0
  cmd LC_SEGMENT
  cmdsize 532
  segname __TEXT
  vmaddr 0xb8000000
  vmsize 0x001df000
  fileoff 0
  filesize 1961984
  maxprot 0x00000007
  initprot 0x00000005
  nsects 7
 flags 0x8          <-------- "WARNING: encrypted!!!"

因此,在尝试使用 GDB 之前,我需要找到一种解密二进制文件的方法。我读到可以使用 GDB、dd 和任何合适的十六进制编辑器手动执行,但我找不到任何逐步说明。

该工具声称能够进行解密:http : //tumblr.alanquatermain.me/post/97884723/apple-binary-protection-tool

但这对我不起作用。

这里有没有其他人处理过这样的二进制文件?提前谢谢了!

这里有一些关于这个保护模式的更多描述:http : //osxbook.com/book/bonus/chapter7/binaryprotection/

http://reverse.put.as/2009/06/30/how-to-dump-an-apple-protected-binary/

更新:我终于设法使用这个工具解密了我的目标:http : //www.insanelymac.com/forum/topic/285375-apb-decrypt-for-mountain-lion-lion-and-snow-leopard-apple -受保护的二进制解密器/

GDB 使用“disas 0xb800e5c4”显示正确的反汇编,其中 0xb800e5c4 表示入口点。虽然从终端启动时解密的二进制文件可以工作,但在 GDB 内部步进和运行仍然不起作用......