C++封装远程注入类封装远程注入类CreateRemoteThreadEx实例实例
本文实例讲述了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;