我知道我不能阻止人们对我的协议进行逆向工程,但是我想采取一种安全透明的方法来尽可能地让它变得更加困难。
我有一个服务器/客户端系统,通过网络与http
样式数据包通信。
示例:
Header
Attribute: Value
Attribute2: Other Value
Payload
我想尽可能地让除了我的客户以外的任何东西都能访问网络。推动他们的问题反编译我的程序集 - 我可以对这个网络规范做些什么好事,这会使非常困难理解并在没有源的情况下进行另一个实现?
我在想某种奇怪的哈希方法或某种加密算法很难。
编辑我不是想保护我的程序集或源代码。我试图阻止某人,例如,使用WireShark或类似方法观看我的协议,然后根据该信息制作自己的实现。
答案 0 :(得分:7)
好吧,有三种情况:
用户无法访问服务器代码而无法访问客户端代码:最简单的方法是使用存储在二进制文件中的预生成共享密钥,然后加密/解密。
用户可以访问客户端或服务器代码,但不能同时访问两者:使用公钥/私钥方法。您可以使用公钥进行加密,但需要私有密钥才能解密。
用户可以访问客户端和服务器代码:您已经搞砸了。
如果要提高安全性,只应在会话启动期间使用此静态密钥,以生成新的共享密钥,然后将其用于通信。
编辑:实际上,更简单和安全的解决方案是使用ssl和证书(这是一个不应该实现自己的加密的口头禅)每个证书都带有一个秘密私钥。只要用户无权访问,如果您验证对等方具有完全正确的证书,那么您就是安全的。
答案 1 :(得分:6)
为了改变一些网络协议(来自MMO),我可以告诉你,你永远不会保护你的协议很长时间,对不起。
你能做的最好的事情是:
但这些只是减缓攻击者的方法。这肯定不会阻止他们。
答案 2 :(得分:2)
有三种解决方案:
1和2已经有效了。
答案 3 :(得分:0)
我也在用C#编写网络协议。我已经使用加密来保护协议。这是我如何做的花费,你可能会觉得这很有用。
关于“我在想某种奇怪的哈希方法”,哈希通常只用于数据验证。即确保它不会在途中被修改。
希望这会有所帮助。