转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
《QQ列表精灵》源代码分析!公布         ★★★★

《QQ列表精灵》源代码分析!公布

作者:闵涛 文章来源:闵涛的学习笔记 点击数:750 更新时间:2009/4/23 18:28:30

    软件名称:《QQ列表精灵》
    下载地址:http://redyunlong.51.net/redlegend/download.php

     http://redyunlong.51.net/redlegend
    该软件是本人在2002年根据“腾讯QQ”的“oicq2000.cfg”文件的漏洞,制作的可以更改,编辑,删除登陆列表的程序,并且可以里面的信息得到自动登陆的密码。
    发现漏洞:
    我们在一台电脑登陆过QQ之后,下次启动QQ的时候就会看到在号码列表的下拉菜单中会出现这个号码,这些号码实际上是保存在QQ安装目录的“dat\oicq2000.cfg”文件里,用记事本打开就可以看到登陆过的号码了。
    分析漏洞:
    样本:
     
下面来研究“oicq2000.cfg”这个文件,用任何一个16进制的编辑器打开文件就会看到所有登陆过的号码,它的格式是这个样子的。
    例如00 00 00 00 00 00 00 00 05 00 00 00 06 00 00 00 31 32 33 34 35 36 06 00  00 00 32 32 32 32 32 32
    第1位  表示是否有密码,如果你在登陆QQ的时候选择了“记住密码”的话,这个位就是01,否则是00
    第2位—>第8位 无内容 00 00 00 00 00 00 00
    第9位 表示这个列表文件共有几个号码,之后用三个“00”进行分隔,之后的“05”表示第一个QQ号码的位数,之后在用三个“00”进行分隔,接下来的“31 32 33 34 35 36”表示的是16进制的123456。紧接其后的是下一个号码的位数,如此循环,最后几位就是列表中最后一个QQ号码了。
    例如:(这个是带自动记录密码的列表文件的格式)
    01
00 00 00 02 00 00 00 92 86 00 00 00  05 00 00 00 06 00 00 00 31 32 33 34 35 36 
    假设我们的号码123456的密码是my,则它记录的格式如上。
    第1位 表示这个列表中含有密码,然后是分隔符号,接下来的“02”表示保存的密码的位数为2位,然后是分隔符,接着的“92 86”就是密码了,我们的密码为“my”,对应的16进制为“6D 79”,对比如下:
                          92   86
                          6D  79

  原来每一位与下面对应的相加都是“FF”,如 92+6D=FF,86+79=FF,这样我们就可以轻易的将密码破解了。

Delphi实现代码:
     下面给出的是不含密码的数据读取过程
                    procedure getQQList();
                    var
                         k,i,j:integer;
                         cfg:File;
                         Number,Weishu,Hao:Byte;//Number
                    begin
                        assignFile(cfg,''''x:\xx\oicq2000.cfg'''');
                        try
                          reset(cfg,1);
                          k:=8;
                          seek(cfg,8);
                          Blockread(cfg,Number,1,ret);//读取号码的个数
                          inc(k,4);
                          for i:=1 to Number do //循环读取各个号码 
                          begin
                              x:='''''''';
                              seek(cfg,k);
                              Blockread(cfg,Weishu,1,ret);//读取号码的位数
                              inc(k,4);
                              for j:=1 to Weishu do //循环读取号码
                              begin
                                  seek(cfg,k);
                                  Blockread(cfg,hao ,1,ret);
                                  inc(k);
                                  x:=x+char($+hao);//x中保存就是号码
                              end;
                              listbox1.items.add(x);
                           end;

                      end;
关于带密码的列表文件的读取和该过程类似,只是在第一位的时候进行判断就可以了。
到此为止,你就可以自己根据这个原理制作各种各样的列表软件了,比如添加,删除,更改,改变顺序等功能都可以自己设计了,并且还可以自己更改密码,设置自己的登陆密码。好省下的就看你了。
                                


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台