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



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

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

所以我的问题是...即使我的 Web 服务是安全的,我能做些什么来确保有人不会简单地对我的 Unity 应用程序进行逆向工程来弄清楚如何与我的 Web 服务器正确通信?

加密的 HTTP 流量会停止数据包嗅探,但如果仍然可以使用应用程序用于与数据交互的相同方法,则是一项没有实际意义的服务。也许我太偏执了,但是有很多工具专门针对Unity和C#项目,所以真的不需要太多的努力。

我的一个想法是使用 Twitch API 来检查用户是否正在积极流式传输游戏,并且只有在 Web 服务在数据库中找不到设置了"isStreaming"标志的重复 IP 地址时才允许他们启动游戏。这在理论上是有效的...但实际上,任何人都可以在他们的机器上设置一个假的Twitch帐户和一个假的或"空白"的流,然后从游戏中运行一些逆向工程代码。

我还能做些什么来最小化黑客与我的数据库交互的能力吗?

简单的答案

  • 与 Unity 兼容的代码混淆

多亏了Unity的插件系统,实际上有一些不错的选择。有些是资源商店中存在的付费选项,还有一些与 Unity 无关(但仍可正常工作(的第三方付费/免费选项。一些免费选项,如ConfuserEx,也是开源的,允许你对你的工作进行自定义代码更改。



更复杂的答案

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

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

因此,如果我真的愿意,我可以对所有重要的代码(甚至我的大多数客户项目(遵循这些相同的步骤,以及实施任何上述安全措施......所以希望现在对任何人都无法理解我的项目的内部运作来说,这将是一件太麻烦的事情。

相关内容

  • 没有找到相关文章

最新更新