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

奇技淫巧之调试被远程线程注入的DLL

远程线程注入, 这东西大家都懂的, 一般都被大家用来干些小小的坏事情,比如API Hook~~将DLL注入到其它进程并不是难事,问题是这个被注入的DLL不太好调试,调试DLL本来就是个比较头疼的问题,...
  • sonsie007
  • sonsie007
  • 2014年05月14日 16:07
  • 4345

Dll注入技术之远程线程注入

DLL注入技术之远线程注入     DLL注入技术指的是将一个DLL文件强行加载到EXE文件中,并成为EXE文件中的一部分,这样做的目的在于方便我们通过这个DLL读写EXE文件内存数据,(例如 ...
  • swanabin
  • swanabin
  • 2014年03月18日 18:02
  • 1225

MFC hook注入dll,远程线程注入dll

[cpp] view plain copy  print? #include "stdafx.h"   #include    //很多人在vs2010找不到dllmain的文件,都倍封装...
  • u011672712
  • u011672712
  • 2016年06月04日 20:19
  • 706

创建远程线程实现DLL注入

最近在学逆向,学到了DLL注入。DLL注入有三种方式:创建远程线程(该方法不适用于win7及以上的OS),使用注册表(APPInit_DLLs,该方法不适用于xp及以上的OS)。消息勾取(SetWin...
  • woqq773743943
  • woqq773743943
  • 2016年04月12日 21:56
  • 783

使用远程线程来注入DLL

windows内的各个进程有各自的地址空间。它们相互独立互不干扰保证了系统的安全性。但是windows也为调试器或是其他工具设计了一些函数,这些函数可以让一个进程对另一个进程进行操作。虽然他们是为调试...
  • a904003695
  • a904003695
  • 2016年07月03日 12:24
  • 1160

python 远程线程注入代码

用python来实现远程线程注入,
  • chence19871
  • chence19871
  • 2014年06月20日 17:30
  • 2970

远程DLL注入、卸载

Dll注入//dwPid 为目标进程PID //szDllName 为要注入的DLL文件 void CDllManageDlg::InjectDll(DWORD dwPid, CString szDl...
  • u012319493
  • u012319493
  • 2016年01月04日 16:15
  • 492

让自己的dll注入到其他进程中运行

下面是一个简单的mydll.dll注入到QQ中运行的wg
  • anda0109
  • anda0109
  • 2014年11月20日 12:44
  • 8513

远程线程注入的原理和实现方法

转载:http://blog.csdn.net/whatday/article/details/8975930 一、远程线程注入基本原理 远程线程注入——相信对Windows底层编程和系统安全熟悉...
  • heluan123132
  • heluan123132
  • 2015年06月08日 14:36
  • 5524

win7 64bit下远程线程注入技术(进程劫持入门技术)

http://blog.csdn.net/arvon2012/article/details/7766439本文是配合上文学习和使用的。上文中,最后,我们生成了可以hook api的dll,那么怎么把...
  • MaxWoods
  • MaxWoods
  • 2015年04月22日 14:13
  • 2408
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VC DLL远程进程注入
举报原因:
原因补充:

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