對《QQ列表精靈》源代碼分析和仿制

2010-08-28 10:44:50來源:西部e網作者:


    該軟件是本人在2002年根據“騰訊QQ”的“oicq2000.cfg”文件的漏洞,制作的可以更改,編輯,刪除登陸列表的程序,并且可以里面的信息得到自動登陸的密碼。

  發(fā)現漏洞:

  我們在一臺電腦登陸過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。緊接其后的是下一個號碼的位數,如此循環(huán),最后幾位就是列表中最后一個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 //循環(huán)讀取各個號碼
    begin
     x:='';
     seek(cfg,k);
     Blockread(cfg,Weishu,1,ret);//讀取號碼的位數
     inc(k,4);
     for j:=1 to Weishu do //循環(huán)讀取號碼
     begin
      seek(cfg,k);
      Blockread(cfg,hao ,1,ret);
      inc(k);
      x:=x+char($+hao);//x中保存就是號碼
     end;
     listbox1.items.add(x);
    end;
  end;

  關于帶密碼的列表文件的讀取和該過程類似,只是在第一位的時候進行判斷就可以了。

  到此為止,你就可以自己根據這個原理制作各種各樣的列表軟件了,比如添加,刪除,更改,改變順序等功能都可以自己設計了,并且還可以自己更改密碼,設置自己的登陸密碼。好省下的就看你了。
關鍵詞:QQ