該軟件是本人在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;
關於帶密碼的列表文件的讀取和該過程類似,只是在第一位的時候進行判斷就可以了。
到此為止,你就可以自己根據這個原理制作各種各樣的列表軟件了,比如添加,刪除,更改,改變順序等功能都可以自己設計了,並且還可以自己更改密碼,設置自己的登陸密碼。好省下的就看你了。