3

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

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

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

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

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

我还能做些什么来最大程度地减少黑客与我的数据库交互的能力吗?

4

1 回答 1

3

简单的答案

  • Unity 兼容的代码混淆

感谢 Unity 的插件系统,实际上有一些不错的选择。一些是 Asset Store 中存在的付费选项,以及一些与 Unity 完全无关的第三方付费/免费选项(但仍然可以工作)。一些免费选项,例如ConfuserEx,也是开源的,允许您对如何混淆您的工作进行自定义代码更改。



更复杂的答案

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

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

因此,如果我真的想这样做,我可以对所有重要的代码(甚至我的大部分客户项目)都遵循这些相同的步骤,并实施任何上述安全措施......所以希望它是现在对于任何人来说都很难理解我项目的内部运作。

于 2018-09-22T21:04:14.030 回答