VC DLL远程进程注入

转载 2013年12月02日 11:02:59


刚刚调好的DLL远程进程注入代码 备份一下

void CInjectProcessDlg::OnBtnInject() 
{
// TODO: Add your control notification handler code here
HWND   hWnd;    //保存查找的窗口句柄
DWORD dwProcessID;   //保存进程ID
HANDLE hProcess;   //保存打开的进程句柄
char   sDllPath[MAX_PATH] = "E:\\VCWork\\进程注入\\MfcDll\\Release\\MfcDll.dll";   //注入的DLL
LPVOID pRemoteDllPath; //开辟的远程内存的地址
DWORD dwLen;
HANDLE hThread;
DWORD dwThreadRet;

//判断要注入的进程的窗口是否存在 如果存在则根据窗口句柄获取进程ID
hWnd = ::FindWindow(NULL, "进程注入测试窗口");
if (!hWnd)
{
   AfxMessageBox("没有找到要注入的进程的窗口!");
   return;
}
::GetWindowThreadProcessId(hWnd, &dwProcessID);

//打开进程
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessID);
if (!hProcess)
{
   dwProcessID = GetLastError();
   AfxMessageBox("打开进程失败");
   return;
}

//在打开的进程中开辟一块内存区域
pRemoteDllPath = VirtualAllocEx(hProcess, NULL, sizeof(sDllPath), MEM_COMMIT, PAGE_READWRITE);

//将要注入的DLL的完整路径字符串写入到刚开辟的内存中(因为要在对方进程中读取这个字符串 所以必须把字符串写入到对方进程的地址空间)
WriteProcessMemory(hProcess, pRemoteDllPath, sDllPath, sizeof(sDllPath), &dwLen);

//创建远程线程
//第三个参数说明一下 GetModuleHandle取得Kernel32模块句柄 GetProcAddress取得Kenrnel32下的LoadLibraryA函数的地址 这两个函数是本地函数
//获取的是本地载入的模块及函数的地址 而这个地址是用在远程 是因为Kernel32的模块句柄和函数地址整个系统通用 除Kernel32和User32外 其它模块不能这样做
hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle("Kernel32"), "LoadLibraryA"), pRemoteDllPath, 0, NULL);
WaitForSingleObject(hThread, INFINITE);

//获取线程的返回值 因为线程函数是LoadLibraryA 所以这儿的值就是LoadLibraryA的返回值 保存以备FreeLibrary使用
GetExitCodeThread(hThread, &dwThreadRet);
CloseHandle(hThread);

//释放先前在远程进程中开辟的内存
VirtualFreeEx(hProcess, pRemoteDllPath, sizeof(sDllPath), MEM_RELEASE);

//再创建个远程线程 本次远程线程的线程函数是FreeLibrary 以释放对自定义Dll的引用
hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle("Kernel32"), "FreeLibrary"), (void*)dwThreadRet, 0, NULL);
CloseHandle(hThread);

//关闭打开的进程句柄 至此结束
CloseHandle(hProcess);
AfxMessageBox("EXE中注入线程执行结束!");
}

代码一到百度空间上排版就乱套了。

注意一点,在MFC的DLL中要载入对话框资源以显示对话框的话要把类似这样的代码

CXXXDlg dlg;
dlg.DoModal();

放到App类的InitInstance成员函数中,而不要放到构造函数中。放到构造函数中不会显示对话框,可能是构造函数还没有载入一些必要的东西的缘故吧。


转自:http://hi.baidu.com/suruiqiang/item/7bcb0e2909b5aaccddf69a1b

相关文章推荐

vc++实现反射式数据库模版(4.实现数据库模版)

前三节参照MFC实现了数据模型的序列化工作。这一节就利用ADO完成数据库模版,这里实现增加和查询功能,有兴趣可以自己参照完成删除和更新。 由于查询结果可能是一个集合,这里我们把数据模型设计成链表,...

变长度形参---可变参数宏(variadicmacros)传递可变参数表

在 GNU C 中,宏可以接受可变数目的参数,就象函数一样,例如: #define pr_debug(fmt,arg...) \ printk(KERN_DEBUG fmt,##arg) ...
  • klarclm
  • klarclm
  • 2012年03月14日 10:45
  • 691

远程DLL注入进程

  • 2012年12月19日 21:20
  • 815KB
  • 下载

DLL的远程注入技术 - [Vc++]

DLL的远程注入技术是目前Win32病毒广泛使用的一种技术。使用这种技术的病毒体通常位于一个DLL中,在系统启动的时候,一个EXE程序会将这个DLL加载至某些系统进程(如Explorer.exe)中运...

DLL注入远程进程

  • 2006年02月23日 09:05
  • 2.1MB
  • 下载

远程注入代码,一些过时的ring3技术(ASM、VC++、Delphi) (非Dll注入)

ASM:                                                                                              in...
  • god00
  • god00
  • 2011年04月05日 09:49
  • 760

远程进程的Dll注入[黑防]

#include "stdafx.h" #include #include #include /* 一、OpenProcessToken函数 打开进程令牌环 二、LookupPri...

远程注入DLL实现进程隐藏以及键盘记录器

HOOK 键盘记录 DLL注入 进程隐藏

VC 远程线程注入 不使用DLL 源码

  • 2011年07月30日 18:26
  • 2.24MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VC DLL远程进程注入
举报原因:
原因补充:

(最多只允许输入30个字)