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
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
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
sips, me akuerdo de este post....tendremos que esperar a que el maestro (Slasher) nos resuelva esta duda....
Si lo konsigues postea... ;) ;) ;)
Salu2
CreateRemoteThread para crear el hilo.
VirtualAllocEx para escribir tanto datos como codigo.
El codigo tiene que ser en assembly ...
No necesariamente tiene que ser en Asm, en C++ igual se puede inyectar code, en Visual Basic , no lo se..
Cita de: 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..
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.
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..
Cita de: Pseudoroot en 26 Abril 2006, 22:52 PMSi, 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:
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".
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
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);
}
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?
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.
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...
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).
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
Esta bien pero no me voy a molestar en investigar demasiado al respecto, me parece mas bien inutil, lo logico es inyectar una DLL.