Miscellaneous

martes, 6 de septiembre de 2016

Técnicas antidepuración - IsDebuggerPresent()

La técnica más simple para comprobar si un programa se encuentra dentro de un depurador, es decir, esta siendo depurado, es aquella que realiza una comprobación al estado de la bandera BeingDebugged, dicha bandera se encuentra en el PEB (Process Environment Block) y tiene el offset 0x02.


En sistemas windows se nos proporciona vía kernel32.dll la función IsDebuggerPresent() para checar el estado de esta bandera, el código que se muestra debajo es un ejemplo de como usar kernel32!IsDebuggerPresent() para verificar si el programa se encuentra dentro de un depurador:


Se puede notar que la función nos va a retornar un valor Booleano, es decir,  si es 1 (TRUE) significa que el programa fue cargado desde un depurador, si es 0 (FALSE) significa que el programa esta corriendo fuera de un depurador.

Otros códigos equivalentes a lo anterior pueden ser los siguientes:


La simpleza de esta medida antidepuración la convierte hoy en día en una de las medidas menos efectivas para tratar de evitar a un depurador ya que basta con modificar manualmente la flag PEB.BeingDebugged con el valor 0x00 para evitarla.

Pero bueno ya en otras entradas abordare técnicas más sofisticadas para detectar depuradores, por ahora trata de entender bien el funcionamiento de los códigos proporcionados anteriormente y happy hacking!.

No hay comentarios.:

Publicar un comentario