ॐ॒॑॓॔='ەۖۗۘۙۚۛۜ۞ۣ۟۠ۡۢۤ♞98ecf2b˿̴̵̶̷̸̡̢̧̨̛̖̗̘̙̜̝̞̟̠̣̤̥̦̩̪̫̬̭̮̯̰̱̲̳̹̺̻̼͇͈͉͍͎̀́̂̃̄̅̆̇̈̉̊̋̌̍̎̏̐̑̒̓̔̽̾̿̀́͂̓̈́͆͊͋͌̕̚ͅ͏͓͔͕͖͙͚͐͑͒͗͛ͣͤͥͦͧͨͩͪͫͬͭͮ͘͜͟͢͝͞͠͡';alert( ॐ॒॑॓॔)
Mostrando las entradas con la etiqueta Debugging. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Debugging. Mostrar todas las entradas
sábado, 7 de enero de 2017
Reversing 0x5+0x2-Paso de argumentos a función en x86_64.
Etiquetas:
assembly,
Debugging,
disassembly,
ensamblador,
low level programming,
radare,
reversing,
x86_64
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! :).
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! :).
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.
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!.
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!.
Suscribirse a:
Entradas (Atom)
