我正在尋找Unity函數以確定我的遊戲是否以任何方式被反編譯/重新編譯或修改。確定遊戲是否已被反彙編/更改
回答
是的,這裏有一個Unity函數,但它仍然可以繞過。
這可以通過Application.genuine
來完成,當應用程序在構建後以任何方式被修改時,它將返回false。
if (Application.genuineCheckAvailable)
{
if (Application.genuine)
{
Debug.Log("Not tempered");
}
}
的問題是,如果這個人是足夠聰明地進行反編譯,修改和編譯的比賽中,他/她也可以去除上面的檢查,以便在支票上面變得無用。只要它在玩家的機器上運行,任何類型的程序genuinity或真實性檢查都可以被刪除。
編輯
可以使其難以通過執行以下操作來回避:
。去文件 - >構建設置..然後選擇你的平臺。
。點擊上播放器設置 - >其他設置,然後從單聲道改變腳本後端到IL2CPP(C++)。
這將使它更難以規避,但仍有可能被規避。
TL; DR:那坦率地說是不可能的。
你永遠無法確定你的程序是否被反編譯,因爲不存在確定是否發生的措施。即使您拼湊並搞亂了數據,每個可執行文件也可以至少被拆分爲彙編程序。儘管使用混淆軟件,您可能難以理解您的源代碼。最終混淆器將是M/o/Vuscator,它將所有彙編器命令更改爲mov指令,這使得理解任何事情都很困難。但它也很慢,可能不是你想要的(順便說一下,這是有效的,因爲mov-instruction在x86指令集中是巡迴完成的,有很好的關於它的討論here)。當您遵循這一趨勢further down the rabbit hole時,您也可以使用完全相同的彙編代碼(大約10-20條指令)來創建所有可能的程序,從而通過簡單地分解代碼就無法獲得源代碼。
保持在可能的領域:不,你不能阻止人們拆卸或反編譯你的代碼。但是你可以讓它更難理解(不是不可能)。但是,檢測可執行文件中的更改是可能的。對你來說可能不太可行。
主要問題在於,您構建到應用程序中以檢測更改的任何代碼都可以修補。所以你需要防止這種情況。但是沒有實際的方法來阻止......
如果您嘗試使用原始簽名檢測應用中的更改,並將其與實際簽名進行比較,則可以在重新編譯的版本中排除該檢查。您可以嘗試驗證服務器上的簽名,但仍可以通過刪除服務器檢查來繞過該簽名。你可以強制一個服務器檢查多人遊戲,但我們只會使用假簽名。如果您然後想要計算服務器上的簽名以防止篡改,我們只會給您原始文件並運行重新編譯的文件。
有一種方法(如上所述,儘管不可行)實際上絕對保護部分代碼不被反編譯。該機制被稱爲「BlurryBox」,並在德國的KIT開發。由於我似乎無法找到合適的文檔作爲參考,因此以下是它實現此目的的方法。
該機制使用具有加密存儲和微控制器的棒進行加密。您將您想要保護的代碼部分(定期調用的某些內容是必需的,但不是那麼重要)放入加密存儲中。由於無法檢索密鑰[需要的引證],因此無法訪問代碼。微控制器然後從程序中獲取命令,以給定的參數調用存儲器中的一個加密函數並返回結果。因爲無法讀取需要分析其行爲的代碼。這裏是盒子的「模糊」部分。您存儲的每個功能都需要有一組很小且明確定義的允許參數。其他每一組參數都會導致陷阱死亡,從而導致設備死亡。由於攻擊者沒有關於什麼有效參數的規範,所以這種方法爲您提供了有效的安全性,以防止篡改代碼(如他們所述)。雖然我從記憶中寫下這些內容,但是如何確切地工作,可能會有一些錯誤。
您可以嘗試模仿與服務器這種行爲可以控制(代碼在服務器和IP禁止對試圖理解的代碼)
非常感謝您的幫助 –
- 1. 確定文件是否已更改
- 2. 是否可以確定SIM /電話號碼是否已更改?
- 3. iPhone Cocos2d遊戲更改爲iPad遊戲
- 4. 更改遊戲中的遊戲控制
- 5. 確定文件是否已被選中
- 6. 面向遊戲的彙編Lisp
- 7. 用例圖是否正確? Tictactoe遊戲
- 8. 試圖確定文件是否已被編碼
- 9. 如何確定網頁是否已被修改?
- 10. 快速確定文件夾內容是否已被修改
- 11. 如何確定輸出迭代器是否已被修改
- 12. 確定類是否已更改(不是對象)
- 13. 確定Object是否被更改的最佳方法是什麼?
- 14. 確定修改鍵是否被按下
- 15. 確定XNA遊戲滯後
- 16. 確定在Flash/AIR遊戲
- 17. 確定遊戲是否第一次啓動 - Cocos2d
- 18. 如何確定我的ractive計算值是否已更改
- 19. Android - 確定用戶訪問後偏好是否已更改PreferenceActivity
- 20. 如何確定DataGrid行是否已在MVVM中更改?
- 21. 使用StreamReader來確定文件是否已更改
- 22. 如何確定電話號碼是否已更改?
- 23. 如何確定Django模型中的字段是否已更改
- 24. 確定數據庫是否已更改的最佳方法?
- 25. 如何確定結構中的值是否已更改?
- 26. 水豚 - 確定選擇器數量是否已更改
- 27. 如何確定數據庫是否已更改?
- 28. 使用Webdriver確定頁面是否已更改
- 29. 反向遊戲python
- 30. 是否有反彙編程序生成可編譯的彙編源代碼?
@Liam:有可能的,OP希望他自己的比賽,以檢查它是否被塗改。如果某人有能力解除/重新編譯,他們也應該能夠完全取消檢查(或更改您正在比較的校驗和) – Flater
@Liam這不適用於Windows 7. Unity可以在多種平臺上運行。我認爲OP是或者應該對移動設備更感興趣,特別是可以輕鬆修改的Android。哈希檢查也可以被刪除。有可能。任何if語句都可以從代碼中刪除。 – Programmer
@Liam當然,散列確實是不同的,但是*是不相關的*,因爲檢查散列並且如果它錯誤就不運行程序的代碼不會運行,所以散列錯誤的事實*無關緊要*。 – Servy