Bueno, hace un tiempo postie Cargando librerias en runtime , pero desde el source.
Hoy nos vamos a enfocar en lo mismo , pero cuando no contamos con el source.

Pero antes una pequeña introducción.


Teoria:

¿Que es una libreria dll)?
Es un Archivo, con estructura Pe, en el cual tenemos funciones exportadas.
que podemos usar en los demas programas.
ejemplos de dll: Kernel32.dll, ntdll.dll, user32.dll

¿y las Apis?
son esas funciones exportadas, las mas usadas son las del kernell.dll.
por ejemplo en la mayoria de los Crypters, para inyectar en memoria usamos
Writeprocessmemory.

Un Exe, esta formado , por instrucciones y por llamadas a funciones locales y externas.
para las externas, el Exe cuenta con una estructura, IAT, donde contiene las direcciones
de todas estas funciones externas(estas direcciones cambian de Windows en Windows).

Entonces que Hace la heuristica de un AV
1-Busca Offset
2- si no, busca patrones generales ,como por ejemplo:
a) tiene en la IAT un writeprocessmemory? --> b)

b) es Consola, y ademas invisible? --> c)

c) tiene Resourse o Eof? = Heur.injector o algun nombre asi :P

bien, ahora , que podemos hacer:

destruir la IAT o Sacar todos los "intermodulars calls externos" que sean posibles.
y de donde saco las direcciones de esas funciones?

con 2 Apis

Kernel32.LoadLibraryA
Kernel32.GetProcAddress


LoadlibraryA : pongo como parametro un ASCII por ejemplo 'kernel32.dll'.
y nos devuelve , la direccion al mismo.

GetProcAddress: pongo como parametro , la direccion de lo que cargue en LoadLibrary , y ademas le paso el nombre de la funcion.

****************************************************************************************************

Práctico:

Bueno , vamos a trabajar con un holamundo.exe que compilé.
el cual usa WriteConsoleA, para escribir en la consola el mensaje que yo quiero.
Veamos el Hello original

Imagen


vemos que en 4050B0 , esta la direccion del WriteConsoleA
entonces ese 4050B0 lo vamos a reemplazar por el lugar donde pongamos nosotros , la direccion del WriteConsoleA, llamando a GetProcAddress,
y no de la IAT.

entonces yo le agregue este codigo.

Imagen


se preguntaran de donde saque el 405074
bien, si el exe que estamos trabajando no cuenta con LoadlibraryA ni GetProcAddress . las tenemos que agregar a mano.
eso se puede hacer con el LordPe o con el StudPe. es agregar imports.(no me voy a meter con eso ahora, lo añadire luego)

buenos veamos que hace este Code, va primero veamos como se llama a las funciones.

Si yo tengo una función para llamarla en ASM tengo q apilar los datos primero. con la instruccion PUSH

entonces

Código: Seleccionar todo

PUSH hello.00404DFF                      ; /FileName = "kernel32.dll"
CALL DWORD PTR DS:[<&KERNEL32.LoadLibrar>; \LoadLibraryA
en este caso apilo el ASCII, que yo mismo escribi mas arriba, y llamo a la función, Siempre apilo de atras para adelante.(ver pila o stack)

luego el turno del GetProcAddress

Código: Seleccionar todo

MOV EDI,EAX     ; el loadlibraryA me devuelve la direccion en EAX, la mando a EDI
PUSH hello.00404E0D                      ; APILO EL ASCII "WriteConsoleA"
PUSH EDI                                 ; | APILO LO QUE DEVOLVIO LA FUNCION ANTERIOR 
CALL DWORD PTR DS:[<&KERNEL32.GetProcAdd>; \GetProcAddress


y por ultimo

Código: Seleccionar todo

MOV DWORD PTR DS:[404E20],EAX        ;pongo la direccion en 404E20
JMP hello.00401061
;salto al entrypoint

Atencion , se acuerdan en la priemr imagen que les dije

"vemos que en 4050B0 , esta la direccion del WriteConsoleA"

bueno en vez de 4050B0, ahora tiene que decir 404E20 :)
porq es donde con nuestro codigo, pusimos la direccion de la funcion.

el loadlibrary una vez q la pusimos en EDI, ya queda ahi , osea podemos repetir el GetProcAddress dentro de la misma Dll, las veces que necesitemos.


DESCARGA:
hello.exe (con api en runtime)
hello_or.exe (hello original)

[Enlace externo eliminado para invitados]



Aclaraciones finales:
Este es un metodo algo viejo y clasico ya, existen otras formas de no usar ninguna api, pero eso es algo mas avanzado.
por ahora esto les vendra bien. espero que les sirva y cualquier duda, consulta o critica, sera bienvenida.

La reproducción de este manual , total o parcial debe llevar su fuente. y ni Leos_79 ni indetectables.net
avalan el uso de técnicas o manuales para indetectar programas con el fin de introducirse en Pcs Ajenas
sin el consentimiento del Propietario de la misma.

descarga Video tutorial >>
Enlace roto[Enlace externo eliminado para invitados]

Enlace nuevo (gracias m4rtyr) :[Enlace externo eliminado para invitados]


Leos
No hay éxito como el fracaso, pero el fracaso no es ningun éxito...
Muy buena explicación.
leos_79 escribió:existen otras formas de no usar ninguna api,
Un artículo sobre como hacerlo, no es muy difícil de entender:
[Enlace externo eliminado para invitados]
[Enlace externo eliminado para invitados]

Un saludo.
leos_79 tu manera de escribir y explicar se me hace muy conocida ... no que va ya se retiro ... o no? ...
TopCorp -Servicios de programacion a precios muy económicos
es lo mismo que digo aca pero mejor explicado

esta bueno... gracias por el aporte (la diferencia -aparte de lo de la explicacion- es que aca si lo van a leer

saludos
//No estan permitidos los refer en este sitio.

SI ERES CHAVISTA Y HONESTO NO ERES INTELIGENTE.
SI ERES CHAVISTA E INTELIGENTE NO ERES HONESTO.
SI ERES INTELIGENTE Y HONESTO NO ERES NI SERAS NUNCA CHAVISTA.
bloodday escribió:es lo mismo que digo aca pero mejor explicado

esta bueno... gracias por el aporte (la diferencia -aparte de lo de la explicacion- es que aca si lo van a leer

saludos
si, blood , lo pense mas para un novato que para alguien mas avanzado, es algo bastante básico que la mayoria que esta en tema sabe de taquito jeje.
por cierto se nota que tenes un buen nivel.
Saludos!
No hay éxito como el fracaso, pero el fracaso no es ningun éxito...
de una digo que yo haciendo manualpacking a un stub hice una llamada a GetVersion en una rutina basura, y la heuristica me lo agarro por esa llamada (haciendo esto para obtener su direccion en memoria).

asi que lo que se me ocurre es optener la direccion, y (dependiendo de la api) hacer "push ebp" "mov ebp,esp" y hacer la llamada hacia la instruccion que esta luego de estas instrucciones en la api.

seria una llamada asi:

Call [direccion +3]

pero hay que ir primero a la api a ver si utiliza estas instrucciones (la mayoria para reservar espacio en el stack)
//No estan permitidos los refer en este sitio.

SI ERES CHAVISTA Y HONESTO NO ERES INTELIGENTE.
SI ERES CHAVISTA E INTELIGENTE NO ERES HONESTO.
SI ERES INTELIGENTE Y HONESTO NO ERES NI SERAS NUNCA CHAVISTA.
sino una mejor es ,no usar ni LoadLibrary ni GetProcesAdress, sino buscar la direccion manualmente de la función a llamar en la .dll
y sacar el image base del kernel a tráves del PEB.
busca algun tuto de como crear una shellcode multi-win32.
son cosas bastante parecidas.
No hay éxito como el fracaso, pero el fracaso no es ningun éxito...
me pongo a trabajar en eso cuando llegue a mi casa y veremos que se logra.
Thor escribió:Muy buena explicación.
leos_79 escribió:existen otras formas de no usar ninguna api,
Un artículo sobre como hacerlo, no es muy difícil de entender:
[Enlace externo eliminado para invitados]
[Enlace externo eliminado para invitados]

Un saludo.
madre santa thor, yo apenas voy por el tuto seiscientos y algo... te admiro...
//No estan permitidos los refer en este sitio.

SI ERES CHAVISTA Y HONESTO NO ERES INTELIGENTE.
SI ERES CHAVISTA E INTELIGENTE NO ERES HONESTO.
SI ERES INTELIGENTE Y HONESTO NO ERES NI SERAS NUNCA CHAVISTA.
salteate todos , y mira ese que dice thor, vale la pena :).
cualquier duda preguntame. si queres te busco un tuto de elhacker.net que explicaba eso.
con dos sources muy buenos, obviamente nos olvidamos del problema del fin de cadena de los buffer,del 00.
asi que es mas comodo.
No hay éxito como el fracaso, pero el fracaso no es ningun éxito...
bloodday escribió:me pongo a trabajar en eso cuando llegue a mi casa y veremos que se logra.
Thor escribió:Muy buena explicación.
leos_79 escribió:existen otras formas de no usar ninguna api,
Un artículo sobre como hacerlo, no es muy difícil de entender:
[Enlace externo eliminado para invitados]
[Enlace externo eliminado para invitados]

Un saludo.
madre santa thor, yo apenas voy por el tuto seiscientos y algo... te admiro...
No loco, yo voy por el 30 del curso de iniciación de Ricardo Narvaja. Salte a ese en un momento de deseo incontrolable.
Responder

Volver a “Manuales y Tutoriales”