2017-10-17 105 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

非常感谢您的帮助 –