2000年12月21日 08:55:00

OICQ是Internet网上常用的通信软件,本文将给出OICQ最新版99c的口令加密方法
、与服务器进行通讯的加密方法和用户之间的加密加信方法。
一、 口令加密
每个oicq帐号的口令都保存在本地的一个文件中。登录oicq时,先将输入的口令
与本地的文件进行比较。如果口令与文件中保存的不符,将提示"输入的密码与上
次成功登录的密码不一致,是否到服务器验证?"。
OICQ 99c的口令文件为matrix.cnt。OICQ 99b的口令文件为matric.ewh。

口令加密算法的函数原型为:
void CalcPassword(char *password ,int len ,char *outbuffer)
参数:
password为输入的明码口令
len: password长度
outbuffer:固定16个字节长度的加密后的口令。
说明:该函数用调试工具查到入口地址为15f:456718。在口令加密和用户之间通
讯时都要用到这个函数。已知能够计算的最长口令为20个字节,见下文用户之间
加密通信。

Oicq99b的口令文件就是将口令进行一次CalcPassword计算后保存在每个oicq帐号
目录中的matrix.ewh,该文件正好为16个字节。因此有这个文件就可以使用暴力
进行口令破解了。
Oicq99c的口令文件就复杂多了,第一次将明码的口令用CalcPassword进行计算,
然后将结果再作为口令进行计算,迭代计算很多次。计算次数用4个字节的双字表
示。将4个字节的次数和计算后的口令保存在每个oicq帐号的matrix.cnt文件中,
这个文件正好为20个字节长度。因为迭代计算了很多次,使口令计算时间极大地
延长了,使用暴力破解oicq99c的口令几乎不太可能。
二、 聊天历史的查看
与每个人聊天的历史都存在自已的oicq号目录下,文件名为对方的oicq号.msh(9
9b)或.msj(99c)文件中。
核心解密函数的原型为:
BOOL Decode(char *src ,int srclen ,char *decodekey, char *outbuffer,in
t * poutlen)
参数:
src:存放加密数据的缓冲区。
Srclen:src字节数。
Decodekey:固定16个字节的密钥。
Outbuffer:输出明文缓冲区的地址。
Poutlen:解密后的长度存放地址。
说明:该函数入口地址:15f:456D33。这个函数以密钥进行解密。如果成功返回
TRUE,否则返回FALSE。
显而易见,解密的关键是如何得到16个字节的密钥decodekey。

查看聊天历史的密钥生成不需要口令。算法为:
1、用当前使用的oicq号为口令,调用口令计算函数CalcPassword,得出一个临
时密钥keycode1。
2、用keycode1为密钥,进行解密。数据为文件matrix2.ewh(99b为matrix.ewh)
从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)

BYTE keycode[16]
int keycodelen=16;
Encode(0,0,passkey,keycode,&keycodelen)

BYTE sndbuffer[51];
memset(sndbuffer,0,51)
memcpy(sndbuffer,keycode,16)
//sndbuffer其余的内容为当前机器的ip等信息,与检查口令无关

BYTE result[64]
int sresultlen=64
Encode(sndbuffer,51,随机产生16个字节的密钥,result,&resultlen)

最后把16个字节的随机密钥和64字节加密后的口令一同发给服务器验证。如果能
用sniffer侦听到别人与服务器的通信,就能进行口令破解。当然也可以通过服务
器进行在线的口令破解,只是速度很慢,没有实用价值。

l 如果登录成功,服务器返回16个字节的密钥--ServerKey。
l UPD数据包的格式为
BYTE b1;固定为2
BYTE b2;固定为1
BYTE b3;固定为0
BYTE b4;固定为0
BYTE cmd;登录为0X15
WORD seq;从高到低顺序,与发送的seq一致。
BYTE msg[56];
BYTE endchar ;固定0x3。
用口令经过一次CalcPassword计算,得出16个字节的密钥,对msg进行解密。从第
1个字节开始的16个字节即为与服务器通信的密钥暂称为ServerKey。该密钥经常
变化。
在本次登录中,以后所有跟服务器的通信都用这个ServerKey为密钥进行加密和解
密。
四、 其它用户发来的加密消息的解密。
其它用户的发来的加密消息格式为:
BYTE b1;固定为0x0
BYTE b2;固定为0x3
BYTE b3;固定为0xA或0X2
BYTE salt; OICQ号加密用
DWORD EncodeOicqID;加密后的从高到低的oicq号。
DWORD seq;序号
BYTE msg[变长]

l 对方oicq号的解密。
将EncodeOicqID的4个字节分别与salt进行异或操作,然后取反。
如salt = 0XA0, EncodeOicqID = 0X 5F5EBD1F。
//分别进行异或操作
0X 5F5EBD1F XOR 0XA0A0A0A0 = 0X FFFE1DBF
//再取反
NOT 0X FFFE1DBF = 0X1E240,转为10进制就是123456。因此对方的oicq号为123
456。
l 消息的解密。
先合成一个20字节的口令。前4个字节为从高到低的二进制对方的oicq号。后16个
字节为服务器发来的ServerKey。ServerKey的来源见第三节。
如对方的oicq号为123456,20字节的口令为
00 01 E2 40 + 16字节的ServerKey。
用口令算法对这20字节的口令进行计算,得16个字节的密钥,就可以解开对方发
来的消息。
五、 发给其它用户消息的加密
在登录后,服务器会通知好友的IP地址和端口,以及一个16个字节的密钥。就是
当前的OICQ号加对方16个字节ServerKey通过CalcPass的计算结果。
向对方发送消息时,只要用这16个字节进行加密即可。
六、 一些结论
oicq 99c的加密是严密的,不易进行破解。除非得到某人的口令,否则不可能进
行消息假冒等。如果你有每秒能运算百亿次的巨型机,也许能解开对方跟服务器
通信的16个字节的ServerKey,而且必须要快。总之oicq 99c 是安全的,仍然在
使用的早期用户间明文通信协议不在本文考虑之内。

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=3275

OICQ 99c版本加密方法研究报告相关推荐

  1. OICQ 99c版本加密方法研究报告 1

    搜到的一篇关于OICQ加密的文档,先收藏. OICQ是Internet网上常用的通信软件,本文将给出OICQ最新版99c的口令加密方法 .与服务器进行通讯的加密方法和用户之间的加密加信方法. 一. 口 ...

  2. 开发Linux系统下的磁盘加密方法详解

    随着智能手机的计算能力和存储能力的提高,手机中将会存放越来越多的私有数据,这些数据的泄密可能造成严重后果.手机信息安全一直是我们的重点之一,对于一些重要的功能我们要求鉴权后才能使用,但这只能挡住初级的 ...

  3. mysql5.7 skip ssl_MySQL 5.7 的SSL加密方法

    MySQL 5.7 的SSL加密方法 MySQL 5.7.6或以上版本 (1)创建证书开启SSL验证 --安装openssl yum install -y openssl openssl versio ...

  4. openstack havana块存储Cinder磁盘加密方法研究

    http://blog.csdn.net/cloudresearch/article/details/19092219 在openstack havana的release note中有如下介绍&quo ...

  5. Linux下文件加密方法总结

    Linux下文件加密方法总结 为了安全考虑,通常会对一些重要文件进行加密备份或加密保存,下面对linux下的文件加密方法做一简单总结: 方法一:gzexe加密 这种加密方式不是非常保险的方法,但是能够 ...

  6. PDF文件简介及PDF文档加密方法

    PDF文件的认识: Adobe Reader 关于PDF的图标PDF全称Portable Document Format,译为可移植文档格式,是一种电子文件格式.这种文件格式与操作系统平台无关,也就是 ...

  7. Esp8266 进阶之路33【安全篇】细聊HmacMD5的加密方法带来的安全性,并实践在esp8266上,最大保障传输的过程的信息的安全性。(附带Demo)

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. Esp8266之 搭建开发环境,开始一个"hello ...

  8. Linux下的磁盘加密方法

    Linux下的磁盘加密方法 转载时请注明出处和作者联系方式 作者联系方式:李先静 <xianjimli at hotmail dot com> 随着智能手机的计算能力和存储能力的提高,手机 ...

  9. MySQL 5.7 have_ssl 的SSL加密方法

    MySQL 5.7 have_ssl 的SSL加密方法 MySQL 5.7.6或以上版本 (1)创建证书开启SSL验证 –安装openssl yum install -y openssl openss ...

最新文章

  1. centos 欢迎字符串_Centos系统用户密码字符串生成命令-shadow
  2. Expert 诊断优化系列------------------透过等待看系统
  3. sqlserver 字符串中添加单引号_Python3 教程-- 7、字符串
  4. linux server添加硬盘,新增硬盘扩充linux ftp server空间
  5. Apache Cassandra和Java入门(第二部分)
  6. Spring中AOP的使用
  7. c语言中 调用函数除函数名外,【单选题】在 C 语言中 , 调用函数除函数名外 , 还必须有 ( ). (10.0分) A. 函数预说明 B. 实际参数 C. ( ) D. 函数返回值...
  8. 哈工大计算机学院历史,历史沿革
  9. 核心网upf作用_高性能5G核心网,动力从何而来? 核心网,是整个通信网络的大脑,是不可或缺的重要组成部分。 网络的管理控制、鉴权认证等关键功能,主要由核心网负责。核心网的... - 雪球...
  10. java socket 中文乱码_java-Socket接受中文乱码的解决 | 学步园
  11. sublime php快捷键,sublime快捷键
  12. Android自定义控件之TextView
  13. 2021阿里云ECS镜像导入本地VMware虚拟机
  14. The requested URL /xxxx.html was not found on this server web项目报错
  15. 效果最接近《羊了个羊》(卡牌堆叠游戏)的开源代码 微信小程序开源了
  16. php 正则匹配中文
  17. 2017-2018 ACM-ICPC, Asia Daejeon Regional Contest H题
  18. 贝壳采集器: 电话邦 数据采集
  19. 培养意志力的黄金法则
  20. 等保知识|测评高风险项详解:安全管理部分

热门文章

  1. 开门红!大年初一发《Science》,年纪轻轻已是第2篇!
  2. 从电路的角度理解特征阻抗
  3. mask_rcnn 版本过高的错误
  4. 走x86路线的海光如今怎么样了?
  5. 5G关键技术——Massive MIMO 基本原理
  6. 字符串模式匹配--KMP之美
  7. Apache Maven Shade插件详解
  8. iFace区块链又一明星项目,比EOS生态更先进,比VDS生态更完美--iFace [ 爱妃链 ] 生态规划白皮书v1.0
  9. FCPX插件:弹性文字标题动画CineFlare ObjectAnimator
  10. 新疆计算机信息管理专升本可以报哪些专业,专业介绍:新疆自学考试专业有哪些...