传奇3封包结构解析编码的详细过程
一 封包加密方法传奇3的封包加密方法和传奇2是一样的,都是用的6BIT编码。每个封包以#开头,紧接着是一个数字(从1-9递增,到了9再返回1),作为封包验证,目的是想杜绝恶意封包。最后是以!结尾。
在那个数字和!之间就是封包内容。在客户端截获的SEND封包中,那段内容是经过了前面所说的6BIT编码的。这个编码过程是这样的:未加密代码以每3个字节为一段,一共就是24位。然后每6BIT(位)一段分开,在前面加2bit(00),然后每个字节再加3C,这样3个字节的封包数据就扩展成了4个字节的封包数据,也就达到了加密的目的。知道了加密的方法,其实解密的方法也就很简单了,大家自己写程序吧。我写了一个,如果大家需要回帖多我就发上来。
二 封包结构
在讨论封包结构的时候我们以未加密的封包内容为目标,并且除开#,数字,和最后的那个!
传奇(传奇3和传奇2)的封包格式是这样的:
DWORD DW; //(4字节)
WORD W1; //(2字节)
WORD W2; //(2字节)
WORD W3; //(2字节)
WORD W4; //(2字节)
--------------------------------
//以上是必须有的,属于命令编码
CHAR *charbuffer;//长度不定
//这个不一定有
--------------------------------
前面那12个字节是必须有的,表示命令的编码;后面的那个字符串不一定每个封包都有,要看具体的命令。比如如果前面的命令是SAY,那么后面的字符串内容就是你说的话。
前面12字节的内容视具体指令的不同而不同,但是W1这个字节一般都是命令编码。比如建东西的指令在传3中预定义是1000,换算成16进制就是3E8,那么在他的封包的W1处就是0X(表示16进制)3E8.
而其他各个成员变量所代表的东西是时常变化的,没有固定的格式。在这里智能给大家几个比较常用的范例。DW处或者W2,W3处很多时候用作代表动作执行时的X坐标和Y坐标;W3处很多时候用作代表动作进行的方向。根据我个人的经验,如果该动作和方向有关,那么DW处应该就是代表X和Y坐标,而W3处就时代表方向;如果动作和方向无关,那么DW处不确定,W2,W3处代表坐标。
在传奇中,方向的代码如下规定:
7 0 1
6 +2
5 4 3
其中+代表任务所在位置,他周围的8个方向代码就是像上面那样规定的。
三 封包解析方法
既然传奇有那么多的动作,而我们又不知道他们的命令的具体格式,那么我们就只有脚踏实地的分析了。
首先,我们要自己写一个封包解析的工具,作用是用来把我们在客户端截获的SEND封包内容解析成未加密形式。
接着我们就要在游戏中不断重复我们要分析的动作,并同时用WPE等工具截获SEND封包。
然后退出来处理SEND封包,先把数据还原成未加密形式,再开始分析。
比如,我在游戏中不断重复说话这个动作,在不加任何参数的时候,截获的封包为:>>>>>ITG>>>>>>>>...........(后面说话的内容省略)
经过分析,数据还原后为(这里不用字符表示了,用16进制码表示)
00 00 00 00 (2字节“说话”动作代码)00 00 00 00 00 00.......(省略号表示还原出来的说话内容)
所以我们可以分析出来,说话这个动作的动作详细代码为:
DW=00 00 00 00;
W1=2字节“说话”动作代码;
W2=W3=W4=00 00;
*Charbuffer=bufferof(说话内容);
感恩无私的分享与奉献 :) 强烈支持楼主ing…… 看到这帖子真是高兴! 真是被感动的痛哭流涕…… 楼主加油,我们都看好你哦。 真是难得给力的帖子啊。 太生气了,无法HOLD啦 >_<...... 感恩无私的分享与奉献 :) 真是被感动的痛哭流涕……
页:
[1]
2