我爱Aspx >> Asp.Net >> OICQ 99c版本加密方法研究报告从0起第17个字节,长度为32个字节,解出16个字节的密钥为keycode2。
3、 用keycode2为密钥,可以解开跟任何人聊天的历史。
例如要查看oicq号为123456的聊天历史记录,算法为:
BYTE keycode1[16];
BYTE filebuffer[32];
//读文件matrix2.ewh,从0起第17个字长,长度为32的内容读出保存在filebuff
er。
ReadToBuffer(filebuffer);
//用当前的oicq号计算keycode1
CalcPassword('123456', 6 , keycode1)。
//计算keycode2
BYTE keycode2[16];
int len = 16;
Deocode(filebuffer , 32 , keycode1,keycode2,&len);
//现在keycode2就是能看任何聊天历史的密钥了。
//如看跟888888的聊天历史,将文件888888.msj读到缓冲区largerbuffer
Decode(largerbuffer,largerbufferlen,keycode2,outbuffer,*outlen),成功后
outbuffer中为解密后的聊天记录。
三、 与服务器通信的加密
与Decode相对应,是一个加密函数Encode。
void Encode(char *src,int srclen,char *encodekey,char *outbuffer,int *
poutlen)
参数:
src:明文缓冲区。
Srclen: 明文缓冲区的长度。
Encodekey:固定16个字节的加密的密钥。
Outbuffer:输出加密缓冲区。
Poutlen:输出长度的保存地址。
说明:该函数入口地址:15f:456b62。将明文进行加密,密钥为encodekey。用d
ecode函数和同样的密钥可以进行解密。
l 登录服务器:
发送的数据包为
{BYTE b1;固定为0x2
BYTE b2;固定为0x3
BYTE b3;固定为0XA
BYTE b4;固定为0X0
BYTE cmd; 登录服务器为0X15。
WORD seq; 顺序号,从高到低存放
DWORD oicq号;以从高到低顺利存放二进制的OICQ号。
BYTE key[16] ;随机产生的16个字节的密钥。
BYTE buffer[64];64字节的加密内容。
BYTE endchar ;固定为0x3。
最核心的是buffer[64]的内容。用口令调用CalcPassword进行一次计算,然后作
为密钥对0长度的明文进行加密,得出16个字节的结果,再进行加密发送。例如口
令为'abc123',算法为
BYTE passkey[16]
CalcPassword('abc123',6',passkey)
Ҷƪл˵?
源码推荐:一个使用C#绘制图形引..[05-05]
如何写系统分析书[05-05]
一个统一的链表结构[05-05]
优化delphi5.0秘籍大曝光[05-05]
在C#里如何调用标准DLL函数[05-05]
开放源代码的定义[05-05]
MMX Instructions[05-05]
Opcodes of intel[05-05]
程序员与MM[05-05]
用CTI实现与Web交谈[05-05]