我正在開發一款游戲,并考慮了使其可修改的方法。通常,引擎出于各種原因使用腳本語言。其中之一是引擎可以控制 mod 看到的內容,并且可以為用戶提供一定程度的安全性,例如不允許檔案訪問或網路訪問,或以某種方式限制它。
對于我的游戲,我想深入研究將模組作為已編譯的 DLL 提供的可能性。從安全角度來看,這里的問題是dll當然可以包含任何代碼,所以我完全無法控制檔案/網路等。dll代碼也可能破壞游戲的記憶體。解決此問題的一種方法是創建第二個行程,該行程根本無權訪問磁盤/網路,并且只能使用主游戲行程提供的 API。記憶體可以在行程之間共享,但是在切換到 mods 行程之前,頁面可以被標記為只讀,因此沒有機會破壞記憶體。
是否有可能創建這樣一個基本上無法訪問系統或可控子集的行程?我正在考慮為 Windows API 創建一個白名單,例如允許分配但不允許檔案訪問。我能找到的所有關于安全的檔案都是關于 OTHERS 可以對流程做什么/對流程做什么,而不是流程本身被允許做什么。
uj5u.com熱心網友回復:
使用受限制的子行程絕對是正確的方法,但沒有一個 API 可以呼叫來完成這項作業。
您可能應該從令牌開始CreateRestrictedToken并盡可能地限制令牌。如果您是從頭開始設計它,您可能可以SaferComputeTokenFromLevel用來創建一個SAFER_LEVELID_UNTRUSTED或更低的令牌,但并非一切都在這個級別上正常作業。
將 UAC完整性級別設定為低(或更低)(TokenIntegrityLevel)。理想情況下,您會使用AppContainer,但該 API 領域的檔案不是很好。谷歌瀏覽器可能會這樣做,所以你可以看看他們是如何做到的。
您現在應該創建一個作業物件,并至少使用JobObjectBasicUIRestrictions.
現在是開始使用 暫停的行程的時候了CreateProcessAsUser。
將行程添加到作業并恢復其執行。
新行程應該做的第一件事就是呼叫SetProcessMitigationPolicy.
你如何與孩子交流是它自己的主題。也許是CreateFileMapping為了創建一個頁面檔案支持的記憶體區域。使用管道或事件來控制通信。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/417739.html
標籤:
下一篇:從帖子或URL中洗掉重復的引數
