如何检查MacOS可执行文件(Mach-O)?

时间:2018-06-02 13:56:20

标签: macos executable mach-o

如何查看有关MacOS二进制文件的一些基本信息,特别是用于构建它的内容,它链接的框架以及它正在使用的系统调用?

我尝试了nmotool -L,但他们的输出只是部分有用。

例如,什么表明二进制文件是用xcode或golang编译器构建的?

NB。我对逆向工程macos二进制文件不感兴趣。我只想更好地了解我的系统上运行的内容,只使用已经包含OOTB的工具。

1 个答案:

答案 0 :(得分:2)

使用的编译器不是一个简单的问题。有些编译器会嵌入有关自己的信息,有时您会通过运行strings找到它,但不能保证。也就是说,Mac上的答案几乎总是clang,所以通常很难获得基础知识。举个例子:

strings iTunes | grep clang
COMPILER=clang-9.0.0

但这只是运气(甚至可能不准确)。

IDA Pro做得很好,是逆向工程工作的黄金标准。如果这种事情对你很重要,那么IDA Pro就是这个工具。它很贵。

要获取它在运行时链接的框架列表,otool -L是您想要的工具。我不明白你的意思,并不是非常易读。"它只打印出所有框架,每行一个。很难想象比这更具可读性的东西。你在这找什么?

otool -L不会告诉你使用了什么静态库,所以"它构建的框架是什么?#34;可能太宽泛而无法回答。您通常可以找到众所周知的静态库(例如OpenSSL)的符号,但是要知道二进制文件中包含的内容并不容易,特别是在调试信息被剥离的情况下。 (如果有调试信息,那么文件路径将可用,这可以告诉你更多关于它是如何构建的。)

没有简单的静态方法来获取所有系统调用的列表,因为这些调用可能隐藏在库中。 nm通常是你想要的。它包括许多不是"系统"但是,因为它会包含从外部来源链接的每个符号(你可能想要nm -ju之类的东西)。再一次,我不确定你的意思是什么,并不是非常易读。"它是每行一个符号。

要在运行时获取系统调用列表,请使用dtruss运行应用程序。它会输出每个系统调用,并将重点关注实际的"系统"电话(即系统电话)。