找回密码
 注-册

QQ登录

只需一步,快速开始

查看: 1328|回复: 0

传奇世界封包加密方式

[复制链接]
奔放的牛 发表于 2010-6-17 06:58:11 | 显示全部楼层 |阅读模式
加密方法:
对3个一组的进行处理
前两个作如下处理
[12345678]<-----Inbyte1/2
||
\/
[00123478]+0x3b--->outbyte1/2
第三个作如下处理
[12345678]<-------Inbyte3
||
\/
[00345678]+0x3b----->outbyte3

之后
用前三个字节的一部分组成第四个输出字节
[00b3[12]b1[56]b2[56>+0x3b------>outbyte4

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

[000000b1[56>+0x3b--------->outbytelast
结尾有两个字节的时候
最后一个字节是
[0000b1[56]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[iptr++]^0xeb;
If(I<2)
{
bcal=b1;
bcal>>=2;
bflag1=bcal;
bcal&=0x3c;
b1&=3;
bcal|=b1;
bcal+=0x3b;
pOut[optr++]=(char)bcal;
bflag2=(bflag1&3)|(bflag2<<2);
}
else
{
bcal=b1;
bcal&=0x3f;
bcal+=0x3b;
pOut[optr++]=(char)bcal;
b1>>=2;
b1&=0x30;
b1|=bflag2;
b1+=0x3b;
pOut[optr++]=(char)b1;
bflag2=0;
}
I++;
I%=3;
}
pOut[optr]=0;
if(I==0)
returnoptr;
pOut[optr++]=bflag2+0x3b;
pOut[optr]=0;
// 打标记
returnoptr;
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注-册

本版积分规则

Archiver|手机版|小黑屋|DoDVip ( 桂ICP备14000730号 )

GMT+8, 2024-5-7 23:41 , Processed in 0.061972 second(s), 20 queries .

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表