程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 對《QQ列表精靈》源代碼分析和仿制

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

編輯:Delphi

該軟件是本人在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;

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

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved