Autor
|
Tema: como hacen los malware para executarse con inyeccion y sin DLL? (Leído 5,003 veces)
|
Belial & Grimoire
Desconectado
Mensajes: 559
Tea_Madhatter
|
hola
como hacen lo malware para ejecutarse haciendo inyeccion sin dll?, porque estaba intenando hacer inyecciones y con DLL no tengo problemas pero sin dll no puedo ejecutar funciones a menos que sean invokadas por estructuras, pero como crear una conexion socket unicamente con apis y estructuras?
y e visto troyanos que dicen que se ejecutan sin DLL, pero no encuentro como hacerlo, alguien aqui conoce algo sobre esto?, lo que intentaba hacer era en lenguaje C, hacer una inyeccion sencilla a notepad.exe, e invokar apis es sencillo, pero no puedo inyectar alguna funcion para ejecutar cualquier cosa, a menos de que sea otra api
o alguien me puede explicar de que forma serviria hacer una inyeccion sin dll, para hacking... ya sea, troyanos, exploits, gusanos, etc... porque como les menciono la unica forma que se, es usando dll y se me hizo interesante hacer sin eso
espero alguien tenga alguna informacion o idea...
salu2
|
|
|
En línea
|
.
|
|
|
Karman
|
hay un post en este foro del user [ZERO] (si mal no recuerdo) que explica como hacerlo, buscalo S2
|
|
|
En línea
|
|
|
|
Belial & Grimoire
Desconectado
Mensajes: 559
Tea_Madhatter
|
hola si se como hacerlo, pero lo que no encuentro es en que puede ayudar si solo logro invocar apis, me dijo Eternal Idol que es imposible hacer algo como esto, y puse de referencia el tuto de E0N DWORD inyectada (datos *data) { MessageBoxA (0, data->mensaje, data->titulo, 0); return 0; }
Eso no funcionara nunca, el codigo a inyectar en tu programa usa la tabla de importacion para llamar a la API y esta no coincide (salvo por una casualidad) con la del programa inyectado. se me habia ocurrido llamar a una funcion con CreateThread pero me aparece un error, solo puedo llamar desde esa funcion a una estructura DWORD inyectada (datos *data) { data - >MessageBoxA (0, data->mensaje, data->titulo, 0); return 0; } tambien intente reservar espacio para esa funcion, escribirla y llamarla con CreateThread, pero igual me sale un error por lo que llego a ver esto lo puedo usar unicamente para abrir alguna aplicacion o DLL, por ejemplo que se autoinicie el programa, que abra espacio para inyeccion y que notepad abra la aplicacion o la DLL pero seria igual a una inyeccion con DLL o que sobreescriba notepad agregando codigo... pero hay antivirus que checan el hash la unica ventaja seria que mi aplicacion no abriria nada seria notepad y seria menos evidente que puede ser un malware mmm, bueno mas que nada queria checar esto porque nunca me a gustado usar muchos archivos, porque supuestamente todo tiene que se sigiloso, asi puedo ver que fallos encuentro en mi computadora sino pues continuare con inyeccion en DLL y vere si el metodo Meepa me puede ayudar en hacerlo menos evidente... aunque no logro hacer ese metodo en Win7 solo pude en WinXP bueno, si algun tiene una opinion o una idea mas, se lo agradezco salu2
|
|
« Última modificación: 30 Agosto 2011, 18:57 pm por Belial & Grimoire »
|
En línea
|
.
|
|
|
Karman
|
no entendí muy bien lo que querés hacer (si es inyectar tu EXE a otro proceso y llamar a API's, etc, fijate el post que te comenté), si por otro lado, querés inyectar código a otro proceso y que use API's y/o que te inyecte/cargue a vos mismo (EXE o DLL) ya es más complejo, pero en resumidas cuentas los pasos serían los del ejemplo de EON (pero con más API's), si no es ninguno de los dos pues trata de explicarte mejor porque no te entiendo acá tenes otro ejemplo de más o menos lo mismo: http://foro.elhacker.net/programacion_cc/inyeccion_dll-t169870.0.htmlS2
|
|
« Última modificación: 30 Agosto 2011, 19:19 pm por Karman »
|
En línea
|
|
|
|
Belial & Grimoire
Desconectado
Mensajes: 559
Tea_Madhatter
|
entonces todo lo tengo que hacer asi verdad? struct iDat { sCreateMutex pCreateMutex; };
//////////////////////
DWORD Resident(iDat *base) { //creamos el mutex "Resident" para marcar el proceso como //inyectado base->pCreateMutex(NULL, 0, base->Mutex); }
////////////////////////////////
dat.pCreateMutex = (sCreateMutex)GetAdres("KERNEL32.DLL", "CreateMutexA");
y si por ejemplo quisiera iniciar un socket? tendria que llamar la api de socket, darle los parametros a la estructura iDat y ejecutarlo desde la funcion Resident? porque bueno, logro hacer todo esto que coloque... y si lo entiendo, pero tendria que hacer todo lo que necesite con estructuras, por ejemplo pipe, socket, etc...? y funciones extras como Send y Recv o conect, etc?, donde las colocaria?, eso es lo que no entiendo, como o donde colocar todo lo demas que necesite? espero darme a entender, las apis se como usarlas y donde van, pero los demas parametros no se donde colocarlos otro ejemplo aqui podria usar un for( ; ; ) ? y si puedo donde o como lo hago funcionar desde la inyeccion?, porque se que no puedo hacer esto DWORD Resident(iDat *base) { base->pCreateMutex(NULL, 0, base->Mutex); for(i = 0; i<2, i++); }; espero esto pueda hacer mas facil enteder mi duda, soy malo explicando jaja salu2 y gracias
|
|
|
En línea
|
.
|
|
|
Karman
|
y si por ejemplo quisiera iniciar un socket?
tendria que llamar la api de socket, darle los parametros a la estructura iDat y ejecutarlo desde la funcion Resident?
porque bueno, logro hacer todo esto que coloque... y si lo entiendo, pero tendria que hacer todo lo que necesite con estructuras, por ejemplo
pipe, socket, etc...?
y funciones extras como Send y Recv o conect, etc?, donde las colocaria?, eso es lo que no entiendo, como o donde colocar todo lo demas que necesite?
espero darme a entender, las apis se como usarlas y donde van, pero los demas parametros no se donde colocarlos y si, ese es el problema de usar ese método (por eso te comenté primero lo de inyección del executable donde solo tenes que preocuparte de "inyectarlo bien"), el tema de los parámetros tendrías que hacer algo así: typedef struct funciones{ PVOID func1;//no necesariamente PVOID, solo para ejemplo PVOID CreateFile; PVOID recv; //... PVOID funcN; }; typedef struct datos{ HANDLE hFile; SOCKET s; CHAR nombre[XX]; PVOID buffer[512];//etc... }; struct me{ funciones f; datos d; }; void X(struct me *yo){ yo->d.hFile=yo->f.CreateFile(yo->d.nombre/*...*/); //.... yo->f.recv(yo->d.s,yo->d.buffer,512,0); }
e incluso podrías tener varias funciones (aunque tendrías que hacer una especie de "relocado") typedef struct mefunc{ PVOID init; PVOID dosomething; } struct me{ mefunc m; funciones f; datos d; }; void init(){ return; } //... me.m.init=init; //... me.m.init+=-mebaseaddres+inyectionaddress; //...
donde baseaddress sería la dirección de la primera función (suponiendo que estén en orden secuncial) e inyectionaddress la dirección que te devuelve virtualalloc (en la víctima)... otro ejemplo aqui podria usar un for( ; ; ) ? y si puedo donde o como lo hago funcionar desde la inyeccion?, porque se que no puedo hacer esto DWORD Resident(iDat *base) { base->pCreateMutex(NULL, 0, base->Mutex); for(i = 0; i<2, i++); }; espero esto pueda hacer mas facil enteder mi duda, soy malo explicando jaja puedes usar cualquier * instrucción del lenguaje sin problemas, el probema es con las llamadas intermodulares (funciones en otros espacios de memoria [dll's]) S2 El * es porque "en teoría" no deberías tener problemas dado que esas instrucciones son traducidas como saltos relativos (en el caso de C++ new y delete obviamente no van a estar disponibles).
|
|
« Última modificación: 30 Agosto 2011, 20:38 pm por Karman »
|
En línea
|
|
|
|
Belial & Grimoire
Desconectado
Mensajes: 559
Tea_Madhatter
|
Uff. Creo tendre que repasar mis libros y repasar usos de estructuras jeje
Creo esta vez usaren bastantes... bueno no importa mientras aprenda mas es mejor
Gracias por la ayuda y la paciencia
|
|
|
En línea
|
.
|
|
|
[Zero]
Wiki
Desconectado
Mensajes: 1.082
CALL DWORD PTR DS:[0]
|
En el caso que te comentó Eternal Idol, que no te funcionaría porque la IAT no estaría con los datos adecuados, "simplemente" la rellenas a mano y listo. Otro problema sería la dirección base del ejecutable, te dejo el link al post que mencionó Karman: http://foro.elhacker.net/analisis_y_diseno_de_malware/ejecucion_de_archivos_desde_memoria_base_relocation-t264564.0.html También te dejo otra forma mucho más simple, que escribí hace no mucho: http://h-sec.org/inyectando-ejecutable-memoria-dummysection Con esta última, no podrías inyectar en el proceso que quieras, solo en el "contenedor", así que no sirve para algunas cosas. Saludos
|
|
|
En línea
|
“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza. Nietzsche
|
|
|
Belial & Grimoire
Desconectado
Mensajes: 559
Tea_Madhatter
|
que bien mas informacion...
ahora entiendo porque me dijo que a menos de que la tabla coincida podria funcionar, bueno... gracias [Zero] ahorita mismo veo los links
salu2
|
|
|
En línea
|
.
|
|
|
Arkangel_0x7C5
Desconectado
Mensajes: 361
|
yo lo que ago es inyectar 2 codigos: shellcode(Es independiente de la address_base)+struc(contiene argumentos para el exe, la direccion de el exe+puntero a GetprocAddress, LoadLibrary, VirtualProtec)+exe_con_seccion_reloc luego solo hay que conocer las diferentes secciones del PE. http://h-sec.org/formato-pe-windows-espanolAsi tu exe no tiene porque saber nada de las inyecciones PD:hay problemas con la carga dinamica de msvcrt.dll y sus distintas versiones
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Una aplicación para el Messenger es usada como cebo para distribuir malware
Noticias
|
wolfbcn
|
0
|
1,377
|
2 Junio 2010, 14:02 pm
por wolfbcn
|
|
|
Como lo hacen para ser tan rápidos con las ofertas
Dudas Generales
|
isaaclo97
|
3
|
2,698
|
24 Enero 2016, 22:24 pm
por karmany
|
|
|
“Clickjacking”, o cómo te hacen instalar malware en tu móvil sin que te enteres
Noticias
|
wolfbcn
|
0
|
1,557
|
6 Marzo 2016, 18:43 pm
por wolfbcn
|
|
|
¿Como hacen para buscar el nombre de una película en su idioma?
Foro Libre
|
Eleкtro
|
3
|
2,054
|
8 Abril 2018, 18:22 pm
por PalitroqueZ
|
|
|
Ordenador Drivers hacen conflicto con el wifi? Malware?
Windows
|
Alessandro_Martini
|
4
|
3,063
|
31 Julio 2020, 09:25 am
por Randomize
|
|