如何提高Unity项目的安全性?

时间:2018-09-22 14:45:55

标签: database web-services unity3d twitch-api

简而言之,我的项目包括:

  • 安全的RESTful API Web服务(托管在Heroku上),用于处理数据库的请求/响应。它接受并返回JSON数据
  • 一个Unity桌面应用程序,可以兼作Twitch API聊天机器人,并与Web服务进行通信以更新游戏状态以及数据库状态。
    • 重要提示::该游戏由Twitch直播者运行,并由Twitch聊天中的用户玩

所以我的问题是 ...即使我的Web服务是安全的,我该怎么做以确保某人不会简单地对我的Unity应用程序进行反向工程以弄清如何< / em>与我的Web服务器正确通信?

加密的HTTP流量将停止数据包嗅探,但是如果您仍然可以使用应用程序与数据进行交互的相同方法,则这是一项无足轻重的服务。也许我太偏执了,但是 plenty of tools out there是专门针对Unity&C#项目的,所以实际上并不需要太多的工作

我曾经想过的一个想法是使用Twitch API来检查用户是否正在积极地播放游戏,并且仅在Web服务找不到重复的IP时才允许他们启动游戏。设置了“ isStreaming”标志的数据库地址。从理论上讲,这是行得通的……但是实际上,任何人都可以在他们的机器上建立一个假的Twitch帐户和一个假的或“空白”流,然后运行游戏中的一些反向工程代码。

还有什么我可以做的以最小化黑客与我的数据库进行交互的能力?

1 个答案:

答案 0 :(得分:1)

简单答案

  • 与单元兼容的代码混淆

由于Unity的插件系统,实际上有一些不错的选择。资产商店中存在一些付费选项,以及一些与Unity无关的第三方付费/免费选项(但仍然可以使用)。某些免费选项(例如ConfuserEx)也是开源的,可让您对自定义代码进行更改,以使工作变得模糊。



更复杂的答案

  • 我制作了一个简单的C#类库,并在其中填充了一些毫无意义的功能(用于测试)
  • 我编译了该库的发行版
  • 我使用 Aggressive 设置(通过 Maximum 设置,Unity吐出了Invalid IL code错误)通过ConfuserEx对其进行了模糊处理
  • 我在我的Unity项目中添加了一个Assets/Plugins文件夹,并将编译后的库放置在那里。
  • 我创建了一个新的C#脚本来从Unity内部测试库

...尽管反编译后的代码难以理解,但仍可以在Unity中按预期工作。我使用IL / C#反编译器工具(例如JustDecompile)比较混淆后的二进制文件和原始二进制文件之间的差异。

因此,如果我真的愿意,我可以对我所有重要的代码(甚至对我的大多数客户项目)都遵循相同的步骤,并实施上述任何安全措施...等等希望对于任何人来说,了解我的项目的内部工作现在都是一件繁琐的事情。