为什么代码注入多次,目标程序的内存会越来越大
测试代码:目标程序A
#include<iostream>
#include<Windows.h>
using namespace std;
void dg(){
}
int main(int i){
cout<<"函数地址:"<<(void *)dg<<endl;
cout<<"进程ID:"<<GetCurrentProcessId();
cin>>i;
return 0;
}
注入的程序B
#include <iostream>
#include<stdio.h>
#include<windows.h>
using namespace std;
//**************************************************************************************
//函数名:InfusionFunc
//功能:封装远程注入的函数
//参数 1:进程ID
//参数 2:被注入函数指针<函数名>
//参数 3:参数
//参数 4:参数长度
//**************************************************************************************
void InfusionFunc(DWORD dwProcId,LPVOID mFunc, LPVOID Param, DWORD ParamSize)
{
HANDLE hProcess;//远程句柄
LPVOID mFuncAddr;//申请函数内存地址
LPVOID ParamAddr;//申请参数内存地址
HANDLE hThread; //线程句柄
DWORD NumberOfByte; // 返回值
//打开被注入的进程句柄
//PROCESS_ALL_ACCESS
hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcId);
//申请内存
mFuncAddr = VirtualAllocEx(hProcess,NULL,128,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
ParamAddr = VirtualAllocEx(hProcess,NULL,ParamSize,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
//写内存
WriteProcessMemory(hProcess,mFuncAddr,mFunc,128, &NumberOfByte);
WriteProcessMemory(hProcess,ParamAddr,Param,ParamSize, &NumberOfByte);
//创建远程线程
hThread = CreateRemoteThread(hProcess,NULL,0,(LPTHREAD_START_ROUTINE)mFuncAddr,
ParamAddr,0,&NumberOfByte);
WaitForSingleObject(hThread, INFINITE); //等待线程结束
//释放申请有内存
VirtualFreeEx(hProcess,mFuncAddr,128,MEM_RELEASE);
VirtualFreeEx(hProcess,ParamAddr,ParamSize,MEM_RELEASE);
//释放远程句柄
CloseHandle(hThread);
CloseHandle(hProcess);
}
void dg(){
_asm{
pushad
mov eax,0401270h
call eax
popad
}
}
int main()
{
int pid;
cout<<"输入目标进程ID";
cin>>pid;
for(int i=0;i<100000;i++){
InfusionFunc(pid,dg,NULL,NULL);
}
return 1;
}
B注入调dg函数100000次后,B内存占了100多M
因为你释放代码写错了
如果 dwFreeType 为 MEM_RELEASE,则 dwSize 必须为0 . 按 VirtualAllocEx审请时的大小全部释放。 有没有调试过啊,看下释放内存有没返回成功 谢谢楼主分享,支持 海论坛 虽然不需要可还是谢谢楼主辛苦了
页:
[1]