防止人们对我的网络协议进行逆向工程

本文关键字:网络协议 逆向工程 我的 | 更新日期: 2023-09-27 18:35:30

我知道我无法阻止人们对我的协议进行逆向工程,但我想采取一种通过隐蔽性进行安全的方法,使其尽可能困难。

我有一个服务器/客户端系统,它通过网络与http式数据包进行通信。

例:

Header
Attribute: Value
Attribute2: Other Value
Payload

我想让除我的客户端以外的任何东西尽可能难访问网络。将问题与它们一起反编译我的程序集放在一边 - 我可以对这个网络规范做一些好事,这将使它很难理解并在没有源代码的情况下进行另一个实现?

我在想某种奇怪的哈希方法或某种很难的加密算法。

编辑 我没有试图保护我的程序集或源代码。例如,我试图阻止某人使用WireShark或类似内容观看我的协议,然后根据该信息进行自己的实现。

防止人们对我的网络协议进行逆向工程

好的,三种情况:

  • 用户无法访问服务器代码和客户端代码:最简单的方法是使用存储在二进制文件中的预生成共享密钥,然后 aes 加密/解密。

  • 用户可以访问客户端或服务器代码,但不能同时访问两者:使用公钥/私钥方法。您可以使用公钥进行加密,但需要私钥才能解密。

  • 用户可以访问客户端和服务器代码:你完蛋了。

如果要提高安全性,则应仅在会话启动期间使用此静态密钥,以生成新的共享密钥,然后用于通信。

编辑:实际上,一个更简单和安全的解决方案是使用SSL和证书(这是一个口头禅,你不应该实现自己的加密)每个证书都带有一个秘密私钥。只要用户无权访问,只要您验证对等方具有完全正确的证书,您就是安全的。

对于已经逆转了一些网络协议(来自 MMO),我可以告诉你,你永远不会长时间保护你的协议,对不起。

你能做的最好的事情就是:

  • 使用自定义算法对其进行混淆(因为它比已知算法需要更长的时间来反转)。使用已知的加密方案不提供任何保护。
  • 添加噪音。试着变得非常非常混乱。添加没有任何意义的随机值。尝试对数据包使用动态布局。移动字段。发送无用的数据包。就像是垃圾一样。
  • 对协议进行版本控制,以便两个连续版本不兼容。这可能很难做到,但它迫使反向器为每个后续版本重新做工作。

但这些只是减缓攻击者速度的方法。这当然不会阻止他们。

有三种解决方案:

  1. 啰嗦。
  2. SSLv3.
  3. 无论你做什么。

1 和 2 已经工作。

我也

在用C#编写网络协议。我已经使用加密来保护协议。这是我如何做到这一点的支出,您可能会发现这很有用。

    一旦客户端连接服务器从客户端请求随机 UUID,客户端就会
  • 使用服务器和客户端都知道的密码加密此 UUID。
  • 此后由服务器或客户端发送的所有数据包都将使用该 UUID 作为密钥进行加密。

关于"我在想某种奇怪的哈希方法",哈希通常仅用于数据验证。 即确保它在发送给您的途中没有被修改。

希望这有帮助。