Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Kizar en 25 Abril 2006, 21:47 pm



Título: Inyeccion en otro proceso
Publicado por: Kizar en 25 Abril 2006, 21:47 pm
Alguien tiene un code en vb que permita inyectarse en otro proceso, es que hace tiempo hice un code peor no llego a funcionar correctamente porque creaba el thread en el otro proceso, pero al final daba fallo de memoria.

Alguien puede postear un code en vb de inyeccion en otro proceso?

Salu2


Título: Re: Inyeccion en otro proceso
Publicado por: Hendrix en 26 Abril 2006, 17:08 pm
Hay un kode en este foro que konsta de dos partes...los posts son de Zealot....creo que es algo asi:

No aparecer en la taskmngr sin Hooks.

Creo que se inyectaba en un proceso...no estoy seguro.... :-\ :-\ :-\

Salu2



Título: Re: Inyeccion en otro proceso
Publicado por: Kizar en 26 Abril 2006, 20:06 pm
No, eso no es, lo unico que hay en el foro en vb sobre inyecion es esto y me da fallos....
http://foro.elhacker.net/index.php/topic,86227.0.html

Salu2


Título: Re: Inyeccion en otro proceso
Publicado por: Hendrix en 26 Abril 2006, 20:53 pm
sips, me akuerdo de este post....tendremos que esperar a que el maestro (Slasher) nos resuelva esta duda....

Si lo konsigues postea... ;) ;) ;)

Salu2



Título: Re: Inyeccion en otro proceso
Publicado por: Eternal Idol en 26 Abril 2006, 21:35 pm
CreateRemoteThread para crear el hilo.
VirtualAllocEx para escribir tanto datos como codigo.

El codigo tiene que ser en assembly ...


Título: Re: Inyeccion en otro proceso
Publicado por: Pseudoroot en 26 Abril 2006, 22:39 pm
No necesariamente tiene que ser en Asm, en C++ igual se puede inyectar code, en Visual Basic , no lo se..


Título: Re: Inyeccion en otro proceso
Publicado por: Eternal Idol en 26 Abril 2006, 22:45 pm
No necesariamente tiene que ser en Asm, en C++ igual se puede inyectar code, en Visual Basic , no lo se..

Depende de lo que haga el codigo, no podes pretender copiar cualquier codigo y que funcione perfectamente.
Las llamadas a la API de Windows tenes que estructurarlas de manera que no sean enlazadas estaticamente (generalmente se le pasa una estructura con punteros a las funciones que se usaran), cualquier variable de tipo cadena se crea en la zona de datos y el otro programa no la tendra, etc.


Título: Re: Inyeccion en otro proceso
Publicado por: Pseudoroot en 26 Abril 2006, 22:52 pm
Si, pero se que se puede en C++, por eso lo digo. ademas tengo un code, que inyecta al explorer.exe codeado  justamente en C++, y se eso que comentas, por eso a veces es necesario una dll externa o no, en caso que comento no se utilizo, pero si tubo que hacer usos de estructuras tal y como comentas tu..



Título: Re: Inyeccion en otro proceso
Publicado por: Eternal Idol en 26 Abril 2006, 22:57 pm
Si, pero se que se puede en C++, por eso lo digo. ademas tengo un code, que inyecta al explorer.exe codeado  justamente en C++, y se eso que comentas, por eso a veces es necesario una dll externa o no, en caso que comento no se utilizo, pero si tubo que hacer usos de estructuras tal y como comentas tu..

Por supuesto que se puede hacer en C++ pero si queres hacer cosas como inyectar codigo de 32 o 64 bits dependiendo del proceso a inyectar terminas haciendolo en hexadecimal como casi todo el mundo. Sin tener en cuenta todas las restricciones que te comente antes.

Por cierto no tiene nada que ver que el programa este escrito en C++, lo importante seria el codigo que inyecte. Y lo de la DLL tampoco tiene nada que ver aunque comunmente se hace eso, meter el codigo que haga un LoadLibrary.

El problema es este:

Código:
void funcion()
{
  DeleteFileA("Archivo.txt");
}

Si copias funcion al otro proceso (WriteProcessMemory), DeleteFileA llamara a cualquier lado y donde estaba "Archivo.txt" muy probablemente apunte a una direccion invalida y nunca jamas a "Archivo.txt".


Título: Re: Inyeccion en otro proceso
Publicado por: 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


Título: Re: Inyeccion en otro proceso
Publicado por: Eternal Idol en 26 Abril 2006, 23:30 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:
Código:
#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);
}


Título: Re: Inyeccion en otro proceso
Publicado por: 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?


Título: Re: Inyeccion en otro proceso
Publicado por: Eternal Idol en 27 Abril 2006, 15:20 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.


Título: Re: Inyeccion en otro proceso
Publicado por: Kizar en 27 Abril 2006, 15:24 pm
Citar
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).
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...


Título: Re: Inyeccion en otro proceso
Publicado por: Eternal Idol en 27 Abril 2006, 15:40 pm
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...

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).


Título: Re: Inyeccion en otro proceso
Publicado por: Kizar en 27 Abril 2006, 21:44 pm
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


Título: Re: Inyeccion en otro proceso
Publicado por: Eternal Idol en 27 Abril 2006, 21:47 pm
Esta bien pero no me voy a molestar en investigar demasiado al respecto, me parece mas bien inutil, lo logico es inyectar una DLL.