En mi anterior empleador utilizamos un componente de terceros que, básicamente, era solo una DLL y un archivo de encabezado. Ese módulo en particular manejó la impresión en Win32. Sin embargo, la compañía que hizo el componente fue bankcrupt, así que no pude reportar un error que encontré.¿Cuál es tu truco favorito contra la depuración?
Así que decidí corregir el error y lancé el depurador. Me sorprendió encontrar el código anti-depuración en casi todas partes, lo usual IsDebuggerPresent
, pero lo que me llamó la atención fue la siguiente:
; some twiddling with xor
; and data, result in eax
jmp eax
mov eax, 0x310fac09
; rest of code here
A primera vista me acaba de caminar sobre la rutina que se llama dos veces, luego las cosas simplemente se fue plátanos. Después de un tiempo, me di cuenta de que el resultado de los giros cortos siempre era el mismo, es decir, el jmp eax siempre saltaba directamente a la instrucción mov eax, 0x310fac09
. Analicé los bytes y allí estaba, 0f31
, la instrucción rdtsc
que se usó para medir el tiempo pasado entre algunas llamadas en la DLL.
Así que mi pregunta a SO es: ¿Cuál es su truco favorito contra la depuración?
En mi opinión, realmente no quiero que se ejecute código en mi sistema que haya hecho cosas para evitar la depuración. Muestra que no se puede confiar en el autor del código. – bruceatk
Estoy de acuerdo con bruceatk, especialmente para las DLL y otros componentes que uso para compilar mi aplicación. Me preocupan menos las aplicaciones completas que uso. No me sorprende que la compañía se haya bancarizado :) - sería mejor dedicar tiempo a producir un buen código que protegerlo. – Michael
@bruceatk para que no ejecute Windows? El sistema operativo en sí contiene algunos trucos anti-depuración para ayudar a ocultar algunos de sus mecanismos de protección más interesantes. – mrduclaw