[病毒木馬] 檔案自刪除

(-: LYSM :-)發表於2020-11-29

程式退出時刪除檔案

void DeleteApplicationSelf()
{
	char szCommandLine[MAX_PATH + 10];

	// 設定本程式為實時執行,快速退出。
	SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);
	SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL);
	
	// 通知資源管理器不顯示本程式,當然如果程式沒有真正的刪除,重新整理資源管理器後仍會顯示出來的。
	SHChangeNotify(SHCNE_DELETE, SHCNF_PATH, _pgmptr, NULL);

	// 呼叫 cmd 傳入引數以刪除自己
	sprintf(szCommandLine, "/c del /q %s", _pgmptr);
	ShellExecute(NULL, "open", "cmd.exe", szCommandLine, NULL, SW_HIDE);

	// 必須要有,否則程式在被結束時檔案會再生
	ExitProcess(0); 	
}

製造程式被刪除的假象

其實是在另外一個地方建立了一個隱藏的 tmp 檔案,取代了原有的 exe

BOOL DelSelf()
{
	BOOL ret = FALSE;
	TCHAR FileName[MAX_PATH] = { 0 };
	TCHAR NewFileName[MAX_PATH] = { 0 };

	// 獲取自身檔案路徑
	if (0 == GetModuleFileName(NULL, FileName, MAX_PATH))
	{
		goto end;
	}

	// 嘗試使用修改檔案屬性的方式刪除
	SetFileAttributes(FileName, FILE_ATTRIBUTE_NORMAL);
	if (DeleteFile(FileName))
	{
		ret = TRUE;
		goto end;
	}

	// 再次嘗試刪除
	wsprintf(NewFileName, "%c:\\RECYCLER\0", FileName[0]);
	CreateDirectory(NewFileName, NULL);
	if (0 == SetFileAttributes(NewFileName, FILE_ATTRIBUTE_HIDDEN))
	{
		goto end;
	}
	wsprintf(NewFileName, "%c:\\RECYCLER\\%x.tmp\0", FileName[0], GetTickCount());
	if (0 == MoveFileEx(FileName, NewFileName, MOVEFILE_REPLACE_EXISTING))
	{
		goto end;
	}
	if (0 == SetFileAttributes(NewFileName, FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM))
	{
		goto end;
	}

	ret = TRUE;
end:
	return ret;
}

驅動強制刪除檔案

參考這裡

相關文章