奔放的牛 发表于 2010-6-17 06:58:11

传奇世界封包加密方式

加密方法:
对3个一组的进行处理
前两个作如下处理
<-----Inbyte1/2
||
\/
+0x3b--->outbyte1/2
第三个作如下处理
<-------Inbyte3
||
\/
+0x3b----->outbyte3

之后
用前三个字节的一部分组成第四个输出字节
b1b2[56>+0x3b------>outbyte4

在输入剩下的不足三个字节的时候,分两种情况
依然按照上面的原则进行,
结尾只有一个字节的时候
最后一个字节是

[000000b1[56>+0x3b--------->outbytelast
结尾有两个字节的时候
最后一个字节是
b2[56>+0x3b------->outbytelast

下面的代码是解密的的C的函数,可供参考
int CodeMWCode(BYTE*pIn,intsize,CHAR*pOut)
{
BYTE b1=0,bcal=0;
BYTE bflag1=0,bflag2=0;
IntI=0;
IntIptr=0;
Intoptr=0;
whIle(Iptr {
b1=pIn^0xeb;
If(I<2)
{
bcal=b1;
bcal>>=2;
bflag1=bcal;
bcal&=0x3c;
b1&=3;
bcal|=b1;
bcal+=0x3b;
pOut=(char)bcal;
bflag2=(bflag1&3)|(bflag2<<2);
}
else
{
bcal=b1;
bcal&=0x3f;
bcal+=0x3b;
pOut=(char)bcal;
b1>>=2;
b1&=0x30;
b1|=bflag2;
b1+=0x3b;
pOut=(char)b1;
bflag2=0;
}
I++;
I%=3;
}
pOut=0;
if(I==0)
returnoptr;
pOut=bflag2+0x3b;
pOut=0;
// 打标记
returnoptr;
}
页: [1]
查看完整版本: 传奇世界封包加密方式