2016-05-23 42 views
0

我試圖停止(或至少檢測)其他程序注入我的。這裏是他們是如何做的:檢測VirtualMachine.attach()/ virtualMachine.loadAgent

VirtualMachineDescriptor vmd = /* my program */; 
VirtalMachine vm = VirtualMachine.attach(vmd); 
vm.loadAgent(new File('custom-jar.jar')); /* their modified code */ 
vm.detach(); 

回答

0

根據this鏈接:

使用Java編寫的程序連接API必須由同一個UNIX用戶ID作爲目標進程所擁有。此約束確保只有目標進程所有者或根可以將其他應用程序附加到目標進程。

這意味着:「攻擊者」可能首先會完全訪問運行JVM的系統。我想在確保其他人擁有的系統方面確實沒有太多可以做的事情。

+0

是的,它是爲了防止在遊戲中作弊。我知道這很容易繞過,但我的玩家正在使用免費的公共祕籍 - 我只想保護這些已知的公共節目。 – jaym

+0

如果您不在JVM的控制之下,一切皆有可能。即使你編寫代碼試圖打破這些代理......你如何防止寫入其他類型的代理來破壞你的新代碼?人們會在操作JVM時阻止它在啓動過程中已經被入侵?我想大遊戲公司在他們自己的**服務器上運行遊戲是有原因的。如果您的遊戲的所有重要方面「僅存在於」您的客戶擁有的系統上......從長遠來看,沒有辦法阻止作弊。 – GhostCat

+0

我知道從長遠來看這並不會阻止它,但它會阻止我的大部分用戶羣 - 因爲創建這些作弊的人不會安裝包含此代碼的我的mod。 – jaym