
我正在嘗試研究 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
不會完全提供文件,因此您將進行一些挖掘。