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

cae*_*say 4 c# security obfuscation networking

我知道我不能阻止人们对我的协议进行逆向工程,但是我想采取一种安全透明的方法来尽可能地使其变得更加困难.

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

例:

Header
Attribute: Value
Attribute2: Other Value

Payload
Run Code Online (Sandbox Code Playgroud)

我想尽可能地让除了我的客户以外的任何东西都能访问网络.推动他们的问题反编译我的程序集 - 我可以对这个网络规范做些什么好事,这将使得理解并在没有源的情况下进行另一个实现非常困难

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

编辑我不是想保护我的程序集或源代码.我试图阻止某人,例如,使用WireShark或类似方法观看我的协议,然后根据该信息制作自己的实现.

Per*_*son 7

好吧,有三种情况:

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

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

  • 用户可以访问客户端和服务器代码:你搞砸了.

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

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


use*_*016 6

为了颠倒一些网络协议(来自MMO),我可以告诉你,你永远不会保护你的协议很长时间,对不起.

你能做的最好的事情是:

  • 使用自定义算法对其进行模糊处理(因为它比已知算法需要更长的时间来反转).使用已知的加密方案不提供任何保护.
  • 添加噪音.试着变得非常非常困惑.添加毫无意义的随机值.尝试为数据包使用动态布局.移动字段.发送无用的数据包.就像它是垃圾一样.
  • 版本您的协议,因此两个连续版本不兼容.这可能很难,但它要求反向者为每个后续版本重新开展工作.

但这些只是减缓攻击者速度的方法.这肯定不会阻止他们.

  • 我很想看看你如何在代码中制作一个如此模糊的算法,以至于有人无法对其进行逆向工程,以便在不成比例的时间内看到它如何工作以使其不值得.整个算法可以在一天结束时归结为一个代码文件. (2认同)