[TUTORIAL] Reversing del controlador XignCode3 - Parte 2 - Análisis de las funciones de inicio

  • Hola Invitado, ¿Quieres ganar dinero con GamerzHacking?, estamos necesitando creadores de contenido en game hacking o pirateria de juegos ingresa al siguiente enlance para mayor informacion AQUI
  • Hola Invitado, ¿Creas contenido sobre game hacking en tu blog o sitio web?, ¿Te gustaria formar una alianza para asi poder generar mas trafico en tu sitio y seguir creciendo como comunidad? INGRESA AQUI


268
Me Gusta
128
Temas

c0de

MOV EAX, EDX
Registrado
19 Abr 2020
Temas
128
Mensajes
245
Ubicación
Localhost
Mejores respuestas
0
1588817741453.png
Si no ha leído la publicación anterior, puede encontrarla aquí . Hoy continuaremos analizando algunas funciones que DriverEntry está utilizando.

En la parte 1 identificamos la función Dispatcher del controlador, así como dos funciones que inicializaban algunas variables para el controlador ( fn_InitDispatchMethodArray y fn_ObtainKernelFunctions ). Vamos a revertir cada uno de ellos y analizar rápidamente qué están haciendo. Esto nos ayudará a comprender las funciones de Dispatcher implementadas en este controlador.

¿Por lo que pasaremos?
  1. Algunos mecanismos básicos de inicialización de este controlador
  2. Identifique lo que parece ser una estructura personalizada utilizada para indexar y almacenar todos los métodos disponibles.
  3. Identifique cómo se ubican las direcciones de función en la memoria. Por ejemplo,
    Porfavor, Acceder o Registrarse para ver el contenido de las URL!
    . Vamos a hablar de esto en las siguientes publicaciones.
fn_InitDispatchMethodArray (0x1400015F8)
El código original para esta función se puede encontrar aquí:
Porfavor, Acceder o Registrarse para ver el contenido de las URL!
y
Porfavor, Acceder o Registrarse para ver el contenido de las URL!
. Y el resultado final
Porfavor, Acceder o Registrarse para ver el contenido de las URL!
(trata de no consentirte aún).

Vamos a ver ahora en esta función que se está inicializando una especie de estructura personalizada:

C++:
Porfavor, Acceder o Registrarse para ver el contenido de los códigos!

Podemos resolver esto, porque si prestamos atención al ensamblaje, veremos que primero asignan un valor int a una dirección de memoria en particular, y luego mueven 8 bytes más para escribir un puntero a una función dentro del binario. . Llamaremos a esta estructura IOCTLFunctionArray. ¿Una matriz? solo sigue leyendo =) Esta matriz desempeñará un papel importante al enviar una solicitud.

La estructura sería algo como esto:

C++:
Porfavor, Acceder o Registrarse para ver el contenido de los códigos!

Y en IDA Pro:

C++:
Porfavor, Acceder o Registrarse para ver el contenido de los códigos!

Este proceso se repite varias veces en esta función, 25 veces exactamente. Es por eso que lo llamamos matriz , se almacenan 25 veces la misma estructura (con diferentes valores, por supuesto) dentro de una matriz.

El valor 25 también se está almacenando en una variable que decidí renombrar de dword_14000A240 a FunctionsCount :

C++:
Porfavor, Acceder o Registrarse para ver el contenido de los códigos!

Más adelante veremos cómo se usa esta variable en el Dispatcher, pero podemos intentar adivinarla. En función de esta función, podemos deducir que el controlador tiene una lista de todos los métodos disponibles que se pueden invocar, y si se proporciona algún tipo de valor de índice, podría ser posible invocarlos.

1588818072753.png

El resultado final sería algo como
Porfavor, Acceder o Registrarse para ver el contenido de las URL!
. Tenga en cuenta que algunas funciones han cambiado de nombre desde que comencé a invertirlas antes. Veremos algunos interesantes en las siguientes publicaciones.

fn_ObtainKernelFunctions (0x140002A18)
La siguiente función es simple. Para continuar con la inicialización, el controlador necesita la dirección de algunas rutinas particulares:

1588818089426.png

Al hacer esto, pueden asegurarse de que esas funciones estén disponibles en la versión en ejecución de Windows y obtener un puntero a ellas. Solo necesitan almacenarlos en una variable y luego usarlos para llamar a cualquiera de esas rutinas convirtiéndolas en la definición de función adecuada. Puede detectar esto fácilmente también en la función de ensamblaje:

C++:
Porfavor, Acceder o Registrarse para ver el contenido de los códigos!

No hay mucha diferencia entre el código original y el resultado final. El código era algo obvio para esta función.

Próximos pasos
  • Analizar la función de envío (fn_DriverIOCTLDispatcher)
  • Análisis del registro de notificaciones y rutinas de devolución de llamada (fn_InitRegistrationNotifyAndCallbackRoutines y fn_RegisterCreateProcessNotifyRoutine)
Creditos
Niemand

Enlace original
Porfavor, Acceder o Registrarse para ver el contenido de las URL!

Twitter
Porfavor, Acceder o Registrarse para ver el contenido de las URL!
 
AdBlock Detectado

Lo sentimos, los anuncios son molestos!

Claro, el software de bloqueo de anuncios hace un gran trabajo al bloquear anuncios, pero también bloquea funciones útiles de nuestro sitio web. Para obtener la mejor experiencia en el sitio, deshabilite su AdBlocker.

He desactivado AdBlock    No, gracias