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

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


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

Desconectado Desconectado

Mensajes: 69


Ver Perfil WWW
Inyeccion DLL para extender una funcion
« en: 28 Octubre 2015, 00:34 am »

Estoy intentando capturar un mensaje que posteriormente sera un packet antes de que se encripte.
Tengo la direccion estatica de la funcion que quiero modificar, entonces mediante el siguiente algoritmo modifico el codigo para que cuando ingrese a esa funcion salte a mi codigo.
Código
  1. void JmpPatch(void *pDest, void *pSrc, int nNops = 0) {
  2.  
  3. DWORD OldProt;
  4. VirtualProtect(pSrc, 5 + nNops, PAGE_EXECUTE_READWRITE, &OldProt);
  5. PointTo = (DWORD)pSrc + 8;
  6. *(char*)pSrc = (char)0xE9;
  7. *(DWORD*)((DWORD)pSrc + 1) = (DWORD)pDest - (DWORD)pSrc - 5;
  8.  
  9. for (int i = 0; i < nNops; ++i) { *(BYTE*)((DWORD)pSrc + 5 + i) = 0x90; }
  10.  
  11. VirtualProtect(pSrc, 5 + nNops, OldProt, &OldProt);
  12. }

El codigo funciona bien, salta a mi funcion, entonces lo que hago es ejecutar las instrucciones que habia reemplazado y despues volver a donde estaba (estoy haciendo pruebas solamente).

Esta es la funcion original en Assembler (yo coloco el jmp en 0x626324 y hago nop de dos bytes mas) y mas abajo estas la funcion mia a la que salto.

Código
  1. DWORD dir = 0x62632B;
  2. void ImprimirLog()
  3. {
  4. __asm {
  5. mov edi, [esp + 4 + DWORD PTR 0Ch]
  6. shr edi, 2
  7. push dir
  8. ret
  9. }
  10. }

El problema es que cuando llego a mi funcion se me cambian todos los registros de la cpu y el stack, y se me hace un desastre y cuando hago el return se me corrompe todo.

Esto es antes de llegar a __asm { }


Y asi queda cuando entra a __asm { }



No tengo idea en que estoy fallando, ya probe un monton de cosas y quede ahi trabado.
« Última modificación: 28 Octubre 2015, 00:51 am por GonzaFz » En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.471


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Inyeccion DLL para extender una funcion
« Respuesta #1 en: 28 Octubre 2015, 04:39 am »

Hola!

Lo mejor que puedes hacer es: correr el programa cuya DLL modificas con un debugger (Parece que estás en 32 bits, así que aconsejo Olly), le pongas un BP al inicio de la misma (HBP si modificas los bytes) y veas qué pasa cuando el HBP salta.

Es la mejor opción para comprender qué estás haciendo mal.

Saludos!
En línea

MCKSys Argentina

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

tincopasan


Desconectado Desconectado

Mensajes: 1.286

No es lo mismo conocer el camino que recorrerlo.


Ver Perfil
Re: Inyeccion DLL para extender una funcion
« Respuesta #2 en: 28 Octubre 2015, 05:40 am »

supongo que cuando saltas a tu función haces un pushad (para mantener el valor de los registros) y cuando termina tu función un popad
En línea

GonzaFz

Desconectado Desconectado

Mensajes: 69


Ver Perfil WWW
Re: Inyeccion DLL para extender una funcion
« Respuesta #3 en: 28 Octubre 2015, 16:52 pm »

Hola!

Lo mejor que puedes hacer es: correr el programa cuya DLL modificas con un debugger (Parece que estás en 32 bits, así que aconsejo Olly), le pongas un BP al inicio de la misma (HBP si modificas los bytes) y veas qué pasa cuando el HBP salta.

Es la mejor opción para comprender qué estás haciendo mal.

Saludos!

Eso habia hecho y era que cuando ingresaba a la funcion (como yo hacia un jump) el prologo y el epilogo me destrozaban los registros.
Ahora encontre que tengo que poner al comienzo de la definicion de mi funcion a la cual hago el jump lo siguiente
__declspec(naked) definicion(parametros) {}

Eso hace que evite el prologo y el epilogo de manera que salta directo a las instrucciones.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines