资源简介
把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
相关资源
- windows下可用的pthread库
- APM源码笔记
- wol远程唤醒
- stm32f10X实现SWD模式四线程序教程
- 基于UDP的计算机远程屏幕广播技术及
- ScanPort 多线程源代码
- QthreadPools.rar
- termsrv.dll实现win10多用户远程补丁
- STM32如何通过USB转串口线程序
- pthread多线程计算pi
- BCB多线程BCB多线程
- 采用线程方式拷贝文件夹Delphi使用自
- 基于单片机的家用电器电话远程控制
- 线程并发拷贝程序和实验报告
- Linux课程设计多线程聊天,有图形界面
- 啊D注入工具 V2.32 暗组破解版
- VNC Open Source Code for Windows (4.1.3)
- linux多线程实现矩阵乘法
- 远程关机 bat 文件
- Zero远程控_03
- 多线程sock5代理
- 以太网CSMD/CD协议仿真
- 基于Qt的多线程工具
- WinRemoteDesktop 简易远程桌面管理工具
- 睡觉的理发师问题Linux下运行
- DLL注入HOOK进程按钮点击delphi
- IAP远程升级解决
- 操作系统实验(三)线程的互斥
- QTcpServer实现多客户端连接
- 多线程下无同步和同步的简单对比
评论
共有 条评论