分类: 网络与安全
2011-12-13 10:08:04
1.汉字utf8编码识别
utf8字符编码特征:
1字节:0xxxxxxx
2字节:110xxxxx 10xxxxxx
3字节:1110xxxx 10xxxxxx 10xxxxxx (汉字一般落在这个区间)
4字节:11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
5字节:111110 xx 10 xxxxxx 10 xxxxxx 10 xxxxxx 10 xxxxxx
6字节:1111110x 10 xxxxxx 10 xxxxxx 10 xxxxxx 10 xxxxxx 10xxxxxx
一个汉字通常占3个字节,也就是以1110开头,十六进制表示是E,所以在抓到的数据包里,看到E开头的三字节,通常就是UTF8编码,这招屡试不爽啊!
eg: 提交一段参数为“金城”的url, 截取到一段url的内容是 %e9%87%91%e5%9f%8e
%号是url编码,将所有的%号忽略掉,得到的就是汉字的编码。E9 87 91 E5 9F 8E
随便找一个在线解码工具,解码之后果然是“金城”
2.utf16编码识别
utf16编码跟ASCII编码不兼容,即ASCII ‘A’= 0x41;utf16 ‘A’ = 0x0041。故,当发现数据包内,ASCII字符前都有1个0字符在前面,而非ASCII没有,则可判断它是utf16编码。
网页的utf16编码,一般以FE FF开始。
3.汉字的gbk编码识别
这个比较简单,当发现数据包格式特征不符合utf8编码特征时,即可尝试用gbk解析。9成几率都是的。
顺便说一句gb2312 gbk gb18030的关系,他们之间的关系可以用GB18030 > GBK > GB2312来表示,都是用来表示中文编码的,但是gb2312最残,gbk支持了繁体,gb18030不但支持繁体还支持东亚一些岛国和半岛国的文字。
4.base64编码识别
合法的base64字符有:abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/
因此, 当发现数据包的内容都是这种字符,可以大胆尝试用base64解码验证。
发送网易超大附件时,截取的一段数据包内容:
发现filename 'dGVzdDEyNk1haWwudHh0' 很像base64编码,
尝试解码一下,果然是