首页
社区
课程
招聘
完全解析QQ2004 sp1的本地加密策略!(原创)
发表于: 2004-12-4 15:20 28022

完全解析QQ2004 sp1的本地加密策略!(原创)

2004-12-4 15:20
28022
QQ2004 sp1加密文件结构和加密算法分析

作者:冲出宇宙(lotusroots)
完成时间:2004.12.3
类型:作者原创

  我的本意是写个暴力破解QQ本地密码的程序,不过,现在才发现QQ好恶心,循环加密了n(n>60000)次。东西还是能写出来的,不过,可能需要很长时间才能算出一个短密码了。唉!回去再看看自己写的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代表密码块。
大家可以随便分析一下,看看文件结构是否符合。

二:QQ的加密算法
  ewh.db里面保存了密码加密后的结果。其中,第一个数据块的数据是密码进行MD5加密的轮次,第二个数据块是加密后的结果。
  其加密过程简单的描述如下:
1)设密码为m[],加密轮次为n;
2)for(i=0;i<n;i++)        //第2个数据块中的数据(int32)就是加密轮次
                //上面文件中的n=0x96ac9;
   {
           m=MD5(m);
   }
3)for(i=0;i<16;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://bbs.pediy.com/showthread.php?s=&threadid=18075

[课程]Linux pwn 探索篇!

收藏
免费 7
支持
分享
最新回复 (57)
雪    币: 389
活跃值: (912)
能力值: ( LV9,RANK:770 )
在线值:
发帖
回帖
粉丝
2
长见识,继续呀.
2004-12-4 16:51
0
雪    币: 154
活跃值: (216)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
嗨,继续.
2004-12-4 18:43
0
雪    币: 237
活跃值: (175)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
4
好,期待下面的内容。
2004-12-4 18:55
0
雪    币: 300
活跃值: (412)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
5
期待   
more
2004-12-4 19:22
0
雪    币: 153
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
不错!继续!
2004-12-4 20:23
0
雪    币: 329
活跃值: (343)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
7
不错。收藏。
2004-12-4 21:43
0
雪    币: 235
活跃值: (190)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
8
一点补充:

写的时候太匆忙,忘记说完了。

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

常常有兄弟问怎么离线看本地电脑的聊天纪录。
其实很简单,把你的QQ的密码文件的最后4字节修改成别人的QQ号码,然后,拷贝这个文件到别人的号码的目录下覆盖它的密码文件就可以了。当然了,登陆的密码就是你自己的QQ密码了。

(这种方式想必没有杀毒软件检查的出来吧?哈哈,想起上次一个兄弟修改了QQ来看本地聊天纪录,结果被杀毒软件认为是QQ病毒!郁闷死他了!)
2004-12-4 21:57
0
雪    币: 193
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
经典:(
2004-12-4 22:16
0
雪    币: 212
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
英雄~~~看来藤讯马上又要升级了
2004-12-4 22:35
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
不错厉害
学习了
2004-12-5 01:26
0
雪    币: 93944
活跃值: (200219)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
12
支持!!!
2004-12-5 08:38
0
雪    币: 234
活跃值: (104)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
好文章!支持!
2004-12-5 10:24
0
雪    币: 226
活跃值: (115)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
14
好帖。  支持  !
2004-12-5 10:33
0
雪    币: 61
活跃值: (160)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
15
支持!!!!:D :D
2004-12-5 10:36
0
雪    币: 383
活跃值: (786)
能力值: ( LV12,RANK:730 )
在线值:
发帖
回帖
粉丝
16
收蓝中:)
2004-12-5 10:47
0
雪    币: 274
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
好东西。可以把分析算法的思路再写写,那就更帅了。
2004-12-9 10:59
0
雪    币: 211
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
18
继续:

现在可以轻松离线浏览聊天记录,但登陆却不行,提示"登陆密码错误,请重新登陆".如果再对程序作一下研究修改(猜想应该是服务器验证),就可以成功登陆了.但是这样修改程序,是不能通过客户端修修改在服务器上的密码的.
2004-12-13 17:49
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
呵呵  腾讯果然够黑
2004-12-14 02:38
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
niu X
2004-12-14 10:32
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
实在不好意思。我初入此门,哦,还不能说“初入”,应该是“还未入”。
第一步要怎么弄啊。
怎样才能看到你说的那些代码呀?
2004-12-14 17:21
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
好帖,顶一个。
2004-12-14 21:27
0
雪    币: 215
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
2004-12-15 19:12
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
强!我曾经改过qq2003,就是改个跳转然后不用密码就可以离线登陆。但2004我用od调试时怎么也断不下来,一下就开始运行了,楼主是怎么让它停在入口的?
还有,2004sp2有等级了,但它那个表示等级的图标,我翻遍了所有的图片,看了好多dll的资源也没找到?不会是从服务器下载,完了就删了吧!不知有没有高手找到?
2004-12-15 22:35
0
雪    币: 211
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
25
www.jiangmin.com 2004-12-15 16:44:11 作者: 信息出自:江民科技

近日,江民公司反病毒中心监测到,QQ本地密码验证的加密算法已被破解,算法的详细说明被公布和转载到多个网站上。

根据算法,只需对某特定文件修改几个字节就可以浏览本机上任意QQ号码的聊天记录。同时,算法的公布还降低了破解QQ密码的复杂度。江民反病毒中心通过研究发现,如果QQ密码是类似“800612”这样的6位生日数字,可以在1分钟之内被破解出来。如果密码较长且没有明显规律特征,破解过程还是非常困难的。

江民公司提醒广大QQ用户,请确保您的QQ密码足够健壮,尽量不要使用QQ的“记住密码”功能,并注意及时升级病毒库,以免密码被盗。

江民公布这个干嘛呢,又不关它杀毒软件什么事,该公布也是由腾讯来公布嘛.
不过腾讯自己的加密算法被破解,它怎么好大肆公布呢?
其实,根本没啥子嘛,不就是研究了一下加密算法吗,而且目前合理的破解方法也只能是穷举~
2004-12-16 14:23
0
游客
登录 | 注册 方可回帖
返回
//