亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++封裝遠程注入類CreateRemoteThreadEx實例

2020-01-26 15:13:38
字體:
來源:轉載
供稿:網友

本文實例講述了C++封裝遠程注入類CreateRemoteThreadEx的方法,分享給大家供大家參考。具體方法如下:

首先,類初始化時傳入要注入的DLL文件名

只使用兩個函數

復制代碼 代碼如下:
// 注入DLL到指定的地址空間
BOOL InjectModuleInto(DWORD dwProcessId);
// 從指定的地址空間卸載DLL
BOOL EjectModuleFrom(DWORD dwProcessId);

.h頭文件如下:

復制代碼 代碼如下:
#pragma once 
#include <windows.h>  //在頭文件中包含 
 
class CRemThreadInject 

public: 
    CRemThreadInject(LPSTR lpDllName); 
    ~CRemThreadInject(void); 
 
protected: 
    char m_szDllName[MAX_PATH]; 
    static BOOL EnableDebugPrivilege(BOOL bEnable); 
public: 
    // 注入DLL到指定的地址空間 
    BOOL InjectModuleInto(DWORD dwProcessId); 
    // 從指定的地址空間卸載DLL 
    BOOL EjectModuleFrom(DWORD dwProcessId); 
};

.cpp源文件如下:

復制代碼 代碼如下:
#include "RemThreadInject.h" 
#include <tlhelp32.h>  
 
CRemThreadInject::CRemThreadInject(LPSTR lpDllName) 

    memcpy(m_szDllName, lpDllName, MAX_PATH); 
    EnableDebugPrivilege(TRUE); 

 
CRemThreadInject::~CRemThreadInject(void) 

    EnableDebugPrivilege(FALSE); 

 
BOOL CRemThreadInject::EnableDebugPrivilege(BOOL bEnable) 

    HANDLE hToken = INVALID_HANDLE_VALUE; 
    //OpenProcessToken 
    if (0 == ::OpenProcessToken(::GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken)) 
    { 
        return FALSE; 
    } 
    LUID luid; 
     
    // 
    ::LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid); 
    TOKEN_PRIVILEGES tp; 
    tp.PrivilegeCount = 1; 
    tp.Privileges[0].Luid = luid; 
    if (bEnable) 
        tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 
    else 
        tp.Privileges[0].Attributes = 0; 
    if ( !AdjustTokenPrivileges( 
        hToken,  
        FALSE,  
        &tp,  
        sizeof(TOKEN_PRIVILEGES),  
        (PTOKEN_PRIVILEGES) NULL,  
        (PDWORD) NULL) ) 
    {  
        return FALSE;  
    }  
    if (GetLastError() == ERROR_NOT_ALL_ASSIGNED) 
    { 
        return FALSE; 
    }  
    ::CloseHandle(hToken); 
    return TRUE; 

 
// 注入DLL到指定的地址空間 
BOOL CRemThreadInject::InjectModuleInto(DWORD dwProcessId) 

    // 
    if (::GetCurrentProcessId() == dwProcessId) 
    { 
        return FALSE;  
    } 
    BOOL bFound; 
    /************************************************************************/ 
    /* 遍歷模塊                                                              */ 
    /************************************************************************/ 
    HANDLE hModuleSnap = INVALID_HANDLE_VALUE;  
    MODULEENTRY32 me32;  
 
    //  Take a snapshot of all modules in the specified process.  
    hModuleSnap = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, dwProcessId );  
    if( hModuleSnap == INVALID_HANDLE_VALUE )  
    {  
        return( FALSE );  
    }  
    me32.dwSize = sizeof( MODULEENTRY32 );  
    if( !Module32First( hModuleSnap, &me32 ) )  
    {  
        CloseHandle( hModuleSnap );     // Must clean up the snapshot object!  
        return( FALSE );  
    }  
    do  
    {  
        if (stricmp(me32.szModule, m_szDllName) == 0) 
        { 
            bFound = TRUE; 
            break; 
        } 
    } while( Module32Next( hModuleSnap, &me32 ) );  
 
    //  Do not forget to clean up the snapshot object.  
    CloseHandle( hModuleSnap );  
 
    if (bFound) //如果已經加載了模塊,就不再加載 
    { 
        return FALSE; 
    } 
 
    //如果沒加載,打開進程,遠程注入 
     
    HANDLE hProcess = ::OpenProcess(PROCESS_CREATE_THREAD |PROCESS_VM_OPERATION |PROCESS_VM_WRITE, FALSE, dwProcessId); 
    if (hProcess == NULL) 
    { 
        return FALSE; 
    } 
    HMODULE  hKernerl32 = GetModuleHandle("kernel32.dll"); 
    LPTHREAD_START_ROUTINE pfnLoadLibraryA = (LPTHREAD_START_ROUTINE)::GetProcAddress(hKernerl32, "LoadLibraryA");  
 
    int cbSize = strlen(m_szDllName)+1; 
    LPVOID lpRemoteDllName = ::VirtualAllocEx(hProcess, 0, cbSize, MEM_COMMIT, PAGE_READWRITE); 
    ::WriteProcessMemory(hProcess, lpRemoteDllName, m_szDllName, cbSize, NULL); 
    HANDLE hRemoteThread = ::CreateRemoteThreadEx(hProcess, NULL, 0, pfnLoadLibraryA, lpRemoteDllName, 0, NULL, NULL); 
    if (NULL == hRemoteThread) 
    { 
        ::CloseHandle(hProcess); 
        return FALSE; 
    } 
    //等待目標線程運行結束,即LoadLibraryA函數返回 
    ::WaitForSingleObject(hRemoteThread, INFINITE); 
    ::CloseHandle(hRemoteThread); 
    ::CloseHandle(hProcess); 
    return TRUE; 

 
// 從指定的地址空間卸載DLL 
BOOL CRemThreadInject::EjectModuleFrom(DWORD dwProcessId) 

    // 
    if (::GetCurrentProcessId() == dwProcessId) 
    { 
        return FALSE;  
    } 
    BOOL bFound; 
    /************************************************************************/ 
    /* 遍歷模塊                                                              */ 
    /************************************************************************/ 
    HANDLE hModuleSnap = INVALID_HANDLE_VALUE;  
    MODULEENTRY32 me32;  
 
    //  Take a snapshot of all modules in the specified process.  
    hModuleSnap = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, dwProcessId );  
    if( hModuleSnap == INVALID_HANDLE_VALUE )  
    {  
        return( FALSE );  
    }  
    me32.dwSize = sizeof( MODULEENTRY32 );  
    if( !Module32First( hModuleSnap, &me32 ) )  
    {  
        CloseHandle( hModuleSnap );     // Must clean up the snapshot object!  
        return( FALSE );  
    }  
    do  
    {  
        if (stricmp(me32.szModule, m_szDllName) == 0) 
        { 
            bFound = TRUE; 
            break; 
        } 
    } while( Module32Next( hModuleSnap, &me32 ) );  
 
    //  Do not forget to clean up the snapshot object.  
    CloseHandle( hModuleSnap );  
 
    if (!bFound) //如果沒有加載模塊,就不能卸載 
    { 
        return FALSE; 
    } 
 
    //如果加載了,打開進程,遠程注入 
 
    HANDLE hProcess = ::OpenProcess(PROCESS_CREATE_THREAD |PROCESS_VM_OPERATION |PROCESS_VM_WRITE, FALSE, dwProcessId); 
    if (hProcess == NULL) 
    { 
        return FALSE; 
    } 
    HMODULE  hKernerl32 = GetModuleHandle("kernel32.dll"); 
    LPTHREAD_START_ROUTINE pfnFreeLibrary = (LPTHREAD_START_ROUTINE)::GetProcAddress(hKernerl32, "FreeLibrary");
 
    int cbSize = strlen(m_szDllName)+1; 
    LPVOID lpRemoteDllName = ::VirtualAllocEx(hProcess, 0, cbSize, MEM_COMMIT, PAGE_READWRITE); 
    ::WriteProcessMemory(hProcess, lpRemoteDllName, m_szDllName, cbSize, NULL); 
    HANDLE hRemoteThread = ::CreateRemoteThreadEx(hProcess, NULL, 0, pfnFreeLibrary, lpRemoteDllName, 0, NULL, NULL); 
    if (NULL == hRemoteThread) 
    { 
        ::CloseHandle(hProcess); 
        return FALSE; 
    } 
    //等待目標線程運行結束,即LoadLibraryA函數返回 
    ::WaitForSingleObject(hRemoteThread, INFINITE); 
    ::CloseHandle(hRemoteThread); 
    ::CloseHandle(hProcess); 
    return TRUE; 
}

希望本文所述對大家的C++程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人国产精品一区二区| 欧美特黄级在线| 精品中文字幕乱| 另类美女黄大片| 亚洲一区999| 久久av在线看| 91av视频在线| 高清亚洲成在人网站天堂| 91精品国产综合久久香蕉922| 国产精品久久久久久一区二区| 国产精品99久久久久久www| 欧美午夜片在线免费观看| 亚洲女人天堂视频| 国内免费久久久久久久久久久| 欧美孕妇与黑人孕交| 欧美日韩在线视频一区| 久久99青青精品免费观看| 伊是香蕉大人久久| 亚洲偷熟乱区亚洲香蕉av| 国产精品成人国产乱一区| 精品色蜜蜜精品视频在线观看| 久久久国产视频| 国产精品网站大全| 国产成人综合精品| 深夜福利一区二区| 国产色婷婷国产综合在线理论片a| 国产在线精品成人一区二区三区| 欧美亚洲激情在线| 欧美黑人性猛交| 国产日韩在线观看av| 91精品国产综合久久久久久久久| 久久国产精品免费视频| 精品免费在线视频| 97视频免费在线看| 国产精品v片在线观看不卡| 91精品国产高清自在线看超| 日韩电影免费在线观看| 中文字幕综合在线| 日韩免费观看高清| 在线看福利67194| 日韩成人激情在线| 欧美精品日韩www.p站| 中文字幕在线看视频国产欧美在线看完整| 亚洲欧洲美洲在线综合| 欧美中文字幕视频| 日韩高清免费在线| 久久久久国产一区二区三区| 成人淫片在线看| 日韩中文字幕在线| 欧美精品成人91久久久久久久| 韩国精品美女www爽爽爽视频| 精品视频一区在线视频| 欧美日韩福利视频| 亚洲日本中文字幕免费在线不卡| 色七七影院综合| 国产综合在线观看视频| 欧美大奶子在线| 久久人人爽人人爽爽久久| 国产精品久久久久免费a∨大胸| 亚洲国产精品99久久| 久久久久亚洲精品| 成人免费福利在线| 色综合天天综合网国产成人网| 国产精品视频久久久久| 91老司机精品视频| 国产精品入口日韩视频大尺度| 91色琪琪电影亚洲精品久久| 亚洲最大在线视频| 91社区国产高清| 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美日韩在线观看视频| 亚洲欧洲国产一区| 久久久国产精品免费| 日韩精品中文字幕久久臀| 欧美激情视频三区| 欧美床上激情在线观看| 青青a在线精品免费观看| 国产精欧美一区二区三区| 国产精品高清网站| 美女久久久久久久久久久| 亚洲电影免费在线观看| 国产精品观看在线亚洲人成网| 欧美激情一级二级| 欧美视频精品一区| 久久久久久噜噜噜久久久精品| 日韩中文字幕久久| 欧美精品电影在线| 4438全国亚洲精品在线观看视频| 亚洲男人天堂网站| 久久久精品一区| 欧亚精品在线观看| 最好看的2019年中文视频| 欧美日韩免费观看中文| 亚洲视频日韩精品| 91夜夜未满十八勿入爽爽影院| 91精品视频免费| 精品国产成人av| 操人视频在线观看欧美| 国产一区玩具在线观看| 91欧美日韩一区| 在线观看成人黄色| 一本色道久久综合狠狠躁篇怎么玩| 亚洲石原莉奈一区二区在线观看| 88xx成人精品| 国产精品福利网| 国产日韩av在线播放| 97热在线精品视频在线观看| 久久久精品国产一区二区| 91免费观看网站| 日韩在线高清视频| 一区二区三区四区视频| 欧美性生交xxxxxdddd| 亚洲va国产va天堂va久久| 久久久影视精品| 中文字幕精品在线视频| 亚洲深夜福利在线| 2019中文字幕在线免费观看| 成人免费看片视频| 欧美成人高清视频| 亚洲无限av看| 久久亚洲春色中文字幕| 亚洲精品福利在线观看| 亚洲午夜久久久影院| 国产热re99久久6国产精品| 国产精品你懂得| 456国产精品| 亚洲欧洲日产国产网站| 一本一本久久a久久精品牛牛影视| 国产亚洲一区二区精品| 亚洲天堂一区二区三区| 日av在线播放中文不卡| 亚洲性夜色噜噜噜7777| 亚洲精品第一页| zzijzzij亚洲日本成熟少妇| 日韩在线免费观看视频| 欧洲亚洲在线视频| 秋霞成人午夜鲁丝一区二区三区| 欧美自拍视频在线| 91伊人影院在线播放| 久久久电影免费观看完整版| 亚洲最大福利视频网| 午夜精品蜜臀一区二区三区免费| 欧美大秀在线观看| 国产精品美女呻吟| 欧美黑人巨大精品一区二区| 色狠狠久久aa北条麻妃| 日韩av在线免播放器| 欧美日韩国产麻豆| 欧美黄色三级网站| 久久久精品在线| 亚洲丝袜av一区| 亚洲国产成人精品电影| 国产99久久久欧美黑人| 日韩亚洲第一页| 国产成人一区二区三区| 在线看片第一页欧美| 伊人久久久久久久久久久久久| 精品久久久久人成| 黄色一区二区三区| 在线看欧美日韩| 国产成人欧美在线观看| 亚洲缚视频在线观看| 欧美日韩国产91| 亚洲精品二三区|