Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Función principal que busca el proceso notepad.exe e inyecta nuestra función junto con los
- * datos de la estructura creando un hilo.
- */
- #include <windows.h>
- #include <Shlwapi.h>
- #include <tlhelp32.h>
- #include "funcionInyectar.h"
- //Nombre del proceso a buscar e inyectar.
- #define PROCESO_INYECTAR "notepad.exe"
- //Tamaño de nuestra función+datos, es una estimación aproximada.
- #define TAM_THREAD 2048
- int main(){
- DWORD pID = 0;
- HANDLE hProcess, hSnap;
- void *pRemoteThread;
- _paramInyectar paramInyectar, *PparamInyectar;
- //Inicializamos datos de la estructara a injectar
- preparaInyeccion(¶mInyectar);
- //Es una estructura que almacena datos referentes a un proceso
- PROCESSENTRY32 pe32 = {0};
- //Obtenemos una instantánea de todos los procesos del sistema
- if((hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)) == INVALID_HANDLE_VALUE) return -1;
- pe32.dwSize = sizeof(PROCESSENTRY32);
- //Obtenemos información sobre el primer proceso
- Process32First(hSnap, &pe32);
- //Vamos recorrmiendo todos los procesos hasta dar con el nuestro "notepad.exe"
- do{
- //Comparamos si el nombre del proceso actual es igual al buscado, no tiene en cuenta mayúsculas ni minúsculas
- if(StrCmpNI(PROCESO_INYECTAR, pe32.szExeFile, strlen(PROCESO_INYECTAR)) == 0){
- //Obtenemos el identificador de proeceso (pid) del proceso notepad.exe
- pID = pe32.th32ProcessID;
- //Forzamos salida, nada más que hacer
- break;
- }
- //Pasamos al siguiente proceso mientras sigan existiendo.
- }while(Process32Next(hSnap, &pe32));
- //Cerramos manejador de la instantánea si es correcto
- if(hSnap != INVALID_HANDLE_VALUE)
- CloseHandle(hSnap);
- //Abrimos el proceso "notepad.exe" con acceso total
- hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pID);
- //Reservamos memoria(TAM_THREAD) en el espacio del proceso abierto para leer, escribir y ejecutar nuestra función inyectada.
- pRemoteThread = VirtualAllocEx(hProcess, 0, TAM_THREAD, MEM_COMMIT | MEM_RESERVE,PAGE_EXECUTE_READWRITE);
- //Escribimos la función a inyectar en el espacio recién reservado con el tamaño(TAM_THREAD) especificado.
- WriteProcessMemory(hProcess, pRemoteThread, funcionInyectada, TAM_THREAD, 0);
- //Reservamos memoria(tamaño de la estructura) en el espacio del proceso abierto para leer y escribir los datos de la estructura a inyectar.
- PparamInyectar = (_paramInyectar*)VirtualAllocEx(hProcess , 0, sizeof(_paramInyectar), MEM_COMMIT, PAGE_READWRITE);
- //Escribimos los datos de la estructura a inyectar en el espacio recién reservado con el tamaño de la estructura
- WriteProcessMemory(hProcess, PparamInyectar, ¶mInyectar, sizeof paramInyectar, 0);
- //Creamos hilo para nuestra función en el proceso padre notepad.exe pasándole como parámetros al hilo nuestra estructura con los datos
- CreateRemoteThread(hProcess , 0, 0, (DWORD (__stdcall *)(void *))pRemoteThread, PparamInyectar, 0, NULL);
- //Cerramos manejador del proceso "notepad.exe"
- CloseHandle(hProcess);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement