網路共享資源也是按樹狀組織的,非葉節點稱為容器(container),對容器需要進一步搜尋直到到達葉子節點為止,葉子節點才是共享資源的根路徑。共享資源一般分成兩種:共享列印裝置和共享資料夾。對於網路共享檔案的搜尋,採用wnetopenenum和wnetenumresource(由mpr.dll匯出)進行遞迴列舉。其函式原型及引數含義請參閱msdn,使用如下**enumshare.cpp將顯示所有的網路驅動器共享資料夾的路徑:
#include
#include
#pragma comment(lib,"mpr.lib")
int enum_netshare(lpnetresource lpnr);
void __cdecl main(int argc,char *argv)
int enum_netshare(lpnetresource lpnr)
lpnrlocal = (lpnetresource) malloc(cbbuffer);
if (lpnrlocal == null)
return false;
doelse
}}else if (renum != error_no_more_items)
}while(renum != error_no_more_items);
free((void*)lpnrlocal);
r = wnetcloseenum(henum);
if(r != no_error)
return true;
}遍歷開始時wnetopenenum第4形參為0,在發現共享容器進行遞迴呼叫時候,該引數將為共享容器的netresource結構指標。從netresource結構中可以找到我們感興趣的lpremotename,該指標不為0則表示是有效的共享容器或共享資料夾。
typedef struct _netresource netresource;
void enum_path(char *cpath)
}else
}while(r=findnextfile(hfd,&wfd),r!=0);
}setcurrentdirectory(cdir);
}短短20多行c**就實現了檔案遍歷的功能,win32 api的強大功能不僅為開發者提供了便利,同時也為病毒敞開了方便之門。用彙編實現則稍微複雜一些,感興趣的讀者可參閱elkern中的enum_path部分,原理是一樣的,限於篇幅這裡不再給出相應的彙編**。
非遞迴搜尋不使用堆疊儲存相關的資訊,而使用顯式分配的鍊錶或棧等結構儲存相關的資訊,應用乙個迭代迴圈完成遞迴遍歷同樣的功能,下面是使用鍊錶以棧方式處理子目錄列表的乙個簡單實現:
在以組合語言實現時,需要自己管理鍊錶以及分配和釋放相應的結構,因此較為煩瑣,**量也稍大,因此病毒多採用遞迴的方式進行搜尋。值得注意的是搜尋深層次的目錄是很費時的,因此大部分病毒為避免cpu佔用率過高,搜尋一定數量的檔案之後,都會呼叫sleep休眠一會,以避免被敏感的使用者發覺。檔案搜尋和感染模組通常是以單獨的執行緒執行的,在病毒獲得控制權後,建立相應的搜尋和感染執行緒,而將主現成的控制權交給原程式。
* pe檔案的修改和感染策略
* 參考文獻
[1] the pe file format ,luevel**eyer
[2] microsoft portable executable and common object file format specification ,microsoft corp.
[3] an in-depth look into the win32 portable executable file format , matt pietrek
[4] 29a issue7
作者簡介
溫玉傑,男,現從事網路安全工作。主要研究領域為惡意**、逆向工程、人工智慧、編譯理論、底層安全技術等。曾與羅雲彬合譯《intel組合語言程式設計》,與人合著《軟體加密技術內幕》等。
高階程式設計技術作業 5
題目描述 使用乙個for迴圈列印數字1 20 包含 展示 for number in range 1,21 print number input null output 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 題目描述 通過給函式rang...
高階程式設計技術(Python)作業5
5 9 處理沒有使用者的情形 在為完成練習5 8編寫的程式中,新增一條if 語句,檢查使用者名稱列表是否為空。如果為空,就列印訊息 we need to find some users 刪除列表中的所有使用者名稱,確定將列印正確的訊息。solution users if users for user...
Nios Flash程式設計技術
1.1 altera支援cfi flash程式設計 1.3 非支援cfi程式設計 由於我所用的nor flash晶元是am29lv320db,不再nios支援的列表,自己編輯了override檔案,但還是無法正確program進去,決定用列表支援的sst39vf800試一試,引腳相容,容量為1 4,...