熊貓燒香病毒之專(zhuān)殺工具編寫(xiě)教程方案_第1頁(yè)
熊貓燒香病毒之專(zhuān)殺工具編寫(xiě)教程方案_第2頁(yè)
熊貓燒香病毒之專(zhuān)殺工具編寫(xiě)教程方案_第3頁(yè)
熊貓燒香病毒之專(zhuān)殺工具編寫(xiě)教程方案_第4頁(yè)
熊貓燒香病毒之專(zhuān)殺工具編寫(xiě)教程方案_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、熊貓燒香病毒之專(zhuān)殺工具的編寫(xiě)教程通過(guò)對(duì)熊貓燒香的行為分析, 這里僅針對(duì)所得結(jié)果, 來(lái)進(jìn)行專(zhuān)殺工具的編寫(xiě)。 本節(jié)課我 們會(huì)學(xué)習(xí)使用 C+ 來(lái)寫(xiě)一個(gè)簡(jiǎn)單的 “熊貓燒香 ”專(zhuān)殺系統(tǒng)。實(shí)驗(yàn)?zāi)康模航Y(jié)合本篇文章的知識(shí)點(diǎn),能夠徹底掌握文章所講述的編寫(xiě)殺毒軟件的方法。實(shí)驗(yàn)思路:1. 理解專(zhuān)殺工具所需要實(shí)現(xiàn)的功能2. 利用 VC+編寫(xiě)專(zhuān)殺工具3. 結(jié)合 Process Monitor 驗(yàn)證專(zhuān)殺工具實(shí)驗(yàn)步驟:1、病毒行為回顧與歸納這里我們首先回顧一下病毒的行為:* 病毒行為 1: * 病毒本身創(chuàng)建了名為 spoclsv.exe 的進(jìn)程,該進(jìn)程文件的路徑為:C:WINDOWSsystem32driversspocl

2、sv.exe* 病毒行為 2: * 在命令行模式下使用 net share 命令來(lái)取消系統(tǒng)中的共享。* 病毒行為 3: * 刪除安全類(lèi)軟件在注冊(cè)表中的啟動(dòng)項(xiàng)。* 病毒行為 4:*在注冊(cè)表 :HKCUSoftwareMicrosoftWindowsCurrentVersionRun 中創(chuàng)建 svcshare用于在開(kāi)機(jī)時(shí)啟動(dòng)位于 C:WINDOWSsystem32driversspoclsv.exe 的病毒程序。* 病毒行為 5:* 修改注冊(cè)表, 使得隱藏文件無(wú)法通過(guò)普通的設(shè)置進(jìn)行顯示, 該位置為:HKLMSOFTWAREMicrosoftWindowsCurrentVersionExplorer

3、AdvancedFolderHiddenSHOWALL病毒將 CheckedValue 的鍵值設(shè)置為了 0。* 病毒行為 6:* 將自身拷貝到根目錄, 并命名為 setup.exe ,同時(shí)創(chuàng)建 autorun.inf用于病毒的啟動(dòng),這兩個(gè)文件的屬性都是“隱藏”。* 病毒行為 7: * 在一些目錄中創(chuàng)建名為 Desktop_.ini 的隱藏文件。* 病毒行為 8: * 向外發(fā)包,連接局域網(wǎng)中其他機(jī)器??v觀(guān)以上八點(diǎn)行為, 這里需要說(shuō)明的是, 其中的第二點(diǎn)行為, 由于我不知道用戶(hù)計(jì)算機(jī) 在中毒前的設(shè)置, 因此這條我打算忽略。 第三點(diǎn)行為, 我不知道用戶(hù)的計(jì)算機(jī)安裝了哪些殺 毒軟件, 而病毒又會(huì)將所有

4、殺軟的注冊(cè)表啟動(dòng)項(xiàng)刪除, 所以這一條我打算忽略, 用戶(hù)在使用 本專(zhuān)殺工具后, 可以自行重新安裝殺軟, 或者有經(jīng)驗(yàn)的用戶(hù)也可以自行在注冊(cè)表中添加回殺 軟名稱(chēng)。另外,病毒的第八點(diǎn)行為,我也打算忽略,因?yàn)橹灰獎(jiǎng)h除了病毒本體,那么自然就 解決了這個(gè)問(wèn)題, 所以我的專(zhuān)殺工具主要應(yīng)付剩下的五個(gè)問(wèn)題。 在這里各位讀者想必也能夠 發(fā)現(xiàn), 我的專(zhuān)殺工具所要做的工作, 與我之前寫(xiě)的手動(dòng)查殺的過(guò)程其實(shí)是極為相似的, 這也 是為什么我當(dāng)時(shí)就強(qiáng)調(diào),我們依舊要掌握手動(dòng)查殺病毒這個(gè)技能的原因。2、專(zhuān)殺工具界面的制作如果使用批處理來(lái)殺毒,因?yàn)樗\(yùn)行時(shí)沒(méi)有界面,因此我們往往不知道殺毒程序究竟 干了些什么, 也不知道究竟有沒(méi)有查

5、殺成功, 這也凸顯了使用高級(jí)語(yǔ)言開(kāi)發(fā)專(zhuān)殺工具的優(yōu)勢(shì)。 這里我使用 MFC 進(jìn)行 “熊貓燒香 ”病毒專(zhuān)殺工具的開(kāi)發(fā),繪制界面如下圖所示:其中的 “Edit Box 控”件的屬性調(diào)整如下:界面非常簡(jiǎn)單,接下來(lái)就是代碼的編寫(xiě)。3、計(jì)算病毒程序的散列值在查殺病毒的技術(shù)中有一種方法類(lèi)似于特征碼查殺法,這種方法并不從病毒內(nèi)提取特 征碼, 而是計(jì)算病毒的散列值。 利用這個(gè)散列值, 就可以在查殺的過(guò)程中計(jì)算每個(gè)文件的散 列,然后進(jìn)行比較。這種方法簡(jiǎn)單易于實(shí)現(xiàn),一般在病毒剛被發(fā)現(xiàn)時(shí),在逆向分析前使用。 常見(jiàn)的計(jì)算散列的算法有 MD5 、 Sha-1 以及 CRC32 等。 這里使用 CRC32 算法計(jì)算散列 值

6、,代碼如下:該函數(shù)的參數(shù)有兩個(gè), 一個(gè)是指向緩沖區(qū)的指針, 第二個(gè)是緩沖區(qū)的長(zhǎng)度。 它將文件全 部讀入緩沖區(qū)中, 然后用 CRC32 函數(shù)計(jì)算文件的 CRC32 散列值, 可以得到我所研究的 “熊 貓燒香 ”病毒的散列值為 0x89240FCD 。這里請(qǐng)大家注意,不同版本的病毒的散列值是不同 的,我所得出的這個(gè)值僅針對(duì)我所討論的這個(gè)版本的病毒。4、查找進(jìn)程與提升權(quán)限我們需要在內(nèi)存中查找病毒是否存在,代碼如下:這里還需要提升系統(tǒng)的權(quán)限,提升成功后,當(dāng)前進(jìn)程就可以訪(fǎng)問(wèn)一些受限的系統(tǒng)資源。代碼如下:5、查找并刪除 Desktop_.ini 文件病毒會(huì)在所有盤(pán)符下面的非系統(tǒng)目錄中創(chuàng)建名為 Deskto

7、p_.ini 的文件,雖說(shuō)這個(gè)文件 看似并不會(huì)對(duì)系統(tǒng)產(chǎn)生什么危害, 但是為了實(shí)現(xiàn)對(duì)“熊貓燒香”的徹底查殺, 還是應(yīng)當(dāng)將其 刪除的。這里主要涉及兩方面的知識(shí),一個(gè)是遍歷整個(gè)磁盤(pán)的文件,這需要使用FindFirstFile()與 FindNextFile() 這兩個(gè) API 函數(shù),并采用遞歸調(diào)用的方法 ; 另一個(gè)是修改文件屬性, 因?yàn)椴《緞?chuàng)建出來(lái)的文件會(huì)帶有系統(tǒng)、 只讀和隱藏這三個(gè)屬性, 若不對(duì)其進(jìn)行 更改,是無(wú)法刪除病毒文件的。依照這個(gè)思想,編寫(xiě)代碼如下:www. ichu nqiu .comDWORD WINAPI FindFiles(LPVOID IpszPath)WIN32 FIND DA

8、TA stFindFile;HANDLE hFindFile;/掃描路徑char szPathMAX_PATH;char szFindFileMAX_PATH;char szSearchhVkX_PATH;char #szFilter;int len;int 廠(chǎng)et = 0;szFilter =lstrcpy(szPathJ (char *)IpszPath);len = lstrlen(szPath);if(szPathlen-l != 99)szPathlen *'; szPathlen+l = '0B;lstrcpy(szSearchJ szPath); lstrcat(

9、szSearchJszFilter);hFindFile = FindFirstFile(szSearchJ &stFindFile;); if(hFindFile = INVALID_HANDLE_VALUE)do需要說(shuō)明的是, 這里需要在本程序前定義一個(gè) CString 類(lèi)型的 csTxt 全局變量, 用于將 查殺的結(jié)果信息輸出到程序界面,之后的程序中也會(huì)用到這個(gè)變量。6、主程序的編寫(xiě)主程序也就是“一鍵查殺”按鈕的響應(yīng),我在代碼中已添加相應(yīng)的注釋?zhuān)簑ww. ichu nqiu .coniSetDlgltemText(IDCLISTcsTxt);/打開(kāi)并去試結(jié)束病番進(jìn)帝HANDLE

10、hProcess = OpenProcess(PROCESSALACCESSALSEdwPid); if (hProcess = INVALID_HANDLE_VALUE)csTxt += _T("無(wú)法結(jié)束病壽進(jìn)程return ;bet = TerminateP廠(chǎng)ocess(hP廠(chǎng)ocess,0);if (bRet = FALSE)csTxt += _T(*無(wú)法結(jié)束病毒進(jìn)程return ;csTxt += _TC病毒進(jìn)程已經(jīng)結(jié)束SetDlgltemText(IDCLIST,csTxt); CloseHandle(hProcess);elsecsTxt +=系統(tǒng)中不存在spoclsv.

11、exe病毒進(jìn)程Sleep(10);/查殺磁盤(pán)中是否存在名為spoclsv.exe的病壽文件 char szSysPathMAX_PATH = 0 ; GetSystemDirectory(szSysPathJMAXPATH);lstrcatCszSysPath/AdriversXspoclsv.exe");csTxt + _T(-檢查碩盤(pán)中是否存Sspoclsv.exe文件if (6etFlleAttributes(szSysPath) = OxFFFFFFFF)csTxt += _T (- spoclsv.文件不存在elsecsTxt += _T("spoclsv.exe

12、病焉文件存在,正在計(jì)茸鍛列值HANDLE hFile = CreateFileCszSysPathGENERICREADFILESHAREREADNULLOPENEXISTINGFILEATTRIBUTE _NORMAL, NULL);if (hFile = INVALID_HANDLE_VALUE) -Afx>tessageBox("Create Error");return ;DWORD dwSize = GetFileSizeChFileNULL);if (dwSize “ OxFFFFFFFF)AfxMessageBox("GetFileSize E

13、rror");return ;www. ichu nqiu .comDWORD dwSize = GetFileSize(hFile,NULL);if (dwSize = OxFFFFFFFF)AftessageBox("GetFileSize Errorw); return ;BYTE #pFile = (BYTE#)malloc(dwSize);if (pFile = NULL)AfssageBox(wma 1 loc Error*); return ;DWORD dwNum = 0;ReadFile(hFileJpFile>dwSize,&dwNum;N

14、ULL); /計(jì)算spoclsv.exe的散列值DWORD dwCrc32 = CRC32(pFileJdwSize);if (pFile != NULL) free(pFile); pFile = NULL;CloseHandle(hFile);/ 0X89240FCD是"館貓燒香"病毒的散列值if (dwCrc32 != 0X89240FCD)cbTxt += _T ("SpoGlbv.exetx:驗(yàn)和驗(yàn)證失敗W); elsecsTxt += _T("spoclsv.exe校驗(yàn)和驗(yàn)證成功,正在刪除/去除文件的隱藏、系統(tǒng)以及只讀屬性FILE ATTRI

15、BUTE HIDDEN; FILE ATTRIBUTE SYSTEM; -FILE ATTRIBUTE READONLY; dwFileAttributes);DWORD dwFileAttributes = GetFileAttributes(szSysPath); dwFileAttributes &= dwFileAttributes &= dwFileAttributes &=SetFileAttributes(szSysPathJ/ 刪除spoclsv.exebRet=DeleteFile(szSysPath);if (bRet)csTxt += _T ( &

16、quot; s poc 1 s v. exe 病毒被刪除!elsecsTxt += _T(Mspoclsv.exe 病毒無(wú)法刪除SetDlgltemTextClDCLIST,csTxt); Sleep(10);/ / 刪除每個(gè)盤(pán)符下的setup.exeautorun. inf,以及Desktop, ini / char szDriverStringMAXBYTE = 0 ;char *pTmp = NULL;獲取字符串類(lèi)型的驅(qū)動(dòng)器列表GetLogicalDriveStrings(MAXBYTE, szDriverString);prnp = szDriverString;while( spTm

17、p )char szAutorunPathMAX_PATH = 0 ;char szSetupPathMAX_PATH 0 ; lstrcat(szAutorunPath,pTmp);lstrcat(szAutorunPathJ"autorun.in廠(chǎng));lstrcat(szSetupPath,pTmp);1strcat(szSetupPath,"setup.exe");if (GetFileAttributes(szSetupPath) = OxFFFFFFFF)csTxt pTmp;csTxt ” T("setup.exe病毒文件不存左elsecsT

18、xt += pTmp;csTxt += _T("setup.exe病焉文件存在,正在進(jìn)行計(jì)算校驗(yàn)和");HANDLE hFile CreateFile(szSetupPath,GENERIC_READ,FILE_SHARE_READJNULLJOPEN_EXISTINGJFILE_ATT RIBUTE_NORMAL » NULL );if (hFile = INVALID_HANDLE_VALUE)AfxMessageBox("Create Error*);return ;DWORD dwSize = GetFileSizeChFileNULL); if

19、 (dwSize = OxFFFFFFFF)AfxMessageBoxCetFileSize Error"); return ;BYTE *pFile = (BYTE*)malloc(dwSize); if (pFile = NULL)AfxMessageBox( ,fmalloc Error1'); return ;DWORD dwNum = 0;ReadFile(hFilepFileJdwSizeJ&dwNum;NULL);DWORD dwCrc32 = CRC32(pFileJdwSize); if (pFile != NULL) free(pFile); pF

20、ile = NULL;CloseHandle(hFile);if (dwCrc32 != 0X89240FCD)csTxt +=(校驗(yàn)和驗(yàn)證失敗);else csTxt += _T(校驗(yàn)和驗(yàn)證成功,正在刪除 );/去除文件的隱藏系統(tǒng)以及只讀屬性DWORD dwFileAttributes = GetFileAttributes(szSetupPath); dwFileAttributes &二 FILE_ATTRIBUTE_HIDDEN; dwFileAttributes &二 FILE_ATTRIBUTE_SYSTEM; dwFileAttributes &= -FI

21、LE ATTRIBUTE READONLY;SetFileAtt廠(chǎng)ibutes(szS皂tupPath, dwFileAttributes);/ 刪除setup.exebRet = DeleteFile(szSetupPath);if (bRet)csTxt += pTmp;csTxt += _1('* setup.exe 病毒被刪除!elsecsTxt += pTmp;csTxt += _T(M setup.exe 病毒無(wú)法刪除/去除文件的隱藏、系統(tǒng)以及只讀屬性DWORD dwFileAttributes = GetFileAttributes(szAutorunPath); dwF

22、ileAttributes -FILE ATTRIBUTE HIDDEN; dwFileAttributes &= -FILE ATTRIBUTE SYSTEM; dwFileAttributes &二-FILE ATTRIBUTE READONLY;SetFileAttributes(szAutorunPathJ dwFileAttributes); / 刪除autorun.infbRet = DeleteFile(szAutorunPath); csTxt += pTmp;if (bRet)csTxt += _T ( Mautorun. inf 刪除!www. ichu n

23、qiu .comelsecsTxt += _T(wautorun.inf不存在或無(wú)法刪除J/ 刪除Desktop_.iniFindFiles(pTmp);/檢宜T一個(gè)盤(pán)符pTmp += 4;Sleep(10);/修復(fù)注冊(cè)表內(nèi)容,刪除病蒔啟動(dòng)項(xiàng)并修復(fù)文件的隱藏顯示/ csTxt +=(“正在檢萱注冊(cè)表");SetDlgltemText(IDC LIST,csTxt);/曽先檢萱啟動(dòng)項(xiàng)char RegRunf = "SoftwareMicrosoftWindowsCurrentVersionRun"HKEY hKeyHKCU NULL;LONG lSize = MAX

24、BYTE;char cDataMAXBYTE = 0 ;long lRet = RegOpenKey(HKEY_CURRENT_USER, RegRun, AhKeyHKCU;);if(lRet = ERROR-SUCCESS)lRet = RegQueryValueEx(hKeyHKCUJ"svcshare"NULLNULL,(unsigned char *)cData,(unsigned long e)&lSiz e;);if ( lRet ERROR_SUCCESS)if (lstrcmp(eData,"C:WIND0WSsystem32driversspo:lsv.exe") = 0)csTxt += _T(”注冊(cè)表啟動(dòng)項(xiàng)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論