elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Ingeniería Inversa (Moderadores: karmany, .:UND3R:., MCKSys Argentina)
| | |-+  Inyeccion de DLL para obtener acceder a parametros de una funcion
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Inyeccion de DLL para obtener acceder a parametros de una funcion  (Leído 2,854 veces)
GonzaFz

Desconectado Desconectado

Mensajes: 69


Ver Perfil WWW
Inyeccion de DLL para obtener acceder a parametros de una funcion
« en: 25 Octubre 2015, 14:57 pm »

Ya hace mucho que vengo jodiendo con querer hacer un server emulator de un juego online (no existe ningun emulador). Cada vez que empiezo lo dejo al tiempo, aunque siempre avanzo un poquitito mas. Hoy se repite la historia...

Cuando arranque (a comienzo de año) me habia dado cuenta que los paquetes estan cifrados, y con el OllyDBG pude encontrar el algoritmo de encriptacion (muy simple).

Cuando me conecto al servidor, el mismo envia una clave de 16 bytes que todavia no se como se genera pero no importa.
Cada vez que el cliente tiene que enviar un mensaje, realizar una operacion XOR entre una DWORD del mensaje y una DWORD de la clave, la DWORD de la clave se elige mediante un algoritmo tonto que ahora no lo recuerdo.
Luego de cifrar el mensaje se suma a cada DWORD de la clave la longitud del mensaje cifrado. (En realidad no es la totalidad de la longitud, si el mensaje tiene una longitud de 0x38, entonces suma 0x30, no se como llamarlo)

Y se repite todo por cada mensaje enviado.
Entonces lo siguiente que debia hacer era desencriptarlos e interpretarlos.

En ese momento se me habia ocurrido (debido a mis pocas capacidades pensativas) hacer un programa en el cual al ingresar la clave, el numero del mensaje (ej, mensaje 5) y el mensaje, este me devuelva el mismo descifrado.
Me dispuse a hacerlo pero me frustro perder tanto tiempo teniendo que convertir datos para poder tratarlos, para poder ponerlos en los componentes de la GUI, etc, asi que deje todo a la *****.

Hoy retomando me di cuenta que lo mejor que podria hacer es interceptar la funcion que lo cifra (o descifra) y guardar el mensaje en un log antes de encriptarlo, asi puedo tomar muchisimas muestras y analizarlas facilmente.

Estuve leyendo sobre la inyeccion de DLLs pero hay cosas que no me quedan muy en claro.
La funcion a la que quiero acceder (basicamente para extenderla) no son del sistema, son del juego sobre el cual estoy trabajando.
Leyendo un par de cosas en google se me ocurrio que lo ideal seria obtener la direccion de memoria donde esta la funcion (creo que es fija) y luego sustituir alguna instruccion con un jump a la DLL que yo inserto.
Ya dentro de mi funcion tendria que acceder a los parametros (un buffer y la longitud del buffer) de la funcion la cual intercepte y es eso lo que no se como tengo que hacer.
Segun tengo entendido los parametros, en assembler, se pasan por el Stack y luego son recuperados por la funcion que se ejecuta, entonces yo deberia saltar a mi funcion en la primera instruccion, sacar todos los parametros, procesarlos y despues volver a volcarlos en el Stack, eso es correcto?

Y algo relacionado pero a parte, mi idea es ir capturando ese buffer cada vez que se va a mandar un mensaje e ir guardandolo en un log (xml).
Como tendria que hacerlo? Porque si lo hago en mi funcion cada vez que llegue tendria que abrir el log, escribir el buffer y algunos datos mas, y despues cerrar el archivo, creo que no seria lo optimo teniendo en cuenta que haria esto todo el tiempo que se envian paquetes.

Saludos.
En línea

crack81

Desconectado Desconectado

Mensajes: 222



Ver Perfil
Re: Inyeccion de DLL para obtener acceder a parametros de una funcion
« Respuesta #1 en: 25 Octubre 2015, 20:17 pm »

Si no sabes el nombre y parametros de las funciones  de la dll sera muy complicado hacer lo que estas pensando me imagino que es una dll hecha en c++

Hay programas que permiten obtener el nombre de la funcion pero no asi sus parametros asi lo que te queda es revisar si hay documentacicon oficial sobre las funciones de la dll.

Saludos....
En línea

Si C/C++ es el padre de los lenguajes entonces ASM es dios.
MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.465


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Inyeccion de DLL para obtener acceder a parametros de una funcion
« Respuesta #2 en: 25 Octubre 2015, 21:03 pm »

Estuve leyendo sobre la inyeccion de DLLs pero hay cosas que no me quedan muy en claro.
La funcion a la que quiero acceder (basicamente para extenderla) no son del sistema, son del juego sobre el cual estoy trabajando.
Leyendo un par de cosas en google se me ocurrio que lo ideal seria obtener la direccion de memoria donde esta la funcion (creo que es fija) y luego sustituir alguna instruccion con un jump a la DLL que yo inserto.
Ya dentro de mi funcion tendria que acceder a los parametros (un buffer y la longitud del buffer) de la funcion la cual intercepte y es eso lo que no se como tengo que hacer.
Segun tengo entendido los parametros, en assembler, se pasan por el Stack y luego son recuperados por la funcion que se ejecuta, entonces yo deberia saltar a mi funcion en la primera instruccion, sacar todos los parametros, procesarlos y despues volver a volcarlos en el Stack, eso es correcto?

Si los parámetros son pasados por stack o registros, no son problemas. Unas vez que coloques el hook al inicio de la función y saltes a tu código, sólo deberás preocuparte por dejar todo como estaba al salir de la misma.

Por supuesto, ya deberías saber cuántos son los parámetros y qué son cada uno (valores o punteros).

Y algo relacionado pero a parte, mi idea es ir capturando ese buffer cada vez que se va a mandar un mensaje e ir guardandolo en un log (xml).
Como tendria que hacerlo? Porque si lo hago en mi funcion cada vez que llegue tendria que abrir el log, escribir el buffer y algunos datos mas, y despues cerrar el archivo, creo que no seria lo optimo teniendo en cuenta que haria esto todo el tiempo que se envian paquetes.

Si quieres loguear todo, entonces deberás guadar el buffer en algún lado (memoria o disco). Sinó, deberás filtrar la data de acuerdo a lo que quieras loguear.

Saludos!
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

GonzaFz

Desconectado Desconectado

Mensajes: 69


Ver Perfil WWW
Re: Inyeccion de DLL para obtener acceder a parametros de una funcion
« Respuesta #3 en: 26 Octubre 2015, 02:07 am »

Si no sabes el nombre y parametros de las funciones  de la dll sera muy complicado hacer lo que estas pensando me imagino que es una dll hecha en c++

Hay programas que permiten obtener el nombre de la funcion pero no asi sus parametros asi lo que te queda es revisar si hay documentacicon oficial sobre las funciones de la dll.

Saludos....

La DLL la voy a hacer yo, lo que quiero es inyectarla a un juego en una funcion de dicho juego, conozco los parametros porque la abri con OllyDBG.

Si quieres loguear todo, entonces deberás guadar el buffer en algún lado (memoria o disco). Sinó, deberás filtrar la data de acuerdo a lo que quieras loguear.
No pense eso de guardarlo en la RAM. Como voy a capturar todos los mensajes que se encripten pense que seria mucho aunque no lo es (muchos tienen menos de 50 bytes de largo).
Estaba pensando la posibilidad de hacer un archivo xml e ir añadiendo un nodo cada vez que se cifra un mensaje, el tema es que cada vez voy a tener que abrir el archivo xml, escribir y cerrarlo, no se si es optimo.
En línea

Holamundo001

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: Inyeccion de DLL para obtener acceder a parametros de una funcion
« Respuesta #4 en: 17 Noviembre 2015, 23:14 pm »

En mi caso tengo yo tengo hook las funciones send y recv de un juego online y los datos están cifrados, si me ayudarías a encontrarlo podría ayudarte con la dll. espero tu respuesta.
Saludos comunidad elhacker.
En línea

Miseryk

Desconectado Desconectado

Mensajes: 225


SI.NU.SA U.GU.DE (2NE1 - D-Unit)


Ver Perfil
Re: Inyeccion de DLL para obtener acceder a parametros de una funcion
« Respuesta #5 en: 24 Noviembre 2015, 16:19 pm »

Ya hace mucho que vengo jodiendo con querer hacer un server emulator de un juego online (no existe ningun emulador). Cada vez que empiezo lo dejo al tiempo, aunque siempre avanzo un poquitito mas. Hoy se repite la historia...

Cuando arranque (a comienzo de año) me habia dado cuenta que los paquetes estan cifrados, y con el OllyDBG pude encontrar el algoritmo de encriptacion (muy simple).

Cuando me conecto al servidor, el mismo envia una clave de 16 bytes que todavia no se como se genera pero no importa.
Cada vez que el cliente tiene que enviar un mensaje, realizar una operacion XOR entre una DWORD del mensaje y una DWORD de la clave, la DWORD de la clave se elige mediante un algoritmo tonto que ahora no lo recuerdo.
Luego de cifrar el mensaje se suma a cada DWORD de la clave la longitud del mensaje cifrado. (En realidad no es la totalidad de la longitud, si el mensaje tiene una longitud de 0x38, entonces suma 0x30, no se como llamarlo)

Y se repite todo por cada mensaje enviado.
Entonces lo siguiente que debia hacer era desencriptarlos e interpretarlos.

En ese momento se me habia ocurrido (debido a mis pocas capacidades pensativas) hacer un programa en el cual al ingresar la clave, el numero del mensaje (ej, mensaje 5) y el mensaje, este me devuelva el mismo descifrado.
Me dispuse a hacerlo pero me frustro perder tanto tiempo teniendo que convertir datos para poder tratarlos, para poder ponerlos en los componentes de la GUI, etc, asi que deje todo a la *****.

Hoy retomando me di cuenta que lo mejor que podria hacer es interceptar la funcion que lo cifra (o descifra) y guardar el mensaje en un log antes de encriptarlo, asi puedo tomar muchisimas muestras y analizarlas facilmente.

Estuve leyendo sobre la inyeccion de DLLs pero hay cosas que no me quedan muy en claro.
La funcion a la que quiero acceder (basicamente para extenderla) no son del sistema, son del juego sobre el cual estoy trabajando.
Leyendo un par de cosas en google se me ocurrio que lo ideal seria obtener la direccion de memoria donde esta la funcion (creo que es fija) y luego sustituir alguna instruccion con un jump a la DLL que yo inserto.
Ya dentro de mi funcion tendria que acceder a los parametros (un buffer y la longitud del buffer) de la funcion la cual intercepte y es eso lo que no se como tengo que hacer.
Segun tengo entendido los parametros, en assembler, se pasan por el Stack y luego son recuperados por la funcion que se ejecuta, entonces yo deberia saltar a mi funcion en la primera instruccion, sacar todos los parametros, procesarlos y despues volver a volcarlos en el Stack, eso es correcto?

Y algo relacionado pero a parte, mi idea es ir capturando ese buffer cada vez que se va a mandar un mensaje e ir guardandolo en un log (xml).
Como tendria que hacerlo? Porque si lo hago en mi funcion cada vez que llegue tendria que abrir el log, escribir el buffer y algunos datos mas, y despues cerrar el archivo, creo que no seria lo optimo teniendo en cuenta que haria esto todo el tiempo que se envian paquetes.

Saludos.

Si sabés donde empieza la función, fiajte en el ret, ahí te dice la cantidad de bytes de parámetros, sinó luego del ret vá a ir a parar debajo de un call, arriba están los pushes de la función.
En línea

Can you see it?
The worst is over
The monsters in my head are scared of love
Fallen people listen up! It’s never too late to change our luck
So, don’t let them steal your light
Don’t let them break your stride
There is light on the other side
And you’ll see all the raindrops falling behind
Make it out tonight
it’s a revolution

CL!!!
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Inyección de Parametros Sqlmap
Bugs y Exploits
Owl-City 9 7,238 Último mensaje 6 Febrero 2014, 08:15 am
por BlackM4ster
Pasar 2 parámetros en inyección de código
ASM
Vaagish 9 4,891 Último mensaje 17 Julio 2014, 21:43 pm
por Eternal Idol
MOVIDO: Inyeccion de DLL para obtener acceder a parametros de una funcion
Hacking
.:UND3R:. 0 1,937 Último mensaje 25 Octubre 2015, 18:12 pm
por .:UND3R:.
Inyeccion DLL para extender una funcion
Ingeniería Inversa
GonzaFz 3 2,577 Último mensaje 28 Octubre 2015, 16:52 pm
por GonzaFz
Acceder al programa de facturas .mdb para cambiar una función
Ingeniería Inversa
Nucleorion 4 3,665 Último mensaje 16 Diciembre 2019, 11:53 am
por Nucleorion
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines