我正在寻找Unity功能,以确定我的游戏是否已被解编译/重新编译或以任何方式进行修改。
答案 0 :(得分:4)
是的,有一个Unity功能,但它仍然可以被规避。
这可以通过Application.genuine
来完成,当应用程序在构建后以任何方式被更改时返回false。
# config/environments/production.rb
Rails.application.configure do
config.force_ssl = true
end
问题在于,如果这个人足够聪明,可以对游戏进行反编译,修改和编译,他/她也可以删除上面的检查,这样上面的检查就变得无用了。只要在播放器的机器上运行,任何类型的节目genuinity或真实性检查都可以删除。
编辑
通过执行以下操作,您可以更难以规避:
1 。转到文件 - > 构建设置... 然后选择您的平台。
2 。点击播放器设置 - > 其他设置,然后将 Scripting Backend 从 Mono 更改为 IL2CPP (C ++)。
这将使规避更难,但仍有可能被规避。
答案 1 :(得分:0)
TL; DR:坦率地说这是不可能的。
你永远无法确定你的程序是否被反编译,因为没有措施来确定是否发生了这种情况。即使您扰乱并搞砸了数据,每个可执行文件也可以被分解为至少汇编程序。您可以通过使用混淆软件来理解您的源代码。最终的混淆器将是M/o/Vuscator,它将所有汇编程序命令更改为mov指令,这使得理解任何东西都很痛苦。但它也很慢,可能不是你想要的(顺便说一句。这是有效的,因为mov-instruction在x86指令集中是巡回完成的。有一个很好的谈论它here)。当你遵循这个趋势further down the rabbit hole时,你也可以使用完全相同的汇编程序代码(大约10-20条指令)来创建所有可能的程序,这将使你无法通过简单地反汇编代码来获取源代码。
尽可能保持可能的范围:不,您无法阻止人们反汇编或反编译您的代码。但是你可以让它更难理解(不是不可能)。
但是,检测可执行文件中的更改是可能的。可能对你来说不太可能。
主要问题是,您构建到应用中以检测更改的任何代码都可以修补。所以你需要防止这种情况发生。但是没有实用的方法可以阻止......
如果您尝试使用原始签名检测应用程序中的更改,并将其与实际签名进行比较,则可以在重新编译的版本中排除该检查。您可以尝试针对服务器验证签名,但仍可以通过删除服务器检查来规避签名。您可以强制服务器检查多人游戏,但之后我们只会使用假签名。如果您想在服务器上计算签名以防止篡改,我们只会给您原始文件并运行重新编译的文件。
有一种方法(尽管如上所述,尽管不可行)实际上绝对保护您的代码部分免受反编译。该机制被称为" BlurryBox"并在德国的KIT开发。由于我似乎无法找到适当的文件作为参考,所以这就是为了实现这一目标。
该机制使用带有加密存储的棒和微控制器来进行加密。您将要保护的代码部分(定期调用,有必要但不是时间关键)添加到加密存储中。由于无法检索密钥[需要引证],因此无法访问代码。然后,微控制器从您的程序中获取命令,使用给定参数调用存储器中的一个加密函数并返回结果。因为无法读取您需要分析其行为的代码。这是"模糊"盒子的一部分。您存储的每个函数都需要一组小且明确定义的允许参数。每隔一组参数都会进入一个可以杀死您设备的陷阱。由于攻击者没有关于有效参数是什么的规范,因此该方法为您提供了有效的安全性,防止篡改代码(如他们所述)。虽然我从记忆中写下了这些内容,但这可能会有一些错误。
您可以尝试使用您控制的服务器(服务器上的代码和用于尝试理解代码的IP禁止)模仿该行为。