网站首页 mysql技术
封包加密解密-03
发布时间:1970-01-01 00:00查看次数:3935
封包加密解密-03
(2011-11-03 19:31:45)
转载▼
标签:网络封包技术游戏 | 分类: 网络技术 |
前段在QQ上又有一会员问我能不能解密一段封包.当时给他解出来了.现在翻出了当时与他的聊天记录.整理一下写这篇教程,供大家学习学习.这里讲到的将都是些基础的入门的知识与经验心得.
该网友当时发了这幅图片给我.说是他自已截的数据包记录下来的一点数据,问我这样的能不能解密?
当时我粗略的看了一下最下面的两行 十六进制 与 文本数据.就回答他是一般的位运算.因为封包的加密与解密一般是离不开位运算
判断依据是:
一.每个字符对应一个十六进制值.
二.不管 h 与 p 这两个字符在什么位置,它们始终对应 DC 与 C4 两值.
虽然有了我的提示,但他还是没理解,还是不会.后来才知道原来他易语言都还是门外汉 .
为了方便分析明文与密文之前的对应关系.我叫他拦截了一段封包数据
明文abcdABCD0123456789
密文D5 D6 D7 D0 F5 F6 F7 F0 84 85 86 87 80 81 82 83 8C 8D
虽然知道算法里基本都是用位运算的,但这里我还是想偷个懒,以为没准与加减法就能搞定 .
当时简单的计算了明文a={97}=0x61 密文 a={213}=0xD5
代码运行后输出的数据
* D5 D6 D7 D8 B5 B6 B7 B8 A4 A5 A6 A7 A8 A9 AA AB AC AD
与之前正确的密文包对比发现错了..abcd 中前三个字符是正确的,第四个d出错了.汗.
看来加减法行不通.位运算才是王道!!!
幸好是每单字节处理的,位运算范围不大,还是好计算的,为了算出用哪种位运算我又编了小段代码.
*
因为每个字节是八位,数据范围是0-255.所以上面我用一个计次循环从0到255来进行运算.另外可用于位运算的函数还有其它几个,如左右移位,循环移位等.我这里只采样测试了 位与() 位或() 位异或() 这三个.
从输出的调试文本里,得到可以使用 位异或(字节,180) 进行加密数据 a.
其实这里我们也可以用上节学的知识,转为二进制来查看出来的
明文 "abcd" = {97,98,99,100}
01100001 01100010 01100011 01100100
密文 "D5 D6 D7 D0" = {213,214,215,208}
11010101 11010110 11010111 11010000
仔细看这几个加密前与加密的二进制,从右向左总是在第 3,5,6,8 四个位被翻过来的特征.那么按这四个位到低是啥值呢? 10110100 = 180 刚好是180.可以用计算器里的科学型来查看,或用模块里的 二到十("10110100") 来计算.. 用肉眼查起来有点累,所以像上面直接写小段代码,用1-255全进行测试一下就知道了.呵呵.
那么对于其它的数据,是否也会正确无误呢?下面编写了一段完整的加密代码来测试.
加密解密的算法代码.
输出调试文本
* D5 D6 D7 D0 F5 F6 F7 F0 84 85 86 87 80 81 82 83 8C 8D
* abcdABCD0123456789
这次加密的数据完全正确,不但加密正确,这段代码还能同时进行解密.
注意,如果只是单纯的位异或,是即可以加密也可以还原解密.所以在加解密里位异或用到得很多.除此之外就是移位与循环移位也用得很多..
接下来总结一下经验:
一,网络游戏的封包加密解密一般都是很简单的
二.每条封包中常常会有分隔符.分隔符一般都是明文的
三.数据包中不一定全部都加密,就像分隔符一样.其中有些可能是明文的,或者部份字节明文
四.肉眼分析封包特征技巧.
五.明文与密文的长度特征
六.一次处理的数据位数
七,一次处理多数据位数时
注意.上面只是一般的简单的封包加解密肉眼分析特征.分析时不要老盯着十六进制不放,最好能同时进行十六进制,十进制一起分析,必要时还得转换成二进制肉眼看位数据来分析,能写出了加密的代码,解密的也就不远了,只要反方向运算数据即可.,.更复杂的封包还是用OD断send等收发封包的API上进行逆推算法.
关键字词:封包加密解密-03