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


将二进制文件加载到GDB中并尝试在入口点指示的地址处反汇编代码,GDB返回垃圾,而不是任何有意义的asm。
radare2也是如此,
反汇编程序显示了相同的入口点地址,但提供了清晰的反汇编。

我试图在GDB中执行此应用程序-根本无法执行。
令人惊讶的是,从终端执行该应用程序效果很好。

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

不幸的是,我没有完整版本的Hopper。此外,我希望能够在GDB中调试此应用。有什么办法吗?

其他人遇到过这种情况吗?如果是这样,我应该如何进行?

评论

什么是二进制?如何获得“入口点指示的地址”以及如何反汇编代码?向我们展示一些屏幕截图或文本转储。细节越多越好。

好的,我要分析的二进制文件是Mac OS系统软件的一部分。它似乎是所谓的“ Apple保护”二进制文件之一。我最近发现了对此保护的一些描述:osxbook.com/book/bonus/chapter7/binaryprotection甚至是一个声称能够在此处删除这种加密的命令行工具:tumblr.alanquatermain.me/post/97884723/ …我刚刚尝试过,但是会产生更多的垃圾...

您正在使用哪个端口? MacPort还是其他端口?

雷达2是否使用libbfd?我以为是用他自己的库来管理二进制格式,不是吗?

Radare2使用自己的Mach-O解析器,该解析器似乎不支持加密的二进制文件。不幸的是,它包含一些错误:反汇编列表移动了四个字节。我即将提交适当的错误报告。

#1 楼

实际上,GDB依靠GNU binutils打开和反汇编二进制文件。因此,二进制格式的管理是通过libbfd.so来完成的。通常,MacOS X binutils附带了Mach-O管理,但可能是您使用的是错误的程序包。或者,您也可以尝试在MacOS X以外的其他系统上打开Mach-O,而在其他系统上,很少将Mach-O支持添加到默认软件包中。

获得Mach-O支持(以及GNU binutils中所有可能的格式和体系结构)的最好方法是使用选项--enable-targets=all编译该软件包。

我个人正在使用Debian不稳定版。并且我习惯于重新编译从源头获取的整个软件包。请按照以下步骤操作:



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

deb-src ftp://ftp.debian.org/debian/ unstable main contrib



更新软件包列表:

su -c 'apt-get update'



获取编译binutils软件包所需的软件包:

su -c 'apt-get build-dep binutils'



获取binutils软件包的源代码:

apt-get source binutils



进入binutils源代码目录:

cd binutils-x.x.x/



binutils-x.x.x/debian/rules中,像这样重写以下行(删除所有其他目标):

 multiarch_targets = all


< br生成软件包(可能要花一些时间):

dpkg-buildpackage -rfakeroot -us -uc



安装binutils-multiarch软件包:



#2 楼

非常感谢您的回答!

我进行了更多研究,发现了以下内容:


,因为我的目标是Macintosh系统的一部分,所以所谓的“ Apple二进制保护”可防止直接拆卸/调试。

otool -l [目标]”揭示了以下信息:

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

此工具声称可以解密:
http://tumblr.alanquatermain.me/post/97884723/apple-binary-protection-tool

,但这对我不起作用。

这里有没有其他人使用过这样的二进制文件?
在此先谢谢了!

这里此保护方案的更多说明:
http://osxbook.com/book/bonus/chapter7/binaryprotection/

http:// re verse.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-protected-binary-decryptor/

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

评论


不要发表评论作为答案。如有必要,请编辑问题以添加详细信息。

–伊戈尔·斯科钦斯基♦
13年7月26日在23:59

我同意伊戈尔的观点,而且,这是另一个问题。请填写另一个问题,并从头开始。

–恐怖
13年7月27日在12:19