病毒程式設計技術 5

2021-04-01 18:17:38 字數 1916 閱讀 8628

網路共享資源也是按樹狀組織的,非葉節點稱為容器(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,...