簡體   English   中英

使程序專門從另一個程序執行

[英]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,普通用戶不知道該參數。

我有兩個建議可以實現您想要的。

  1. 第二個exe是否需要實際上是一個exe? 您可以改為圖書館叫嗎? 在啟動器進程下運行的線程中調用該功能。

  2. 使用未發布的命令行參數。 如果未提供,請終止第二個exe。 這並不完全安全,但是我相信這就是現代游戲啟動器的工作方式。

歸根結底,我認為如果沒有“默默無聞的安全性”,沒有辦法做到這一點

您可以在啟動器中創建一個Guid作為名稱的互斥鎖。 然后檢查程序中的互斥鎖。 就像其他人所說的那樣,這不是很安全,但是會阻止大多數人直接啟動該程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM