[英]Making program exclusively executable from another program
我想為一個單獨的exe創建啟動程序。 我需要啟動器外部無法訪問主程序(而不是啟動器)。
從根本上講,不可能安全地執行此操作。 啟動器可以執行的任何操作,用戶也可以執行。
通過使啟動器將經過密碼簽名的時間戳傳遞給單獨的程序,可以使用戶更難。 但是,用戶可以從啟動器中提取私鑰並手動簽名時間戳。
您可以使程序檢查其父PID,並確保使用您自己的私鑰對啟動器EXE進行了簽名,但是用戶可以修改程序以刪除該檢查。
您還可以使用啟動器調用的方法將EXE轉換為DLL,但用戶可以編寫自己的EXE並調用該方法。
一種選擇是在運行第二個程序時需要一個參數,盡管這很容易被利用。 您沒有真正說這是什么意思,所以可能就足夠了。
根據啟動程序的功能,您可能能夠檢查這些操作是否已完成,如果沒有,則退出程序。
如果您需要這樣做特別安全,則可以設置一些私鑰-公鑰系統,並對動態信息(例如時間戳)進行加密。 老實說,我認為這將是更多的工作,而不是值得的,並且如果其中任何一個程序需要反匯編,它仍然可以被利用。
您可能需要將主要功能實現為單獨的DLL文件,然后從啟動的應用程序中調用它。 這是主要功能不是完全獨立的應用程序的方式,因此它可能並不是您想要的,但是它是分開的,需要運行另一個應用程序(啟動器)。
適當的解決方案取決於您要防止的問題。
如果您的目標是“在任何情況下,除通過A.exe之外,任何熟練的黑客都不會啟動B.exe”,這很難實現。
如果您的目標是“我不希望用戶因為應使用A.exe而意外啟動B.exe”,則有一些選擇。 例如,將命令行參數從A.exe傳遞到B.exe,普通用戶不知道該參數。
我有兩個建議可以實現您想要的。
第二個exe是否需要實際上是一個exe? 您可以改為圖書館叫嗎? 在啟動器進程下運行的線程中調用該功能。
使用未發布的命令行參數。 如果未提供,請終止第二個exe。 這並不完全安全,但是我相信這就是現代游戲啟動器的工作方式。
歸根結底,我認為如果沒有“默默無聞的安全性”,沒有辦法做到這一點
您可以在啟動器中創建一個Guid作為名稱的互斥鎖。 然后檢查程序中的互斥鎖。 就像其他人所說的那樣,這不是很安全,但是會阻止大多數人直接啟動該程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.