Miscellaneous

lunes, 12 de septiembre de 2016

Técnicas antidepuración - PEB.NtGlobalFlag

Para continuar la serie sobre técnicas antidepuración, en esta entrada hablare acerca de la técnica que usa otro campo de la estructura PEB, más específicamente el campo NtGlobalFlag (offset 0x68).

Este campo, al igual que PEB.BeingDebugged (offset 0x02), cambia su valor cuando el programa es cargado desde un depurador, es decir, cuando el programa no esta siendo depurado, normalmente su valor es 0x0, mientras que cuando es cargado desde un depurador, su valor cambia a 0x70, valor que se explica por el establecimiento de las siguientes banderas con sus respectivos valores:

FLG_HEAP_ENABLE_TAIL_CHECK -> 0x10
FLG_HEAP_ENABLE_FREE_CHECK -> 0x20
FLG_HEAP_VALIDATE_PARAMETERS-> 0x40

Si observas, la suma de los valores con los que se establecen estas banderas es 0x70, que es el valor que adquiere PEB.NtGlobalFlag cuando el programa esta siendo depurado. Entonces, para saber si un programa esta dentro de un depurador usando PEB.NtGlobalFlag, antes se debe hacer una comprobación de su valor con 0x70, si es igual, entonces esta siendo depurado, en caso contrario, no lo esta, en esencia es el mismo funcionamiento que emplea la técnica IsDebuggerPresent(), la única diferencia es que ahora windows no nos proporciona una función para acceder directamente a PEB.NtGlobalFlag, por lo que debemos hacer uso de un código parecido al siguiente:



O también alguno de estos, que desde mi punto de vista, son la mejor opción si eres una persona que se interesa en el mundo del reversing y lenguaje ensamblador:


Pero bueno, sea cual sea la forma en que implementes esta técnica, debo advertirte, evitarla es igualmente fácil que evitar la técnica IsDebuggerPresent(), si observas, basta con manualmente cambiar el valor de la flag NtGlobalFlag y setearlo a 0x0, así, si el programa se carga desde un depurador, funcionara de igual manera que como si estuviera fuera de este.

pero manten la calma, apenas estamos en la segunda técnica antidepuración, esto ira aumentando de complejidad e iremos conociendo nuevas técnicas en futuras entradas. 

Por ahora, estudiar, comprender e intentar hacer bypass de estos códigos puede ser un buen ejercicio para reforzar lo leido... Sin más que decir, manos a la obra y happy hacking! :).

No hay comentarios.:

Publicar un comentario