• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C++封装远程注入类CreateRemoteThreadEx实例

C++封装远程注入类CreateRemoteThreadEx实例

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了createremotethreadex,c++类模板实例化,c++多线程编程实例,c++程序实例,c++项目开发实例等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文实例讲述了C++封装远程注入类CreateRemoteThreadEx的方法,分享给大家供大家参考。具体方法如下:

首先,类初始化时传入要注入的DLL文件名

只使用两个函数
BOOL InjectModuleInto(DWORD dwProcessId);
// 从指定的地址空间卸载DLL
BOOL EjectModuleFrom(DWORD dwProcessId);</div>

.h头文件如下:

#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); 
};</div>

.cpp源文件如下:

#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 == NUL

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C++封装远程注入类CreateRemoteThreadEx实例

相关文章

  • 2017-05-28复数乘法中的结构体赋值实现代码
  • 2017-05-28QString和char以及string之间的赋值详解
  • 2017-05-28C++实现strcmp字符串比较的深入探讨
  • 2017-05-28C++自定义函数判断某年某月某日是这一年中第几天
  • 2017-05-28c语言获取文件大小的示例
  • 2017-05-28C++ boost::asio编程-域名解析详细介绍
  • 2017-05-28纯C语言:递归最大数源码分享
  • 2017-05-28string与char*转换的使用详解
  • 2017-12-08最长公共子序列
  • 2017-05-28C++ explicit关键字的应用方法详细讲解

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C++中对象的赋值与复制操作详细解析
    • C++设计模式之访问者模式
    • stl常用算法(Algorithms)介绍(stl排序算法、非变序型队列)
    • C语言中send()函数和sendto()函数的使用方法
    • 为什么要学习C语言 C语言优势分析
    • 一波C语言二元查找树算法题目解答实例汇总
    • C++ operator关键字(重载操作符)的用法详解
    • 数据结构 C语言实现循环单链表的实例
    • C语言数组指针的小例子
    • C语言实现顺序表基本操作汇总

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有