作者:冲出宇宙(lotusroots) 来源:www.caiyihao.com
类别:安全的难 添加日期:2004.12.19 今日/总浏览:5/2598
我本意是写个暴力破解QQ本地密码不过现在才发现QQ好恶心循环加密了n(n>60000)次东西还是能写出来不过可能需要很长时间才能算出个短密码了唉!回去再看看自己写MD5算法看看什么地方可以大幅度改进再不行话就看看能不能写成万台机器联机形式这个可能需要从解密算法上入手了
好了不讲什么废话了下面介绍说明QQ本地文件加密问题QQ本地密码文件保存在文件ewh.db中加密方式是MD5和简单位变换结合
:密码文件结构
密码文件结构可以表示如下:
struct file_ewh.db
{
FileHeader *header; //文件头
FileBlock *blocks; //文件块
}
文件图形结构如下:
___________________________________
| | | | |
|文件头|文件块|文件块 2|....... |
| | | | |
-----------------------------------
下面我们就分别分析文件头和文件块结构
1.文件头
文件头共6字节第字节固定为51('Q')第 2字节固定为44('D')第 3、 4字节都为01第5个字节开始16位数据表示文件块个数
2.文件块
文件块结构如下:
struct FileBlock
{
8 type; //块类型(QQ里面只使用了4和7两种)
16 nameLen; //块名字长度
8 name[nameLen];//块名字
32 dataLen; //块数据长度
8 data[dataLen];//块数据
}
为了方便这里8代表个字节余者类推
实际例子:
我自己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块类型分别为474后面要说7代表密码块
大家可以随便分析下看看文件结构是否符合
2:QQ加密算法
ewh.db里面保存了密码加密后结果其中第个数据块数据是密码进行MD5加密轮次第 2个数据块是加密后结果
其加密过程简单描述如下:
1)设密码为m加密轮次为n;
2)for(i=0;i<n;i) //第2个数据块中数据(32)就是加密轮次
//上面文件中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层指针)
点补充:
写时候太匆忙忘记说完了
ewh.db密码文件第3个文件块数据内容是密码文件对应QQ号码就是最后4个字节内容
常常有兄弟问如何离线看本地电脑聊天纪录其实很简单把你QQ密码文件最后4字节修改成别人QQ号码然后拷贝这个文件到别人号码目录下覆盖它密码文件就可以了当然了登陆密码就是你自己QQ密码了
(这种方式想必没有杀毒软件Software检查出来吧?哈哈想起上次个兄弟修改了QQ来看本地聊天纪录结果被杀毒软件Software认为是QQ病毒!郁闷死他了!)
最新评论