Inyeccion en otro proceso

Iniciado por Kizar, 25 Abril 2006, 21:47 PM

0 Miembros y 1 Visitante están viendo este tema.

Eternal Idol

Cita de: Pseudoroot en 26 Abril 2006, 23:07 PM
si lo se. por eso la estructura se pone dentro de la funcion. porque obvio que una funcion cualquiera nunca inyectada dentro de otro proceso nunca va a apuntar a la direccion correcta

La estructura se le pasa como parametro a la funcion ...  en fin que estamos en el foro de VB y el codigo tendra que ser la representacion en hexadecimal de codigo en assembly.

Habria que hacer algo asi como esto para que funcionara desde C:

#include <windows.h>

typedef BOOL (__stdcall DeleteFileA_Ptr)(char *);

typedef struct _DelData
{
  DeleteFileA_Ptr *DeleteFile;
  char *file;
}DelData, *PDelData;

void funcion(PDelData Data);

void main(int argc, char **argv)
{
  int procid = atol(argv[1]);
  HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, 0, procid);
  if (hProc)
  {
    LPVOID Code = VirtualAllocEx(hProc, 0, 0x1000, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    LPVOID Data = VirtualAllocEx(hProc, 0, 0x1000, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    DWORD tid = 0;
    DelData Params;
    Params.DeleteFile = (DeleteFileA_Ptr*)GetProcAddress(GetModuleHandle("Kernel32.dll"), "DeleteFileA");
    Params.file = (char*)((BYTE*)Data) + sizeof(DelData);
    DWORD written = 0;
    char *File = "C:\\BASURA.TXT";
    WriteProcessMemory(hProc, Code, &funcion, 32 /*a ojo*/, &written);
    WriteProcessMemory(hProc, Data, &Params, sizeof(DelData), &written);
    WriteProcessMemory(hProc, ((BYTE*)Data + sizeof(DelData)), File, strlen(File), &written);
    CreateRemoteThread(hProc, 0, 0, (LPTHREAD_START_ROUTINE)Code, Data, 0, &tid);
  }
}

void funcion(PDelData Data)
{
  Data->DeleteFile(Data->file);
}
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Kizar

Y si en vez de inyectar un cacho de code quiero inyectar un proceso entero??
Supongo que tendre que ejecutar el exe y copiar todo su contenido en memoria en el remote thread pero no estoy seguro...
Seria asi?

Eternal Idol

Cita de: KiZaR en 27 Abril 2006, 15:13 PM
Y si en vez de inyectar un cacho de code quiero inyectar un proceso entero??
Supongo que tendre que ejecutar el exe y copiar todo su contenido en memoria en el remote thread pero no estoy seguro...
Seria asi?

No se puede inyectar un proceso como tal. Un proceso es un contenedor de una serie de recursos (espacio de memoria virtual, codigo del ejecutable, lista de handles, pid, hilos, etc).

Lo que se puede inyectar es el codigo de un programa pero no tiene gran sentido cuando uno tiene la posibilidad de inyectar una DLL con un minimo esfuerzo. Creando un hilo remoto que llame a la funcion LoadLibrayA/W y pasandole como parametro el nombre de la libreria (VirtualAlloc + WriteProcessMemory para escribirlo en el proceso que queramos) conseguimos cargar la DLL que queramos y en la misma se implementa la funcionalidad requerida.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Kizar

CitarNo se puede inyectar un proceso como tal. Un proceso es un contenedor de una serie de recursos (espacio de memoria virtual, codigo del ejecutable, lista de handles, pid, hilos, etc).
Ya sabia, pero entonces los programas k se inyectan en otro proceso inyectan el exe entero en otro proceso, eso es lo k quiero saber hacer...

Eternal Idol

Cita de: KiZaR en 27 Abril 2006, 15:24 PMYa sabia, pero entonces los programas k se inyectan en otro proceso inyectan el exe entero en otro proceso, eso es lo k quiero saber hacer...

Yo no conozco ningun software que haga eso, puede que los haya pero no tiene sentido, una DLL es practicamente lo mismo que un EXE (los dos son PE aunque con diferencias).
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Kizar

Aqui tienes un ejemplo, este packer cifra el ejecutable y permite inyectarle en un proceso.
http://www.hackerscenter.com/public/Downloads/986_NTPacker.zip

Salu2

Eternal Idol

Esta bien pero no me voy a molestar en investigar demasiado al respecto, me parece mas bien inutil, lo logico es inyectar una DLL.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón