SlipStupig
2016-07-06 21:31:20 +08:00
这个我刚好开发完一整套验证,本地就不要想了( python 本身可以完全解密出来,当然可以考虑加密,但是可以进行断点没什么意义), python 做个服务端,然后协议全程是加密。
简单说一下交互流程(稍微有点复杂,目前服务端还没出现协议破解)。
1.本地需要一个公钥服务器存储的是一个私钥(这样可以做到一机一 key ),客户端发起请求给服务端一条指令然后发送公钥给服务端验证,如果验证成功进入 ( 2 ),如果失败就返回错误
2.服务端返回一条指令询问客户端版本和支持的加密算法列表,客户端回应成功后进入 ( 3 ), 否则断开
3.服务端返回一个 salt 、 key 和加密算法,客户端使用 salt+key 并用协商的加密算法进行发送,发送几个东西: MAC 地址+激活 ID (如果有硬狗的话,应当验证硬狗的证书和 UID ),客户端证书(防止中间人),如果服务端解密成功后,验证信息是否正确,返回一个秘钥给客户端去恢复关键部分代码(这个地方有点傻 X ,但是对协议没影响),如果正确就走到 ( 4 )
4.验证成功后给客户端一个 SessionID 和 cookies ( cookies 的秘钥在服务端存储),然后每 10s 客户端发送一个心跳,如果心跳超时 30s 就直接销毁掉 SessionID 和 Cookies ,
图解:
1. C ---请求私钥---> S
S <-----------验证证书是否正确-----------> C
2. C ===[‘ query ’, RC4|MD5|RSA|AES...]======》 S <=== [加密算法, salt, key] ===>C
3. C--->密码算法( salt+key , 要发送的数据内容)----> Server
4 . !Server 验证成功
|
|
=====>发送解密 key =====>client 解密函数(内存起始地址,内存结束地址,内存加密算法, "key") ===>执行关键函数