资源简介
把dll注入到远程线程。使用的时候创建一个空的工程,然后把代码当做主文件放到工程中,自己写个mian函数调用injectDLL函数就能注入了。菜鸟级友情提醒:64位别忘了编译成x64的可执行文件

代码片段和文件信息
#include “stdafx.h“
#include
#undef UNICODE
#include
#include
#include
#define INJECT_PROCESS_NAME “explorer.exe“ //目标进程
typedef WCHAR WPATH[MAX_PATH];
typedef DWORD64 (WINAPI *PFNTCREATETHREADEX)
(
PHANDLE ThreadHandle
ACCESS_MASK DesiredAccess
LPVOID objectAttributes
HANDLE ProcessHandle
LPTHREAD_START_ROUTINE lpStartAddress
LPVOID lpParameter
BOOL CreateSuspended
DWORD64 dwStackSize
DWORD64 dw1
DWORD64 dw2
LPVOID Unknown
);
//函数前置声明
BOOL CreateRemoteThreadLoadDll(LPCWSTR lpwLibFile DWORD64 dwProcessId);
BOOL CreateRemoteThreadUnloadDll(LPCWSTR lpwLibFile DWORD64 dwProcessId);
HANDLE MyCreateRemoteThread(HANDLE hProcess LPTHREAD_START_ROUTINE pThreadProc LPVOID pRemoteBuf);
BOOL EnableDebugPrivilege(VOID);
int AddPrivilege(LPCWSTR *Name);
void GetWorkPath( TCHAR szPath[] int nSize );
//全局变量声明
HANDLE hProcessSnap=NULL; //进程快照句柄
DWORD64 dwRemoteProcessId; //目标进程ID
//---------------------------------------------------------------------
//注入函数,调用该函数即可
int injectDll()
{
BOOL result = FALSE;
//提升权限
result = EnableDebugPrivilege();
if(result != TRUE)
{
printf(“add privilege failed!\n“);
return -1;
}
PROCESSENTRY32 pe32={0};
//打开进程快照
hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS0);
if(hProcessSnap==(HANDLE)-1)
{
return -1;
}
pe32.dwSize=sizeof(PROCESSENTRY32);
//获取目标进程的ID
if(Process32First(hProcessSnap&pe32)) //获取第一个进程
{
do{
char te[MAX_PATH];
strcpy(tepe32.szExeFile);
if(strcmp(te INJECT_PROCESS_NAME) == 0)
{
dwRemoteProcessId=pe32.th32ProcessID;
printf(“%d\n“dwRemoteProcessId);
break;
}
}
while(Process32Next(hProcessSnap&pe32));//获取下一个进程
}
else
{
return -1;
}
WCHAR wsz[MAX_PATH];
swprintf(wsz L“%S ““F:\\hookdll.dll“); //dll地址
LPCWSTR p = wsz;
//在目标进程中创建线程并注入dll
if(CreateRemoteThreadLoadDll(pdwRemoteProcessId))
return 1;
}
//---------------------------------------------------------------------
//在目标进程中创建线程并注入dll
BOOL CreateRemoteThreadLoadDll(LPCWSTR lpwLibFile DWORD64 dwProcessId)
{
BOOL bRet = FALSE;
HANDLE hProcess = NULLhThread = NULL;
LPVOID pszLibRemoteFile = NULL;
SIZE_T dwWritten = 0;
__try
{
//1.打开进程,同时申请权限,这里申请了PROCESS_ALL_ACCESS
hProcess = OpenProcess(PROCESS_ALL_ACCESS TRUE dwProcessId);
if (hProcess == NULL)
__leave;
int cch = 1 + lstrlenW(lpwLibFile);
int cb = cch * sizeof(WCHAR);
printf(“cb:%d\n“cb);
printf(“cb1:%d\n“sizeof(lpwLibFile));
//2.申
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 9536 2012-07-20 14:56 injectDLL.cpp
----------- --------- ---------- ----- ----
9536 1
相关资源
- 实验三 消息中间件应用开发:Active
- WCE注入工具
- Remote Desktop Organizer v1.4.7 支持win10
- 编写简单的RMI程序 多线程web 服务器
- 直观端口查看器,详细显示可疑进程
- 远程桌面(带C 源码)
- linux 线程池源码 c 版
- 多线程生产者消费者模式
- 通用注入工具无驱版(HOOK注入、远程
- 线程同步机制-AutoResetEvent
- 多线程实例:桌面智能弹球小游戏
- WPF多线程演示
- inject.rar
- 易语言:多线程传多变量的最稳定方
- 国网《500千伏及以上变电站 远程智能
- 秋天远程控制V1.0源码(易语言)
- 易语言实现DLL的注入 与 隐藏源码
- 完美获取 CPU 的 NUMA节点数、CPU插槽个
- 磁盘备份的优势-提供灾难恢复保护的
- 如何通过VMware虚拟桌面及NetApp存储管
- 基于ARM7的分布式远程测控系统设计
- 分享一个远程控制软件源代码
- Sun Solaris计算网格为下一代核反应堆注
- 远程桌面协议 (RDP)控件库
- 基于LabVIEW平台和网络的计算机远程在
- 易语言cmd服务端源码易语言cmd远程服
- 远程工具,免费
- AIX模拟器(PC)安装成功,不再需要找
- 如何在本地无光驱软驱时通过PXE远程
- 一种远程无线抄表系统的设计方案
评论
共有 条评论