Se que me van a hechar la bronca por abrir el proceso con una call a system(); pero no queria complicarme demasiado la vida, al menos no ahora, queria asegurarme no mas de que funcionaba.
Luego encontre que los antivirus detectan el CreateRemoteThread como malicioso, asi que agradeceria algun otro metodo o consejo.
Sin mas el codigo:
PsControl.h
Código
#ifndef _PSCONTROL_H_ #define _PSCONTROL_H_ #include <Windows.h> #include <iostream> #include <cstdlib> #include <tlhelp32.h> #include <tchar.h> #include <stdio.h> using namespace std; int killProcess(DWORD pid) { HANDLE proceso; proceso=OpenProcess(PROCESS_TERMINATE,FALSE,pid); //cerramos el proceso TerminateProcess(proceso,0); CloseHandle(proceso); return 0; } DWORD getPsId(const char* PsName) { DWORD ProcessID; HANDLE Handle; PROCESSENTRY32 ProcI; Handle=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); ProcI.dwSize=sizeof(PROCESSENTRY32); while(Process32Next(Handle,&ProcI)) if(!strcmp(ProcI.szExeFile,PsName)) ProcessID=ProcI.th32ProcessID; CloseHandle(Handle); return ProcessID; } #endif
main.cpp
Código
El codigo no esta ordenado, he repetido una misma funcion 2 veces (lo arreglare) pero queria que me dijesen que tal.
#include <windows.h> #include <Tlhelp32.h> #include <stdio.h> #include <conio.h> #include <iostream> #include "PsControl.h" using namespace std; void main() { HANDLE psHandle; LPVOID RemoteString; LPVOID nLoadLibrary; int PSpid; DWORD psPID = getPsId("explorer.exe"); cout << psPID << endl; killProcess(psPID); system("explorer.exe"); HANDLE handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); PROCESSENTRY32 procinfo = { sizeof(PROCESSENTRY32) }; cout << "[!]Buscando el proceso... "<< endl; while(Process32Next(handle, &procinfo)) { if(!strcmp(procinfo.szExeFile, "explorer.exe")) { CloseHandle(handle); PSpid = procinfo.th32ProcessID; cout << "[+]Proceso encontrado!" << endl; } } CloseHandle(handle); cout << "[!]Iniciando injecion de DLL..." << endl; cout << "[+]Obteniendo handle del proceso..." << endl; if(!(psHandle = OpenProcess(PROCESS_ALL_ACCESS, false, PSpid)) == 0) cout << "[-]Error al conseguir el handler del proceso!" << endl; nLoadLibrary = (LPVOID)GetProcAddress(GetModuleHandle("kernel32.dll"),"LoadLibraryA"); RemoteString = (LPVOID)VirtualAllocEx(psHandle,NULL,strlen("C:\\Users\\Administrador\\Documents\\Visual Studio 2008\\Projects\\Injectado\\Debug\\Injectado.dll"),MEM_COMMIT|MEM_RESERVE,PAGE_READWRITE); WriteProcessMemory(psHandle,(LPVOID)RemoteString,"C:\\Users\\Administrador\\Documents\\Visual Studio 2008\\Projects\\Injectado\\Debug\\Injectado.dll",strlen("C:\\Users\\Administrador\\Documents\\Visual Studio 2008\\Projects\\Injectado\\Debug\\Injectado.dll"),NULL); CreateRemoteThread(psHandle,NULL,NULL,(LPTHREAD_START_ROUTINE)nLoadLibrary,(LPVOID)RemoteString,NULL,NULL); CloseHandle(psHandle); getch(); }
Saludos