• λ我爱Aspx >> Asp.Net >> OICQ 99c版本加密方法研究报告
  • OICQ 99c版本加密方法研究报告

  • :未知  Դ:internet  :2007-5-5 19:47:59  ؼ:
  • 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)

    Ҷƪл˵?
  • һƪ用 Delphi 编写 VxD 设备驱动程序(转)
    һƪ源码推荐:一个使用C#绘制图形引擎的Framework