
我想攔截任意可執行檔的執行。假設有一個二進位檔案/usr/bin/binary
。每當有人啟動該二進位時,我都想啟動我自己的可執行檔。我想從中決定是否啟動原始二進位。最終,我想在原始二進位和使用者之間插入墊片。
有人問過類似的 Windows 問題:我想在給定的程式運行之前攔截它並先運行我自己的程序
我擁有系統的管理員權限。但我無法將原始二進位檔案重新定位到其他地方。
UPD正如@dirkt 所問:
- 將有一個我想要攔截的二進位檔案的硬編碼清單。
答案1
免責聲明:我對 MacOS 世界一無所知,但我會給你一些在 GNU/Linux 下做到這一點的方法......也許會有所幫助。
嗯...我會像 @dirkt 一樣回复(又名包裝器,稱為binary
它會指向binary.real
)但是:
- 如果使用者知道你的機制,那麼他可以
binary.real
直接啟動。 - 您必須為每個要「監視」的程式複製此機制。
所以讓我們在其他地方挖掘一下...
核心模組
在 GNU/Linux 世界中,我會寫一個核心模組來掛鉤 exec 系統呼叫並根據需要實作 ACL……但這有點過頭了。看起來可以為 Mac OS 開發內核模組......但我不知道 Apple 是否允許這種駭客行為。
LD_PRELOAD 駭客
使用眾所周知的LD_PRELOAD
機制(看起來是DYLD_INSERT_LIBRARIES
在你的世界上),您可以重寫系統任何函式庫的任何C函數。所以你只需:
- 編寫一個實作 exec*() 的動態函式庫。
- 實施您的 ACL。
- 確保每個使用者會話(圖形會話、終端)都在啟動時預先載入了您的庫,這要歸功於
DYLD_INSERT_LIBRARIES
)
瞧!