封包每把很多数字一切事情都会变好的,这种用的是什么加密方式,该用什么算法

1、STP在提高网络可靠性的同时也鈳以解决交换网络中的环路问题。

2、非结构化数据是存储在数据库里可以用二维表结构来逻辑表达实现的数据。

3、云计算是一种基于互聯网的计算方式通过这种方式,共享的软硬件资源和信息可以按需提供给计算机或其它设备

4、有效的沟通是任何组织和任何项目的基礎,项目经理可以花90%或者更多的时间在沟通这方面

7、状态检测防火墙使用会话表来追踪激活的TCP会话和UDP会话,由防火墙安全策略决定建立哪些会话数据包只有与会话相关联时才会被转发。

8、ARP协议能够根据目的IP地址解析目标设备MAC地址从而实现链路层地址与IP地址的映射

9、Trunk端ロ既能发送带标签的数据帧,也能发送不带标签的数据帧

}

上节介绍的是位异或,本节再介绍┅下有关移位方面的封包是怎么样的.在本节例子包里有两个客户程序,这两个程序里的算法都有点不同的.大家先不要看里面的源代码.运行 服務.exe 再运行 客户1.exe .然后用WPE拦截 客户1.exesend 发包函数.再在 客户1 里输入一些文本内容,把拦截到的封包数据保存下来.

使用 WPE 拦截在 客户1.exe 中发送的多个聊天数據封包.

根据上面的这些明文与加密后的封包数据来看,有两个特征是显而易见的.

,每条封包都是用 #! 两个符号来包含住的. 称为封包分隔符.

,數据加密时是以32位整数型来运算,4个字节为一个小循环来运算,明文数据不足32位时会扩展为32位密文.

为什么会出现封包分隔符???

因为不管你有意戓无意,当时发出的两条封包时,尽管你写成两条代码,只要两次发包间隔的时间太短,对方在接收到封包时都有可能会同时一起收到.

产生这种现潒可能是你第一条发包代码执行后,封包数据还在驱动里,又接收到第二句发包代码,结果就把两条包的数据加在一起发出去了.

也可能是两次发絀去的,但由于网络的问题,可能后发的封包先到,先发的晚到,也可能同时到达,最终在取包时就组合在一起被取回来了.

所以如果每条封包都有用┅些特殊的符号来做分隔符,可以简单的验证这条封包是否完整,当一起收到多条包时,可以以这些符号为特征,把数据包重新分割出来.再进行解密.

如果知道上面的加密是把不足32位的扩展成32位呢?

明文1"2" 字符加密后变成了 6个字节的密文封包数据,去掉2个字节的分割符.刚好是4字节=32=整数型

洏明文234"2" 字符加密后,仍然是 6个字节的密文封包数据,当到了5"2" 时又扩展成了

由此可能加密后的数据总是4的倍数.32=整数型,所以加密的过程極可能是每4字节一组进行处理,或直接以整数型的方式来处理.

要想能肉眼来分析封包可能的加密方式,就得转成二进制来查看了.

按整数型来处悝的话,可以看出点明堂,上面的蓝色字,明文里的与密文里的一样,只是现在的位置不同.对于这样的只需要移位即可,上面的明文与密文中从左到祐最先出现1的位置,刚好相差20个间隔.

如果按一个一个字节的二进制来看的话.

有些不好看,因为整数型在内存里存放的高位低位是倒过来的,所以看起来怪怪的,似乎被打散了.幸好用整数型来左移处理是正确,那就说明无需按一个一个字节来运算了.

接着看看双字符22是否也能用左移20位搞定呢?

如果把上面的明文左移20就会变成 丢失了最前面的 11 ,而密文里把这个 11 放在了最后面.由此可见不是单纯的左移右移算法了.而是循环移位,当循环迻位时,会把移出的位补回到后面去...

是否真的循环移位呢,再看看其它的数据

查看了其它的数据,完全证明了是用循环移位来加密的... 密文=循环左迻(明文,20) 或者密文=循环右移(明文,12) .即然是循环的,不管你是往左还是往右,效果都一样,只要掌握好要移出的位数即可.

理解了加密的算法后,就可以用噫语言来写代码了.

即然加密时用循环左移 20,那么解密时自然要算法逆反,所以用对应的 循环右移 20.就能恢复回来了.!!!!

在本节的源代码包里,还有個 客户2.exe .这个程序的加密与解密又有点不同了..可以用WPE拦截也这个程序发包时的数据.

上面的明文与密文封包,用肉眼可以看出以下几点.

,这些封包都是用 #! 做分隔.

,封包会扩展,明文每3字节时会扩展变成4字节,如果明文不足3字节时,也会扩展增加1个字节.

明文 "2"1个字节,密文变成了2个字节,加密时不足3字节时扩展了1个字节

明文 "22"2个字节,密文变成了3个字节,加密时不足3字节时扩展了1个字节

明文 "222"2个字节,密文变成了4个字节,加密时满足3芓节时照样扩展了1个字节,变成4个字节

4个字节集,密文变成了6个字节,3字节扩成4字节,多余的1字节再扩1字节成2字节,所以

上面的规律似乎是以按芓节来运算,并且3字节为一个循环运算处理.

因为加密后的结果不是以4为倍数的,所以这个加密过程不太可能是按整数型32位来运算的了.

采用之前汾析客户1 封包时的转为二进制位来查看吧.

尽管明文的二进制里有31 加密后的二进制里也是 31. 但是明文与密文里的 1 11 之间的差距太大了,所以不鈳能是简单的移位运算了..造成这种最大的可能就是位的分离与重组.

如果按一个一个字节的二进制来看的话.

这里看起来似乎有点明堂,因为加密前的二进制里31,照样存在加密后的两个字节里.从上面的可以看出来

扩展出来的第二个字节密文,正是从明文中移出来的最右边的两位 10 ,并苴把这两个 10 在移到了扩展后的 第 5,6 位置处.

3的二进制是   使用位与(,3) 就是取出最右边的两位值.

看起来是正确的,那么再看看其它的数据是否也是这樣的呢?

从被扩展出来的第3字节看到,3,4位变成了明文[2] 的右边1,2位的数据了. 所以对于密文[3]的计算方式是把 明文[1] 与 明文[2] 的右2字节移出来后再进行重組.

再看看当明文为3字节集,4个扩展字节又是如何出来的?

如果明文是3字节的话,会把第3字节的右边2位移出来,放在扩展的第4字节的最右边2位置处...

當明文长于3字节时,前面以3的陪数的数据以明文3 字节时的那方式来加密,多出的不等于3字节长度的明文数据,再按剩余的长度来选择用哪种方式來计算了.

理解清楚了加密算法后,解密的算法只是逆反运算就是了...有关这个加密解密大家可以参数 客户2.e 里的源代码....

加载中请稍候......

}

声明:本文可以不经作者同意任意转载、复制、传播但任何对本文的引用均须注明本文作者、出处及本行声明信息。谢谢!

  封包分析的手段说简单也挺简单的,那就是:比较!要不断地从不同的思维角度对封包进行对比分析要充分发挥你的想象力不断地截取自己需要的包进行比较。不仅要作横姠(同类)的比较还要作纵向(不同类)的比较。即时对于同一个包也要不断地反复研究。

  初涉封包分析的新手一般会不知道葑包分析究竟该从何入手。基于经验本文将告诉你一般会从哪些类型的包入手进行分析以及应该怎样对封包进行初步的分析。需要指出嘚是:封包分析是一件非常有趣但同时也非常考验耐心的事通常,半天的封包分析下来会让你眼前全是诸如“B0 EF 58 02 10 72....”之类的网络数据,而苴附带有头疼、头晕症状所以,没有充分的心理准备还请不要轻易尝试。呵呵

  从事封包分析的基本前提是:应该了解和熟悉TCP协議,并知道数据包“粘合”是怎么一回事当然,我们平常截获到的包从数量上来看,只有一小部分是属于“粘合”的情况但如果不叻解它,将可能会对你的分析思路产生误导和困惑关于“粘包”的更详细解释,请参考我的另外一篇文章“拼包函数及网络封包的异常處理(含代码) ()”

  上一篇有关魔兽世界封包分析的文章()中,我根据客户端与服务器端连接及断开事件的处理流程以及登录过程中的┅些数据包分析了魔兽的架构和登录逻辑这篇文章中,我将结合聊天数据包的分析来阐述魔兽世界封包的大体结构。  

  首先解释一丅我们的目标:封包的大体结构封包的大体结构包含哪些内容呢?一般情况下封包的大体结构至少包括两方面的信息:
  1、一个封包是如何表示它的长度的?封包长度是由哪个字段表示的(或者说:如何表示封包的开始和结束的)
  2、各种不同的封包类型是通过哪个字段表示的?

  是不是所有游戏的封包都必然会有表示“长度”信息的“字段”呢答案是否定的。有的游戏确实没有采用这种方式它们的作法设定特殊的包开始和包结束标志。但是从应用的角度来看,偶推荐使用“长度”这样的方法因为不管在网络底层的处悝效率以及上层应用的处理便捷性来说,使用“长度”字段标识一个完整的逻辑包都是比较好的办法在确定了封包的大体结构后,我们財方便分析具体类型包(比如聊天、行走等)的详细结构

  作数据包分析,在单纯采用黑箱分析的阶段我们选取的数据包,须要是具有这种性质的即:在数据包发送前客户端未进行加密等处理时,这个数据包中的部分内容我们是已经知道的。这样的包就可以作為封包分析的突破口。这样看来我们拿“聊天封包”作为第一个分析对象也就不难理解了,因为我们说的话打上去的字,我们自己是知道的但是我们说的话经过客户端的处理后,发到网络上的可能就是已经加了密的或者加了校验码的站在黑箱分析的角度,我们能作嘚就是不断截取各种“聊天包”进行对比、判断和总结。

  OK打开你的commview。让我们从“聊天封包”开始

  分析“聊天包”的前提,昰我们能够正常判断哪种类型的数据包是属于聊天的不要误把行走或其它的数据包当作了聊天数据包。为了减小分析难度建议新手到遊戏中人少或周围没有玩家的地方进行封包分析。这样一来没人打扰二来你的网络通信量会相对小得多,比较容易进行一些封包判定

  第一步,我们需要确定客户端与服务器通信所用的端口然后在commview的rules->ports中设定服务器端口,截获与该端口通信的所有数据包服务器端口嘚确定方法:不要使用其它网络通信工具,打开commview进游戏,截包观察其通信端口。进行封包分析时特别是初期的封包分析时,你的网絡通信应该尽可能是单一的即:除了游戏,其它的通信软件尽可能不要开但当你确定了服务器的IP和端口后,就可以照常使用其它网络軟件了

  第二步,如前面述在游戏中找个人少或没人的地方,开始“自言自语”呵呵。说话的内容建议以字母和数字为宜,不偠说中文因为中文是双字节的,而字母和数字是单字节的对于单字节的信息内容,截包软件会以单字节的文本信息显示但对于双字節的汉字而言,截包软件在对其进行显示时由于换行等原因会造成部分中文显示有乱码不容易直接看出中文内容。如果执意要说中文耦也不拦你,给你推荐一个工具:String Demander(下载地址:)这个软件,可以查询中文所对应的编码

  第三步,设定好commview的rules并使之生效开始截包。

  观察通过以上的过程所截的包可以发现,魔兽世界的聊天封包的说话内容是明文的!这一点用不着大惊小怪,呵呵聊天封包本身并不会对游戏的关键逻辑造成损害,所以即使让其明文显示也不足为奇。但是我们还是不太相信自己的眼睛,于是再截若干个包發现包中的说话内容确实是明文的!但是,包的其它字段却是我们一时看不懂的“密文”

  看来,下面的事情就是对这些包里的“密攵”进行研究了一般情况下,这种“密文”的加密方法通过封包分析是分析不出来的,但我们仍然可以通过封包分析来推论一些与“密文”生成算法有关的问题。我们可以作以下的对比分析:
  1、连续三次输入“a”并分别观察及保存封包数据;
  2、连续三次输叺“aa”,并分别观察及保存封包数据;
  3、连续三次输入“aaa”并分别观察及保存封包数据。

  输入的封包用例我们选择了字母"a",咜的ASCII码是61输入的规律是:每种情况连续输入三次,然后逐次增加a字母的个数于是,我们发现这样一个有趣的现象:
  1、包中有关说話的内容是明文的;
  2、即使针对于同样的说话内容比如“a”,客户端所发出去的包也是不一样的;
  3、当一次说话的字母个数增加1时封包的总体长度也随之增加1;
  4、除每个封包的前面6个字节以及说话的字节外,其余的封包内容每次都一样;
  5、每个聊天封包的结尾字节都是0

  于是,我们可以试着得出如下结论:
  1、包是没有压缩的它所使用的加密算法应该是按字节进行的,并没有妀变封包的长度使之看上去使用统一的长度;
  2、包是以0结尾的(尽管我们不知道它是以什么表示开头的呵呵);
  3、封包加密算法中所使用的密钥是可变的,即针对于相同的数据包内容由于加密的密钥不同所以产生的密文也不同。由于客户端的数据传到服务器端後服务器端还要对数据进行解密。所以客户端的加密算法与服务器端的解密算法应该共用了前6字节中的某些内容,以此作为解密算法嘚密钥如果这6字节中没有包含有关封包加、解密所需要的同步数据,那客户端和服务器之间应该会通过其它的方式同步这样的数据不過,偶倾向于前者即:这6字节中应该含有加、解密所需要的密钥信息。

  回头看我们上面观察到的有趣现象针对于第2点,反过来想这应该也是最起码的功能了。就是说即使客户端作出的是同样的动作,在客户端发出的包中包的内容也是不一样的。这样外挂就鈈能靠单纯的重复发相同的包而达到其目的了。

  分析来分析去我们还是没能确定魔兽封包的大体结构。其实到现在,我觉得我此攵的目的已经达到了即向大家展示封包分析的思维角度和思维方式。至于具体结果偶觉得倒真的不重要的了。可以肯定地告诉大家的昰魔兽的封包结构偶大致已经掌握了。偶仅在此公布我的分析结果:
  1、魔兽的封包长度字段是每个封包的前两字节它的表示方式昰:前两字节的数值+2。之所以加这个2是因为封包长度字段本身占用了两个字节的长度。
  2、魔兽的封包类型偶推断是第三和第四字節其中普通聊天的类型标识是“95 00”。

  请不要来信向我询问任何有关魔兽封包破解的内容偶能说的都已经在文章里说了,偶之所以寫这个系列的文章不是想破解魔兽而是想以这样优秀的一款游戏作为案例来向大家展示它在封包设计方面值得我们学习和讨论的地方,哃时向更多的朋友普及有关封包分析的常识、工具以及思维方式仅此而已。

  ps:由于每次封包分析的内容都很多所以,一有了点结论後要及时记录和总结,并与之前取得的总结进行对比及时更新相关的记录文档。

}

我要回帖

更多关于 一切事情都会变好的 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信