我试图研究 Macbook 上的不同应用程序并查看它们的源代码,以便更好地了解某些应用程序的构建方式以及它们使用的语言/框架。也许我的困惑部分来自于对应用程序基础架构的了解不够深入。
但是,我已经在计算机上安装了多个应用程序,将其放入其内容中并查看了所有目录,但似乎找不到任何实际的源代码。我找到的只有 CodeSigniture 文件、CodeResource 文件和一些代码,例如 .plist 文件。如何找到 .js/.py/.c/.cpp 文件?
我想知道他们是否以某种方式加密这些文件以维护安全/知识产权。但如果是这样,我的计算机会读取什么来执行这些应用程序?
非常感谢您的任何见解!
答案1
程序可以被解释(每次需要指令时,源代码都会被解析并“即时”转换为系统级指令)或编译(源代码被解析并转换为系统级指令一次,系统级指令被存储以供以后使用和重用)。如果应用程序是用通常编译的语言编写的 - C、C++、C#、Pascal 等 - 您将看不到源代码;程序运行不需要安装在您的计算机上,只需要系统级指令(这就是 Windows 中所谓的 EXE 文件)。
其他语言,如 ECMAscript、PowerShell、Perl、Python、Ruby 等,都是解释型的,对于这些语言,您通常可以通过查看已安装的文件来找到源代码。
请注意,一些解释型语言的实现也允许使用“包装器”,将源代码转换为“编码”形式(例如 Base64)并附加到自定义解释器,以便它看起来对于用户来说,就像一个编译好的程序(即 Windows 上的 EXE)。如果您的应用程序是使用其中一种程序制作的,那么您将无法轻松找到源代码。
答案2
应用程序内部没有源代码。
他们是已编译从源代码到实际的可执行文件 - 如果您查看 TheApplication.app/Contents/MacOS/TheApplication - 那就是编译后的应用程序本身。您在那里看到的几乎所有其他内容要么是应用程序所依赖的库,要么是一个简单的纯文本 xml 文件,用于管理诸如语言更改等内容。
还请注意,如果您篡改了来自公认开发者、App Store 等的应用,您可能会将其标记为不再匹配其代码签名,并且您需要将其删除并重新下载原始版本。macOS 对篡改应用的要求越来越严格。Catalina 将
对此更加严格,不仅需要代码签名,还需要公证,使得第三方修改应用程序几乎不可能。
答案3
如果你想对二进制/可执行文件进行逆向工程,那么你可以选择使用吉德拉。YouTube 上有一些独立开发者的教程也可以帮助你入门(我发现这个很平易近人)。
正如其他答案中提到的,编译语言(例如*.cpp
,,,*.c
)*.java
不会整齐地提供文件,因此您需要进行一些挖掘。