Chinaunix首页 | 论坛 | 博客
  • 博客访问: 16496357
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 20:50:35

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


对《QQ列表精灵》源代码分析和仿制对《QQ列表精灵》源代码分析和仿制对《QQ列表精灵》源代码分析和仿制对《QQ列表精灵》源代码分析和仿制对《QQ列表精灵》源代码分析和仿制对《QQ列表精灵》源代码分析和仿制对《QQ列表精灵》源代码分析和仿制对《QQ列表精灵》源代码分析和仿制对《QQ列表精灵》源代码分析和仿制对《QQ列表精灵》源代码分析和仿制对《QQ列表精灵》源代码分析和仿制对《QQ列表精灵》源代码分析和仿制对《QQ列表精灵》源代码分析和仿制对《QQ列表精灵》源代码分析和仿制对《QQ列表精灵》源代码分析和仿制
阅读(127) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~