2017-10-17 103 views
2

我正在尋找Unity函數以確定我的遊戲是否以任何方式被反編譯/重新編譯或修改。確定遊戲是否已被反彙編/更改

+1

@Liam:有可能的,OP希望他自己的比賽,以檢查它是否被塗改。如果某人有能力解除/重新編譯,他們也應該能夠完全取消檢查(或更改您正在比較的校驗和) – Flater

+0

@Liam這不適用於Windows 7. Unity可以在多種平臺上運行。我認爲OP是或者應該對移動設備更感興趣,特別是可以輕鬆修改的Android。哈希檢查也可以被刪除。有可能。任何if語句都可以從代碼中刪除。 – Programmer

+1

@Liam當然,散列確實是不同的,但是*是不相關的*,因爲檢查散列並且如果它錯誤就不運行程序的代碼不會運行,所以散列錯誤的事實*無關緊要*。 – Servy

回答

4

是的,這裏有一個Unity函數,但它仍然可以繞過。

這可以通過Application.genuine來完成,當應用程序在構建後以任何方式被修改時,它將返回false。

if (Application.genuineCheckAvailable) 
{ 
    if (Application.genuine) 
    { 
     Debug.Log("Not tempered"); 
    } 
} 

的問題是,如果這個人是足夠聰明地進行反編譯,修改和編譯的比賽中,他/她也可以去除上面的檢查,以便在支票上面變得無用。只要它在玩家的機器上運行,任何類型的程序genuinity或真實性檢查都可以被刪除。


編輯

可以使其難以通過執行以下操作來回避:

。去文件 - >構建設置..然後選擇你的平臺。

。點擊上播放器設置 - >其他設置,然後從單聲道改變腳本後端IL2CPP(C++)。

這將使它更難以規避,但仍有可能被規避。

+2

@Liam考慮到兩者都是平凡的,不,不是。它們同樣可以顛覆。 – Servy

+1

@Servy:爲了擴展您的觀點,自定義校驗和需要存儲在某個地方,這使得存儲校驗和的安全性成爲**額外的弱點。如果他們可以篡改存儲,他們可以改變你比較的校驗和。 – Flater

+0

感謝您的支持,對我來說似乎很清楚 –

0

TL; DR:那坦率地說是不可能的。

你永遠無法確定你的程序是否被反編譯,因爲不存在確定是否發生的措施。即使您拼湊並搞亂了數據,每個可執行文件也可以至少被拆分爲彙編程序。儘管使用混淆軟件,您可能難以理解您的源代碼。最終混淆器將是M/o/Vuscator,它將所有彙編器命令更改爲mov指令,這使得理解任何事情都很困難。但它也很慢,可能不是你想要的(順便說一下,這是有效的,因爲mov-instruction在x86指令集中是巡迴完成的,有很好的關於它的討論here)。當您遵循這一趨勢further down the rabbit hole時,您也可以使用完全相同的彙編代碼(大約10-20條指令)來創建所有可能的程序,從而通過簡單地分解代碼就無法獲得源代碼。

保持在可能的領域:不,你不能阻止人們拆卸或反編譯你的代碼。但是你可以讓它更難理解(不是不可能)。但是,檢測可執行文件中的更改是可能的。對你來說可能不太可行。

主要問題在於,您構建到應用程序中以檢測更改的任何代碼都可以修補。所以你需要防止這種情況。但是沒有實際的方法來阻止......

如果您嘗試使用原始簽名檢測應用中的更改,並將其與實際簽名進行比較,則可以在重新編譯的版本中排除該檢查。您可以嘗試驗證服務器上的簽名,但仍可以通過刪除服務器檢查來繞過該簽名。你可以強制一個服務器檢查多人遊戲,但我們只會使用假簽名。如果您然後想要計算服務器上的簽名以防止篡改,我們只會給您原始文件並運行重新編譯的文件。

有一種方法(如上所述,儘管不可行)實際上絕對保護部分代碼不被反編譯。該機制被稱爲「BlurryBox」,並在德國的KIT開發。由於我似乎無法找到合適的文檔作爲參考,因此以下是它實現此目的的方法。

該機制使用具有加密存儲和微控制器的棒進行加密。您將您想要保護的代碼部分(定期調用的某些內容是必需的,但不是那麼重要)放入加密存儲中。由於無法檢索密鑰[需要的引證],因此無法訪問代碼。微控制器然後從程序中獲取命令,以給定的參數調用存儲器中的一個加密函數並返回結果。因爲無法讀取需要分析其行爲的代碼。這裏是盒子的「模糊」部分。您存儲的每個功能都需要有一組很小且明確定義的允許參數。其他每一組參數都會導致陷阱死亡,從而導致設備死亡。由於攻擊者沒有關於什麼有效參數的規範,所以這種方法爲您提供了有效的安全性,以防止篡改代碼(如他們所述)。雖然我從記憶中寫下這些內容,但是如何確切地工作,可能會有一些錯誤。

您可以嘗試模仿與服務器這種行爲可以控制(代碼在服務器和IP禁止對試圖理解的代碼)

+0

非常感謝您的幫助 –