RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

惡意代碼常見功能技術(shù)

C語言編程學(xué)習(xí)基地 ? 來源:C語言編程學(xué)習(xí)基地 ? 作者:C語言編程學(xué)習(xí)基地 ? 2022-04-10 17:03 ? 次閱讀

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

惡意代碼常見功能技術(shù)如下:進(jìn)程遍歷,文件遍歷,按鍵記錄,后門,桌面截屏,文件監(jiān)控,自刪除,U盤監(jiān)控。知己知彼,百戰(zhàn)不殆。這里旨在給反病毒工程師提供參照。病毒作者請(qǐng)繞過。

進(jìn)程遍歷

進(jìn)程遍歷獲取計(jì)算機(jī)上所有進(jìn)程的信息(用戶進(jìn)程,系統(tǒng)進(jìn)程),通常是為了檢索受害進(jìn)程,檢測(cè)是否運(yùn)行在虛擬機(jī)中,以及是否存在殺軟等,有時(shí)候反調(diào)試技術(shù)也會(huì)檢測(cè)進(jìn)程名。所以在惡意代碼中進(jìn)程遍歷很常見。

具體流程:

1、調(diào)用CreateToolhelp32Snapshot獲取所有進(jìn)程的快照信息之所以稱為快照是因?yàn)楸4娴氖侵暗男畔?,該函?shù)返回進(jìn)程快照句柄。

2、調(diào)用Process32First獲取第一個(gè)進(jìn)程的信息,返回的進(jìn)程信息保存在PROCESSENTRY32結(jié)構(gòu)體中,該函數(shù)的第一個(gè)參數(shù)是CreateToolhelp32Snapshot返回的快照句柄。

3、循環(huán)調(diào)用Process32Next從進(jìn)程列表中獲取下一個(gè)進(jìn)程的信息,直到Process32Next函數(shù)返回FALSE,GetLastError的錯(cuò)誤碼為ERROR_NO_MORE_FILES,則遍歷結(jié)束。

4、關(guān)閉快照句柄并釋放資源

遍歷線程和進(jìn)程模塊的步驟和上面的相似,線程遍歷使用Thread32First和Thread32Next,模塊遍歷使用Module32First和Module32Next。

源碼實(shí)現(xiàn):

#include "EnumInfo.h"

void ShowError(char *lpszText){    char szErr[MAX_PATH] = {0};    ::wsprintf(szErr, "%s Error[%d]
", lpszText, ::GetLastError());#ifdef _DEBUG    ::MessageBox(NULL, szErr, "ERROR", MB_OK);#endif}

BOOL EnumProcess(){    PROCESSENTRY32 pe32 = { 0 };    pe32.dwSize = sizeof(PROCESSENTRY32);    // 獲取全部進(jìn)程快照    HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);    if (INVALID_HANDLE_VALUE == hProcessSnap)    {        ShowError("CreateToolhelp32Snapshot");        return FALSE;    }
    // 獲取快照中第一條信息    BOOL bRet = ::Process32First(hProcessSnap, &pe32);    while (bRet)    {        // 顯示 Process ID        printf("[%d]	", pe32.th32ProcessID);
        // 顯示 進(jìn)程名稱        printf("[%s]
", pe32.szExeFile);
        // 獲取快照中下一條信息        bRet = ::Process32Next(hProcessSnap, &pe32);    }
    // 關(guān)閉句柄    ::CloseHandle(hProcessSnap);
    return TRUE;}

BOOL EnumThread(){    THREADENTRY32 te32 = { 0 };    te32.dwSize = sizeof(THREADENTRY32);    // 獲取全部線程快照    HANDLE hThreadSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);    if (INVALID_HANDLE_VALUE == hThreadSnap)    {        ShowError("CreateToolhelp32Snapshot");        return FALSE;    }
    // 獲取快照中第一條信息    BOOL bRet = ::Thread32First(hThreadSnap, &te32);    while (bRet)    {        // 顯示 Owner Process ID        printf("[%d]	", te32.th32OwnerProcessID);
        // 顯示 Thread ID        printf("[%d]
", te32.th32ThreadID);
        // 獲取快照中下一條信息        bRet = ::Thread32Next(hThreadSnap, &te32);    }
    // 關(guān)閉句柄    ::CloseHandle(hThreadSnap);
    return TRUE;}

BOOL EnumProcessModule(DWORD dwProcessId){    MODULEENTRY32 me32 = { 0 };    me32.dwSize = sizeof(MODULEENTRY32);    // 獲取指定進(jìn)程全部模塊的快照    HANDLE hModuleSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwProcessId);    if (INVALID_HANDLE_VALUE == hModuleSnap)    {        ShowError("CreateToolhelp32Snapshot");        return FALSE;    }
    // 獲取快照中第一條信息    BOOL bRet = ::Module32First(hModuleSnap, &me32);    while (bRet)    {        // 顯示 Process ID        printf("[%d]	", me32.th32ProcessID);
        // 顯示 模塊加載基址        printf("[0x%p]	", me32.modBaseAddr);
        // 顯示 模塊名稱        printf("[%s]
", me32.szModule);
        // 獲取快照中下一條信息        bRet = ::Module32Next(hModuleSnap, &me32);    }
    // 關(guān)閉句柄    ::CloseHandle(hModuleSnap);
    return TRUE;}

文件遍歷

文件操作幾乎是所有惡意代碼必備的功能,木馬病毒竊取機(jī)密文件然后開一個(gè)隱秘端口,(之前在kali滲透群看到有人提問如何識(shí)別木馬,其實(shí)有一個(gè)簡(jiǎn)單的方法,幾乎所有的木馬都要與攻擊者的主機(jī)通信的,查看打開了哪些奇怪的端口是一種方法)。

就算是再R0下,也經(jīng)常會(huì)創(chuàng)建寫入讀取文件,文件功能經(jīng)常用到。文件搜索功能主要是通過調(diào)用FindFirstFile和FindNextFile來實(shí)現(xiàn)。

具體流程

1、調(diào)用FindFirstFile函數(shù),該函數(shù)接收文件路徑,第二個(gè)參數(shù)指向WIN32_FIND_DATA結(jié)構(gòu)的指針。若函數(shù)成功則返回搜索句柄。該結(jié)構(gòu)包含文件的名稱,創(chuàng)建日期,屬性,大小等信息。

該返回結(jié)構(gòu)中的成員dwFileAttributes為FILE_ATTRIBUTE_DIRECTORY時(shí)表示返回的是一個(gè)目錄,否則為文件,根據(jù)cFileName獲取搜索到的文件名稱。如果需要重新對(duì)目錄下的所有子目錄文件都再次進(jìn)行搜索的話,則需要對(duì)文件屬性進(jìn)行判斷。若文件屬性是目錄,則繼續(xù)遞歸搜索,搜索其目錄下的目錄和文件。

2、調(diào)用FindNextFile搜索下一個(gè)文件,根據(jù)返回值判斷是否搜索到文件,若沒有則說明文件遍歷結(jié)束。

3、搜索完畢后,調(diào)用FindClose函數(shù)關(guān)閉搜索句柄,釋放資源緩沖區(qū)資源。

源碼實(shí)現(xiàn):

#include "stdafx.h"#include "FileSearch.h"

void SearchFile(char *pszDirectory){    // 搜索指定類型文件    DWORD dwBufferSize = 2048;    char *pszFileName = NULL;    char *pTempSrc = NULL;    WIN32_FIND_DATA FileData = {0};    BOOL bRet = FALSE;
    // 申請(qǐng)動(dòng)態(tài)內(nèi)存    pszFileName = new char[dwBufferSize];    pTempSrc = new char[dwBufferSize];
    // 構(gòu)造搜索文件類型字符串, *.*表示搜索所有文件類型    ::wsprintf(pszFileName, "%s\*.*", pszDirectory);
    // 搜索第一個(gè)文件    HANDLE hFile = ::FindFirstFile(pszFileName, &FileData);    if (INVALID_HANDLE_VALUE != hFile)    {        do        {            // 要過濾掉 當(dāng)前目錄"." 和 上一層目錄"..", 否則會(huì)不斷進(jìn)入死循環(huán)遍歷            if ('.' == FileData.cFileName[0])            {                continue;             }            // 拼接文件路徑               ::wsprintf(pTempSrc, "%s\%s", pszDirectory, FileData.cFileName);            // 判斷是否是目錄還是文件            if (FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)                   {                // 目錄, 則繼續(xù)往下遞歸遍歷文件                SearchFile(pTempSrc);            }            else                                                                       {                // 文件                printf("%s
", pTempSrc);            }
            // 搜索下一個(gè)文件        } while (::FindNextFile(hFile, &FileData));    }
    // 關(guān)閉文件句柄    ::FindClose(hFile);    // 釋放內(nèi)存    delete []pTempSrc;    pTempSrc = NULL;    delete []pszFileName;    pszFileName = NULL;}

按鍵記錄

收集用戶的所有按鍵信息,分辨出哪些類似于賬號(hào),密碼等關(guān)鍵信息進(jìn)行利用,竊取密碼,這里用原始輸入模型直接從輸入設(shè)備上獲取數(shù)據(jù),記錄按鍵信息。

要想接收設(shè)備原始輸入WM_INPUT消息,應(yīng)用程序必須首先使用RegisterRawInputDevice注冊(cè)原始輸入設(shè)備,因?yàn)樵谀J(rèn)情況下,應(yīng)用程序不接受原始輸入。

具體流程

1、注冊(cè)原始輸入設(shè)備

一個(gè)應(yīng)用程序必須首先創(chuàng)建一個(gè)RAWINPUTDEVICE結(jié)構(gòu),這個(gè)結(jié)構(gòu)表明它所希望接受設(shè)備的類別,再調(diào)用RegisterRawInputDevices注冊(cè)該原始輸入設(shè)備。將RAWINPUTDEVICE結(jié)構(gòu)體成員dwFlags的值設(shè)置為RIDEV_INPUTSINK,即使程序不處于聚焦窗口,程序依然可以接收原始輸入。

2、獲取原始輸入數(shù)據(jù)

消息過程中調(diào)用GetInputRawData獲取設(shè)備原始輸入數(shù)據(jù)。在WM_INPUT消息處理函數(shù)中,參數(shù)lParam存儲(chǔ)著原始輸入的句柄。此時(shí)可以直接調(diào)用

GetInputRawData函數(shù),根據(jù)句柄獲取RAWINPUT原始輸入結(jié)構(gòu)體的數(shù)據(jù)。

dwType表示原始輸入的類型,RIM_TYPEKEYBOARD表示是鍵盤的原始輸入,Message表示相應(yīng)的窗口消息。WM_KEYBOARD表示普通按鍵消息,WM_SYSKEYDOWN表示系統(tǒng)按鍵消息,VKey存儲(chǔ)鍵盤按鍵數(shù)據(jù)。

3、保存按鍵信息

GetForegroundWindow獲取按鍵窗口的標(biāo)題,然后調(diào)用GetWindowText根據(jù)窗口句柄獲取標(biāo)題,存儲(chǔ)到本地文件。

源碼實(shí)現(xiàn):

惡意代碼的存在不是由于黑客之類的手段,主要還是我們開發(fā)過程中很多情況會(huì)用到這樣的技術(shù),所以大家請(qǐng)利用技術(shù)做正確的事情!

另外,對(duì)于編程學(xué)習(xí)的小伙伴,如果你想更好的提升你的編程核心能力(內(nèi)功)不妨從現(xiàn)在開始!

原文標(biāo)題:C/C++惡意代碼盤點(diǎn)(一):進(jìn)程遍歷丨木馬病毒丨密碼記錄

文章出處:【微信公眾號(hào):C語言編程學(xué)習(xí)基地】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

審核編輯:彭菁

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4327

    瀏覽量

    62564
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4779

    瀏覽量

    68514
  • 應(yīng)用程序
    +關(guān)注

    關(guān)注

    37

    文章

    3264

    瀏覽量

    57676

原文標(biāo)題:C/C++惡意代碼盤點(diǎn)(一):進(jìn)程遍歷丨木馬病毒丨密碼記錄

文章出處:【微信號(hào):cyuyanxuexi,微信公眾號(hào):C語言編程學(xué)習(xí)基地】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何去防范惡意代碼攻擊呢

    在享受便利的同時(shí),卻往往忽視了隱私的保護(hù)。操作系統(tǒng)的漏洞、應(yīng)用安全的不完善,都會(huì)導(dǎo)致物聯(lián)設(shè)備被惡意代碼注入,從而導(dǎo)致個(gè)人賬號(hào)等隱私泄露。那么如何去防范惡意代碼攻擊呢?從當(dāng)前的技術(shù)角度來講,僅僅通過系統(tǒng)
    發(fā)表于 01-25 06:10

    計(jì)算機(jī)抗惡意代碼免疫模型

    很多針對(duì)計(jì)算機(jī)惡意代碼的免疫模型和算法要求學(xué)習(xí)訓(xùn)練的代價(jià)比較大,另外這些算法本身也不同程度地存在問題,離實(shí)際應(yīng)用有較大距離,該文提出一種新的計(jì)算機(jī)抗惡意代碼
    發(fā)表于 04-16 11:34 ?13次下載

    Decoy:基于主動(dòng)技術(shù)惡意代碼捕獲系統(tǒng)

    由于現(xiàn)有的被動(dòng)捕獲技術(shù)逐漸無法適應(yīng)網(wǎng)絡(luò)安全需要,本文提出一種基于主動(dòng)技術(shù)惡意代碼捕獲方法,結(jié)合主動(dòng)技術(shù)和高交互式蜜罐構(gòu)建了惡意代碼自動(dòng)捕獲
    發(fā)表于 08-10 15:28 ?6次下載

    Decoy基于主動(dòng)技術(shù)惡意代碼捕獲系統(tǒng)

    由于現(xiàn)有的被動(dòng)捕獲技術(shù)逐漸無法適應(yīng)網(wǎng)絡(luò)安全需要,本文提出一種基于主動(dòng)技術(shù)惡意代碼捕獲方法,結(jié)合主動(dòng)技術(shù)和高交互式蜜罐構(gòu)建了惡意代碼自動(dòng)捕獲
    發(fā)表于 12-18 17:47 ?10次下載

    基于網(wǎng)頁文件代碼分類的惡意代碼檢測(cè)系統(tǒng)

    在網(wǎng)絡(luò)和計(jì)算機(jī)技術(shù)的飛速發(fā)展的今天,網(wǎng)頁已經(jīng)成為傳遞信息最快捷,表現(xiàn)形式最豐富的信息載體之一。隨著網(wǎng)站的廣泛建設(shè),其中的網(wǎng)頁惡意代碼的危害面和傳播面也隨之?dāng)U大。所以研究一套網(wǎng)頁惡意代碼檢測(cè)系統(tǒng)就顯得
    發(fā)表于 11-17 09:49 ?4次下載
    基于網(wǎng)頁文件<b class='flag-5'>代碼</b>分類的<b class='flag-5'>惡意代碼</b>檢測(cè)系統(tǒng)

    基于主動(dòng)學(xué)習(xí)的惡意代碼檢測(cè)

    現(xiàn)有惡意代碼的檢測(cè)往往依賴于對(duì)足夠數(shù)量樣本的分析.然而新型惡意代碼大量涌現(xiàn),其出現(xiàn)之初,樣本數(shù)量有限,現(xiàn)有方法無法迅速檢測(cè)出新型惡意代碼及其變種.在數(shù)據(jù)流依賴網(wǎng)絡(luò)中分析進(jìn)程訪問行為異常度與相似度
    發(fā)表于 01-03 10:57 ?0次下載
    基于主動(dòng)學(xué)習(xí)的<b class='flag-5'>惡意代碼</b>檢測(cè)

    基于棧式自編碼的惡意代碼分類算法

    針對(duì)傳統(tǒng)機(jī)器學(xué)習(xí)方法不能有效地提取惡意代碼的潛在特征,提出了基于棧式自編碼( stacked auto en-coder,SAE)的惡意代碼分類算法。其次從大量訓(xùn)練樣本中學(xué)習(xí)并提取惡意代碼紋理圖像
    發(fā)表于 01-16 17:19 ?0次下載
    基于棧式自編碼的<b class='flag-5'>惡意代碼</b>分類算法

    結(jié)合動(dòng)態(tài)行為和機(jī)器學(xué)習(xí)的惡意代碼檢測(cè)方法

    目前惡意代碼出現(xiàn)頻繁且抗識(shí)別性加強(qiáng),現(xiàn)有基于簽名的惡意代碼檢測(cè)方法無法識(shí)別未知與隱藏的惡意代碼。提出一種結(jié)合動(dòng)態(tài)行為和機(jī)器學(xué)習(xí)的惡意代碼檢測(cè)方法。搭建自動(dòng)化分析 Cuckoo沙箱記錄
    發(fā)表于 03-23 16:24 ?11次下載
    結(jié)合動(dòng)態(tài)行為和機(jī)器學(xué)習(xí)的<b class='flag-5'>惡意代碼</b>檢測(cè)方法

    基于知識(shí)蒸餾的惡意代碼家族檢測(cè)方法研究綜述

    近年來,惡意代碼變種層出不窮,惡意軟件更具隱蔽性和持久性,亟需快速有效的檢測(cè)方法來識(shí)別惡意樣本。針對(duì)現(xiàn)文中提出了一種基于知識(shí)蒸餾的惡意代碼家族檢測(cè)方法,該模型通過逆向反編譯
    發(fā)表于 04-20 14:49 ?9次下載
    基于知識(shí)蒸餾的<b class='flag-5'>惡意代碼</b>家族檢測(cè)方法研究綜述

    一種Attention-CNN惡意代碼檢測(cè)模型

    惡意代碼攻擊已經(jīng)成為互聯(lián)網(wǎng)最重要的威脅之一,并且現(xiàn)存的惡意代碼數(shù)據(jù)龐大,特征多樣。為了更好地提取惡意代碼特征以及掌握惡意代碼的行為,提岀了基于注意力杋制的Δ ttention-CNN
    發(fā)表于 04-27 10:31 ?32次下載
    一種Attention-CNN<b class='flag-5'>惡意代碼</b>檢測(cè)模型

    惡意代碼動(dòng)態(tài)流量偽裝框架StealthyFlow綜述

    加密流量進(jìn)遠(yuǎn)控通信的公共資源型惡意代碼與GAN結(jié)合,對(duì)惡意流量進(jìn)行不影響攻擊功能的偽裝,旨在實(shí)現(xiàn)偽裝后的對(duì)抗流量與良性流量的不可區(qū)分性,進(jìn)而繞過基于杋器學(xué)習(xí)算法的分類器。 Stealthy Flow具有如下優(yōu)勢(shì):根據(jù)目標(biāo)流量的變
    發(fā)表于 06-01 14:30 ?11次下載

    基于機(jī)器學(xué)習(xí)的惡意代碼檢測(cè)分類

    基于特征碼匹配的靜態(tài)分析方法提取的特征滯后于病毒發(fā)展,且不能檢測(cè)出未知病毒。為此,從病毒反編譯文件及其灰度圖出發(fā)進(jìn)行特征提取及融合,采用機(jī)器學(xué)習(xí)中的隨機(jī)森林(RF)算法對(duì)惡意代碼家族進(jìn)行分類,提取
    發(fā)表于 06-10 11:03 ?14次下載

    準(zhǔn)確識(shí)別APT,選對(duì)惡意代碼檢測(cè)系統(tǒng)最重要

    通過APT檢測(cè)出已知和未知惡意代碼,提高網(wǎng)絡(luò)安全主動(dòng)防御能力,是網(wǎng)絡(luò)安全解決方案中需要重視的地方。然而,目前業(yè)界普通的惡意代碼檢測(cè)系統(tǒng)難以準(zhǔn)確識(shí)別APT,給政府、企事業(yè)單位的安全防護(hù)工作帶來了極大困惑。
    的頭像 發(fā)表于 03-12 16:03 ?412次閱讀

    國聯(lián)易安:“三管齊下”,惡意代碼輔助檢測(cè)“更高效”

    國內(nèi)專注于保密與非密領(lǐng)域的分級(jí)保護(hù)、等級(jí)保護(hù)、業(yè)務(wù)連續(xù)性安全和大數(shù)據(jù)安全產(chǎn)品解決方案與相關(guān)技術(shù)研究開發(fā)的領(lǐng)軍企業(yè)——國聯(lián)易安研究團(tuán)隊(duì)在 長期對(duì)木馬、病毒等惡意代碼行為進(jìn)行監(jiān)測(cè)、分析、研究的基礎(chǔ)上
    的頭像 發(fā)表于 11-12 12:03 ?175次閱讀

    國聯(lián)易安:“三個(gè)絕招”,讓惡意代碼輔助檢測(cè)“穩(wěn)準(zhǔn)快全”

    隨著黑客攻擊技術(shù)的演變,惡意程序檢測(cè)技術(shù)也得到了較快的發(fā)展。惡意代碼/程序通常包括特洛伊木馬、計(jì)算機(jī)病毒、蠕蟲程序以及其他各種流氓軟件等。其技術(shù)
    的頭像 發(fā)表于 11-22 15:47 ?203次閱讀
    RM新时代网站-首页