[TUTORIAL] Reversing del controlador XignCode3 - Parte 4.1 - Registro de rutinas de notificación y devolución de llamada

  • 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


262
Me Gusta
126
Temas

c0de

MOV EAX, EDX
Top Publicador Del Mes
Registrado
19 Abr 2020
Temas
126
Mensajes
242
Ubicación
Localhost
Mejores respuestas
0
1588822783328.png
En primer lugar, si solo estás entrando en este tema, te recomiendo que
Porfavor, Acceder o Registrarse para ver el contenido de las URL!
Porfavor, Acceder o Registrarse para ver el contenido de las URL!
de
Porfavor, Acceder o Registrarse para ver el contenido de las URL!
que te dará mucha información sobre este Anti-Cheat.

Porfavor, Acceder o Registrarse para ver el contenido citado!

Como breve resumen les dejo aquí el enlace a las publicaciones anteriores:
Cuando estábamos analizando DriverEntry, identificamos dos funciones que eran responsables de diferentes tipos de registros de devoluciones de llamada ( fn_InitRegistrationNotifyAndCallbackRoutines y fn_RegisterCreateProcessNotifyRoutine ). Los mencioné pero no profundizamos en lo que hacen.

¿Por lo que pasaremos?
  • Identificar mutex y spinlocks
  • Aprenda cómo se registran las rutinas de notificación utilizando la API win
  • Aprenda cómo se crea
    Porfavor, Acceder o Registrarse para ver el contenido de las URL!
  • Aprenda cómo el controlador maneja los diferentes estados de error que pueden aparecer durante la ejecución.
Introducción
Dado que el objetivo es analizar el controlador y darle la información que necesita para aprender el resto por su cuenta. No voy a profundizar en lo que son las rutinas de notificación y devolución de llamada. Aquí tienes algunos enlaces interesantes:
Lo más importante que debe comprender es el hecho de que los Anti-trampas necesitan controlar lo que está sucediendo en su sistema. Por lo tanto, van a registrar estas llamadas rutinas de notificación y devolución de llamada. Esto les permitirá ejecutar operaciones previas y posteriores cuando se desencadena un evento, por ejemplo, se ha creado un nuevo proceso, se ha cargado una nueva DLL, etc.

fn_InitRegistrationNotifyAndCallbackRoutines (0x140003550)

1588822974571.png

Hay algunas funciones que inicializan variables, spinlocks y matrices que aún no hemos visto. Todas esas variables se usan en múltiples funciones del controlador, y lo que generalmente sucede es que descubriremos el significado de esas (si alguna vez lo hacemos) mientras revertimos otras funciones que aún no hemos visto.

Como las funciones son cada vez más grandes y complejas, evitaré explicar algunas cosas básicas sobre el desarrollo de controladores, como las inicializaciones de mutex, las asignaciones, etc.

Comencemos con esta función: puede ver la función original aquí (
Porfavor, Acceder o Registrarse para ver el contenido de las URL!
Porfavor, Acceder o Registrarse para ver el contenido de las URL!
y
Porfavor, Acceder o Registrarse para ver el contenido de las URL!
)
. Y
Porfavor, Acceder o Registrarse para ver el contenido de las URL!
el resultado final de la inversión (trata de no consentirte). Como siempre, tómate tu tiempo para tratar de entenderlo por ti mismo.

Al comienzo de la función tenemos algunas inicializaciones de búfer y mutex. Todavía no sabemos para qué son esas variables, pero podemos reconocerlas debido a cómo se utilizan esas variables; por ejemplo, como parámetro para funciones relacionadas con mutex como KeInitializeMutex o códigos de operación de ensamblaje como lock xadd :

1588822996076.png

Después de eso, encontraremos la primera función interesante sub_140003C38 , que decidí llamar j_fn_ConfigWindowsVersion . Verá esta función invertida en la siguiente publicación. En pocas palabras, la función identifica la versión actual de Windows e inicializa una serie de variables de desplazamiento con información sobre algunas estructuras de kernel particulares. Si esta función no falla, la ejecución continúa:

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

Vamos a ignorar fn_InitWeirdVariables_ y fn_InitWeirdVariables2_ , dado que esas funciones solo inicializan algunos spinlocks y variables extrañas que el controlador usa más adelante. No estamos interesados en eso por ahora. En realidad, si sabes lo que están haciendo en estas líneas, házmelo saber, porque no sé qué tipo de hechicería están lanzando (creo que es una forma de generar un GUID para cada proceso, pero quién sabe):

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

Después de eso, se inicializan dos variables NTSTATUS : status_PsSetCreateProcessNotifyRoutine y status_PsSetCreateProcessNotifyRoutineEx. Vamos a ver que si falla el primer intento de registrar NotifyRoutine usando PsSetCreateProcessNotifyRoutineEx , van a usar estas variables para controlar el flujo de ejecución y hacer un segundo intento usando PsSetCreateProcessNotifyRoutineEx .

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

La dirección de PsSetCreateProcessNotifyRoutineEx se recupera y se almacena en una variable. Si este valor variable no es NULL, se realiza el primer intento:

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

Podemos ver que se llama a
Porfavor, Acceder o Registrarse para ver el contenido de las URL!
. En el primer parámetro, envía la rutina ( fn_CreateProcessNotifyRoutineExImp ) para que se ejecute siempre que se cree o salga un nuevo proceso; y en el segundo parámetro, establece que la Rutina de notificación debe registrarse en lugar de eliminarse. Como puede ver, la misma función se utiliza para crear y eliminar una rutina de notificación.

Avanzando un poco más en la función, si el primer intento falla, veremos que
Porfavor, Acceder o Registrarse para ver el contenido de las URL!
se llama como un segundo intento:

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

Nuevamente, hemos identificado otra de las rutinas de devolución de llamada: fn_CreateProcessNotifyRoutine.

fn_CreateProcessNotifyRoutine y fn_CreateProcessNotifyRoutineExImp

Si verificamos fn_CreateProcessNotifyRoutineExImp y fn_CreateProcessNotifyRoutine , notaremos que ambos son envoltorios de las rutinas reales:

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

Los parámetros recibidos por
Porfavor, Acceder o Registrarse para ver el contenido de las URL!
se explican en la
Porfavor, Acceder o Registrarse para ver el contenido de las URL!
. En base a eso, podemos identificar cómo esta función decide si se invoca la devolución de llamada debido a que se está creando o eliminando un proceso.

fn_Analyze_CreateProcessNotifyRoutine y fn_Analyze_ExitProcessNotifyRoutine son grandes funciones que analizaremos más adelante

Volver a fn_InitRegistrationNotifyAndCallbackRoutines
Finalmente, se intenta el último registro de devolución de llamada:

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

Sin embargo, como puede ver, si registerCallbackFunction falló, la NotifyRoutine creada anteriormente debe eliminarse antes de salir. En ese caso, establecen _RemoveRoutine en 1 y luego vuelven a llamar a PsSetCreateProcessNotifyRoutine para eliminarlo.

fn_RegisterCallbackFunction se revertirá en las siguientes publicaciones, así como en las otras dos funciones.

Próximos pasos
  • Parte 4.2 - Administrar versiones de ventanas
  • Parte 4.3 - Uso de ObRegisterCallbacks
  • Parte 4.4 - Análisis de las rutinas de notificación
Creditos
Niemad

Enlace origen
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