[RELEASE] Anti Debugging Tricks #7 – DbgBreakPoint

  • Hola Invitado ¿Quieres conversar con todos los usuarios de GamerzHacking?, No esperes mas y entra al canal de Discord dando clic AQUI
  • Hola Invitado, hemos decidido no subir mas videos de Game Hacking a la mierda de YouTube, mas informacion AQUI. Nuestro nuevo canal de videos ahora es COCOSCOPE.

c0de

Administrador
Miembro del equipo
1 Nov 2015
1.240
306
83
29
Lima
gamerzhacking.com
1570909839454.png
Le ha sucedido esto a usted? Estás feliz jugando un juego y piensas: "Me pregunto qué está pasando debajo del capó aquí, voy a adjuntar un depurador y lo descubriré". En lugar de una buena ejecución pausada, recibe un mensaje como este:

1570909854718.png

Mejor adjunte x64dbg y descubra lo que está sucediendo:

1570909867058.png

¿Qué demonios está pasando aquí? Bueno, para comprender exactamente lo que está sucediendo, necesitamos entender un poco cómo funciona la depuración en Windows.

Acerca de NTDLL.DbgBreakPoint

Para ver qué debería suceder, normalmente adjunte su depurador a un programa que ya se está ejecutando, por ejemplo notepad.exe Notará que después de que el depurador se haya inicializado, lo dejará en NTDLL.DbgBreakPoint.

Esta función es esencialmente dos instrucciones INT 3 (0xCC) y RET (0xC3). Cuando un programa depurador solicita acceso de depuración a un programa, se realizan un montón de comprobaciones, se configuran las estructuras de datos y finalmente el sistema operativo deja caer el programa host aquí.

La instrucción INT 3 esencialmente actúa como un freno que permite al depurador tomar el control del programa host e iniciar el proceso de depuración. Sin embargo, algunas personas astutas descubrieron que si sobrescribían este byte 0xCC con NOP (0x90), el freno nunca se aplicaría y el programa host nunca se detendría.

Como lo hacen

La versión más simple de este truco es sobrescribir 0xCC con 0x90 o 0xC3. Esta no es la única implementación que he visto, pero es la más básica para explicar cómo funciona.
Observe lo siguiente:

C++:
Por favor, Acceder o Registrarse para ver el codigo.
Con la instrucción sobrescrita, ¿parece que se ha perdido toda esperanza?

No exactamente

Si bien este truco es bastante bueno para proteger un proceso que ya se está ejecutando, tiene algunas debilidades explotables:
  • Solo protegerá a los depuradores de unirlos a un proceso, si el depurador carga el proceso, esta subrutina nunca se llama y el depurador aún obtendrá el control. A menos que el proceso tenga otras protecciones, la forma más fácil de evitarlo es abrir el archivo desde el disco.
  • Como esta subrutina siempre se encuentra en NTDLL.DLL + 0x6B1D0, simplemente podemos escribir un programa para abrir el proceso y llamar a WriteProcessMemory en esta dirección y restaurar la instrucción INT3.
  • Para una mayor pereza, podemos usar una herramienta de edición de memoria, ir al desplazamiento requerido y restaurar la instrucción INT3.
Creditos
timb3r

Post Original
Por favor, Acceder o Registrarse para ver el contenido de las URL!