macOS:攔截程式執行

macOS:攔截程式執行

我想攔截任意可執行檔的執行。假設有一個二進位檔案/usr/bin/binary。每當有人啟動該二進位時,我都想啟動我自己的可執行檔。我想從中決定是否啟動原始二進位。最終,我想在原始二進位和使用者之間插入墊片。

有人問過類似的 Windows 問題:我想在給定的程式運行之前攔截它並先運行我自己的程序

我擁有系統的管理員權限。但我無法將原始二進位檔案重新定位到其他地方。

UPD正如@dirkt 所問:

  • 將有一個我想要攔截的二進位檔案的硬編碼清單。

答案1

免責聲明:我對 MacOS 世界一無所知,但我會給你一些在 GNU/Linux 下做到這一點的方法......也許會有所幫助。

嗯...我會像 @dirkt 一樣回复(又名包裝器,稱為binary它會指向binary.real)但是:

  1. 如果使用者知道你的機制,那麼他可以binary.real直接啟動。
  2. 您必須為每個要「監視」的程式複製此機制。

所以讓我們在其他地方挖掘一下...

核心模組

在 GNU/Linux 世界中,我會寫一個核心模組來掛鉤 exec 系統呼叫並根據需要實作 ACL……但這有點過頭了。看起來可以為 Mac OS 開發內核模組......但我不知道 Apple 是否允許這種駭客行為。

LD_PRELOAD 駭客

使用眾所周知的LD_PRELOAD機制(看起來是DYLD_INSERT_LIBRARIES 在你的世界上),您可以重寫系統任何函式庫的任何C函數。所以你只需:

  1. 編寫一個實作 exec*() 的動態函式庫。
  2. 實施您的 ACL。
  3. 確保每個使用者會話(圖形會話、終端)都在啟動時預先載入了您的庫,這要歸功於DYLD_INSERT_LIBRARIES

瞧!

相關內容