- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
注入程序代码
注入函数核心代码
#include tlhelp32.h
#include atlconv.h
//
//插入进程
BOOL RemoteLoadLibrary(HANDLE hProcess, LPCSTR lplibFileName)
{//入口参数 hProcess 进程ID lplibFileName要注入的DLL路径
//返回值 如果是TRUE注入成功 否则失败
PCHAR lpRemoteLibFileName =(PCHAR) VirtualAllocEx(hProcess,NULL,lstrlenA(lplibFileName)+1,MEM_COMMIT,PAGE_READWRITE);
//VirtualAllocEx 在指定进程空间分配虚拟空间
//hProcess 申请内存所在的进程句柄
// NULL保留页面的内存地址,设置为NULL自动分配
//lstrlenA(lplibFileName)+1 计算欲分配的内存大小
// MEM_COMMIT 为特定的页面区域分配内存中或磁盘的页面文件中的物理存储
// PAGE_READWRITE 可读写该内存区域
if (lplibFileName==NULL)
{
return FALSE;
}
//写入
WriteProcessMemory(hProcess,lpRemoteLibFileName,(void *)lplibFileName,lstrlenA(lplibFileName)+1,NULL);
// 使目标进程调用LoadLibrary,加载DLL
PTHREAD_START_ROUTINE pfnStartAddr = (PTHREAD_START_ROUTINE)GetProcAddress(
GetModuleHandle(_T(Kernel32.dll)), LoadLibraryA);
HANDLE hRemoteThread = CreateRemoteThread(hProcess,NULL,0,pfnStartAddr,lpRemoteLibFileName,0,NULL);
if (hRemoteThread==NULL)
{
return FALSE;
}
//等待LoadLibrary加载完毕
WaitForSingleObject(hRemoteThread,INFINITE);
// 获得GetModuleHandle的返回值
DWORD ExitCode;
GetExitCodeThread(hRemoteThread,ExitCode);
CloseHandle(hRemoteThread);
// 释放目标进程中申请的空间
VirtualFreeEx(hProcess,lpRemoteLibFileName,0,MEM_RELEASE);
return ExitCode;
}
void CDLLIjectDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
//获取操作系统信息
SYSTEM_INFO sysInfo;
GetNativeSystemInfo(sysInfo);
//在添加进程前清空列表
mProcListBox.ResetContent();
//进程ID
DWORD dwpid = 0;
//进程信息结构
PROCESSENTRY32 pe32 = {0};
//初始化进程结构大小
pe32.dwSize = sizeof(pe32);
//获取系统中正在运行的进程信息,线程信息
HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if (hProcessSnap == INVALID_HANDLE_VALUE);
//INVALID_HANDLE_VALUE表示一个无效的值也就是-1
//return ;
//遍历进程快照
Process32First(hProcessSnap,pe32);
do
{
//打开进程
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION,FALSE,pe32.th32ProcessID);
BOOL isWow64;
if (IsWow64Process(hProcess,isWow64))
{
TCHAR szBuf[1024] = {0};
if (isWow64||sysInf
文档评论(0)