首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

一段传奇世界游戏封包的加解密[有源码],小弟我不知道如何得到明文,请大家帮看看

2012-03-01 
一段传奇世界游戏封包的加解密[有源码],我不知道怎么得到明文,请大家帮看看 - C++ Builder / Windows SDK/

一段传奇世界游戏封包的加解密[有源码],我不知道怎么得到明文,请大家帮看看 - C++ Builder / Windows SDK/API
比如我用Wpe抓一个包,密文是#Rl=fwnfsv?ftvufuDaQDVN`> ELbF> pFo\=!
明文是什么?
我找了加解密的原码,可不知道用,小生是一个初学者,大家不要见笑!


[代码如下]
int   CodeWoool(const   BYTE   *   pIn,   int   size,   CHAR   *   pOut)
{
BYTE   b1   =   0,bcal   =   0;
BYTE   bflag1   =   0,bflag2   =   0;
int   i   =   0;
int   iptr   =   0;
int   optr   =   0;
while(   iptr   <   size   )
{
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   )
return   optr;
pOut[optr++]   =   bflag2   +   0x3b;
pOut[optr]   =   0;
return   optr;
}
//---------------------------------------
int   DecodeWoool(const   char   *   in,   BYTE   *   out)
{
BYTE   b1;
BYTE   b2;
BYTE   b3;
BYTE   b4;
int   inLen=strlen((char*)in);
int   inOffset=0;
int   outOffset=0;
int   remain;
/*for(int   i=0;i <inLen;i++)
{
in[i]-=0x3b;
in[i]&=0x3f;
}*/
while(true)
{
remain=inLen-inOffset;
if(remain <=0)break;

                                b1=in[inOffset     ];
                                b2=in[inOffset+1];
                                b3=in[inOffset+2];
                                b4=in[inOffset+3];
b1-=0x3b;
b1&=0x3f;
b2-=0x3b;
b2&=0x3f;
b3-=0x3b;
b3&=0x3f;
b4-=0x3b;
b4&=0x3f;

if(remain> =4)
{
out[outOffset     ]=((b1 < <2)&0xf0)^(b1&0x3)^((b4)&0xc)^0xeb;
out[outOffset+1]=((b2 < <2)&0xf0)^(b2&0x3)^((b4 < <2)&0xc)^0xeb;
out[outOffset+2]=(b3&0x3f)^((b4 < <2)&0xc0)^0xeb;
inOffset+=4;
outOffset+=3;
}
else   if(remain==3)
{
out[outOffset     ]=((b1 < <2)&0xf0)^(b1&0x3)^((b3)&0xc)^0xeb;
out[outOffset+1]=((b2 < <2)&0xf0)^(b2&0x3)^((b3 < <2)&0xc)^0xeb;
inOffset+=3;
outOffset+=2;
}
else   if(remain==2)
{
out[outOffset]=((b1 < <2)&0xf0)^(b1&0x3)^((b2 < <2)&0xc)^0xeb;
inOffset+=2;


outOffset+=1;
}
else
{
inOffset+=1;
}
}
out[outOffset]= '\0 ';
return   outOffset;
}



[解决办法]
不是已经有了DecodeWoool么?outOffset就是数组大小

热点排行