我正在寻找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. iPhone Cocos2d游戏更改为iPad游戏
- 3. 面向游戏的汇编Lisp
- 4. 如何确定输出迭代器是否已被修改
- 5. 快速确定文件夹内容是否已被修改
- 6. 试图确定文件是否已被编码
- 7. 确定Object是否被更改的最佳方法是什么?
- 8. 确定修改键是否被按下
- 9. 确定在Flash/AIR游戏
- 10. 确定XNA游戏滞后
- 11. 确定游戏是否第一次启动 - Cocos2d
- 12. 如何确定结构中的值是否已更改?
- 13. 如何确定DataGrid行是否已在MVVM中更改?
- 14. 如何确定电话号码是否已更改?
- 15. Android - 确定用户访问后偏好是否已更改PreferenceActivity
- 16. 如何确定数据库是否已更改?
- 17. 使用StreamReader来确定文件是否已更改
- 18. 如何确定Django模型中的字段是否已更改
- 19. 确定数据库是否已更改的最佳方法?
- 20. 如何确定我的ractive计算值是否已更改
- 21. (已关闭)Conway的生命游戏未正确更新(Python)
- 22. 是否有反汇编程序生成可编译的汇编源代码?
- 23. 确定查询是否会更改DB
- 24. 游戏编程
- 25. 游戏编程
- 26. 是否有程序将x86代码更改为汇编代码?
- 27. AspectJ反汇编
- 28. 检查文件是否已被修改
- 29. 测试JavaScript是否已被修改
- 30. 函数来检查游戏是否已结束
@Liam:有可能的,OP希望他自己的比赛,以检查它是否被涂改。如果某人有能力解除/重新编译,他们也应该能够完全取消检查(或更改您正在比较的校验和) – Flater
@Liam这不适用于Windows 7. Unity可以在多种平台上运行。我认为OP是或者应该对移动设备更感兴趣,特别是可以轻松修改的Android。哈希检查也可以被删除。有可能。任何if语句都可以从代码中删除。 – Programmer
@Liam当然,散列确实是不同的,但是*是不相关的*,因为检查散列并且如果它错误就不运行程序的代码不会运行,所以散列错误的事实*无关紧要*。 – Servy