解析QQ2004的本地加密技术

恋爱子宫

恋爱子宫

2016-02-21 00:16

下面是个简单易学的解析QQ2004的本地加密技术教程,图老师小编详细图解介绍包你轻松学会,喜欢的朋友赶紧get起来吧!

    我的本意是写个暴力破解QQ本地密码的程序,不过分析之后才发现,QQ密码循环加密了n(n60000)次。虽然程序还是能写出来,不过可能需要很长时间才能算出一个短密码,所以并没有什么价值。唉!回去再看看自己写的MD5算法,看看什么地方可以大幅度改进的。再不行的话,就看看能不能写成万台机器联机的形式,这个可能需要从解密算法上入手了。

  下面说明QQ本地文件加密的问题。QQ本地密码文件保存在文件ewh.db中,加密方式是MD5和简单位变换的结合。

  一:密码文件结构。

  密码文件结构可以表示如下:

    struct file_ewh.db
    {
    FileHeader *header; //文件头
    FileBlock *blocks; //文件块数组
    }

    文件的图形结构如下:
___________________________________
             
 文件头 文件块一 文件块二 .......  
         
-----------------------------------

  下面我们就分别分析文件头和文件块的结构。

  1.文件头。
  文件头共6字节,第一字节固定为51('Q'),第二字节固定为44('D'),第三、四字节都为01。第5个字节开始的16位数据表示文件块的个数。

  2.文件块。
  文件块的结构如下:
    struct FileBlock
    {
    int8 type; //块的类型(QQ里面只使用了4和7两种)
    int16 nameLen; //块名字的长度
    int8 name[nameLen];//块的名字
    int32 dataLen; //块数据长度
    int8 data[dataLen];//块数据
    }
    为了方便,这里的int8代表一个字节,余者类推。

  实际例子:
  我自己的QQ的密码文件(不要破解我的啊!),其数据如下:
    00000000: 51 44 01 01 03 00 04 03 00 bd af a8 04 00 00 00
    00000010: c9 6a 09 00 07 03 00 b9 ab b4 10 00 00 00 0f c5
    00000020: e9 d4 31 15 2f 12 c4 1c 0a 46 95 90 db 98 04 03
    00000030: 00 a9 b5 b2 04 00 00 00 69 f4 aa 02
  总共60个字节。

  看的出来,文件中有3块,类型分别为4,7,4。后面要说的,7代表密码块。

  ewh.db密码文件的第3个文件块的数据内容是密码文件对应的QQ号码。就是最后的4个字节的内容。

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/diannaorumen/)

  大家可以随便分析一下,看看文件结构是否符合。

    二:QQ的加密算法

  ewh.db里面保存了密码加密后的结果。其中,第一个数据块的数据是密码进行MD5加密的轮次,第二个数据块是加密后的结果。

  其加密过程简单的描述如下:

    1)设密码为m[],加密轮次为n;
    2)for(i=0;i//上面文件中的n=0x96ac9;
    {
    m=MD5(m);
    }
    3)for(i=0;i16;i++)
    {
    m[i]=(!m[i])^al;//al在这里指的是密码块数据的长度
    //上面的文件中al=10h;
    }

  后记,QQ的加密算法和加密文件其实就这么简单。由于笔者第一次实际分析程序(以前只有理论水平),所以,花了3到4天才分析清楚,分析的汇编函数可能有30-40多个吧,反正写的笔记都有20多页了(A4的纸张),还打印了16张代码。

  另外,数据块的名字也是加密过的(算法类上),上面的例子中的3个块的名字分别为:"AST"、"EWH"和"UIN"。其实我还分析出了一些QQ的内存里面类的结构,只是没有什么大用处,但我还是明白了加深类的层次将给解密者带来极大的痛苦(QQ文件在内存中表示的有4层指针)。
一点补充:

    常常有人问怎么离线看本地电脑的聊天纪录。

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/diannaorumen/)

    其实很简单,把你QQ密码文件的最后4字节修改成别人的QQ号码,然后,拷贝这个文件到别人的号码的目录下覆盖它的密码文件就可以了。当然了,登陆的密码就是你自己的QQ密码了。

    (这种方式想必没有杀毒软件检查的出来吧?想起上次一个网友修改QQ来看本地聊天纪录,结果被杀毒软件认为是QQ病毒!郁闷死了!)

展开更多 50%)
分享

猜你喜欢

解析QQ2004的本地加密技术

电脑入门
解析QQ2004的本地加密技术

软件注册加密技术

编程语言 网络编程
软件注册加密技术

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

分析网页的几种加密技术

Web开发
分析网页的几种加密技术

Microsoft CryptoAPI加密技术(一)

C语言教程 C语言函数
Microsoft CryptoAPI加密技术(一)

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Microsoft CryptoAPI加密技术(二)

C语言教程 C语言函数
Microsoft CryptoAPI加密技术(二)

Java加密技术:对Atom进行签名 加密和解密

编程语言 网络编程
Java加密技术:对Atom进行签名 加密和解密

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

请住手:我的QQ你别用

请住手:我的QQ你别用

QQ防盗的有效办法

QQ防盗的有效办法
下拉加载更多内容 ↓