En el VCL viene una referencia a un articulo sobre
antidebug, si no es el mismo te agradecera que, si lo
consigues, lo pongas por aqu.

Como veo que buscais tcnicas anti-debugger, yo tengo algunos, he aqu un
resumen de algunas tcnicas y metodos para evitarlas. :-))

===8<==========================================
1. Preventive actions:
----------------------
1.1. Interrupt disable:
   1.1.1. Hardware masking of interrupt:

       Deshabiltar la IRQ1 del teclado (port 21:=port 21 or 2)

POR QU NO:  intil contra Soft-ICE.

   1.1.2. Software masking of interrupt:

       Poner vectores de interrupcin que no usas a cero (ej,
       int 3 y dems).

   1.1.3. Vector manipulation

       Usar los vectores int 01 e int 03 para datos del programa (ej,
       para una rutina de desencriptacin).

   1.1.4. Interrupt replacement

       Copiar vectores de interrupcin que usas (ej, int 16  int 21) a
       los vectores int 01 e int 03 y usar stos en lugar de aquellos.

       (adems el que int 03 sea un cdigo de un slo byte, "cc", hace
       que sea difcil sustituirlo por la int xx original, de dos bytes
       "cd xx").

POR QU NO:  A los depuradores V86 no les afecta.

1.2. Time watch:

       Poner un bucle que espera a que cambie el contador de tiempo del
       DOS, "util contra programas como el TD que deshabilitan todas las
       interrupciones salvo cuando se est ejecutando el programa"
       "Sirve contra RUN, no TRACE".   (mi no comprender :-?  :-?)

POR QU NO: Cuando se "cuelga" en el bucle, interrumpes, ves lo que pasa,
            y machacas el bucle con NOPs.

1.3. Fool the debugger:

       Saltar dentro del cdigo de una instruccin que a su vez contiene
       la instruccin que quieres ejecutar:

       104:  eb 02           jmp 108
       106:  c6 06 e6 21 00  mov byte ptr [21e6],90
     ( 108:        e6 21 90  out 21, al / nop )

POR QU NO: le dices que te desensamble a partir de cs:ip.

1.4. Check CPU Flags:

       "Bueno contra depuradores en modo real."
       Pones la TF (bit ocho de flags) a 0 en un punto del programa y
       luego la compruebas en otro punto. Si est a 1 ests bajo un
       depurador.

POR QU NO: intil en V86

1.5. Cause debugger to stop execution:

       Espolvorear int 3 en el cdigo, sobre todo dentro de bucles.

POR QU NO: Es fcil pisar la int 03 con un NOP. A muchos depuradores
            se les puede indicar que no paren ante una int 03.

1.6. Halt computer using stack:

       Apuntar ss:sp a un trozo de cdigo que no utiliza la pila.
       Si se depurando, el depurador que no utilice su propia pila
       machacar el cdigo.

POR QU NO: Los depuradores s utilizan su propia pila.

1.7. Halt TD386 V8086 mode:

       TD386 no usa int 0 para la divisin por cero. TD386 detecta un
       fallo de divisin y aborta el programa, mientras que sin TD386
       basta con apuntar la int 0 a la instruccin siguiente a la
       divisin por cero para recuperar el control.

POR QU NO: No es verdad. Eso no le hace nada al TD386.

1.8. Halt any V8086 process:

       Apuntar el vector int 0d al cdigo y causar una excepcin de
       proteccin. El programa funcionar en modo real, pero no en
       V8086.

POR QU NO: Es muy fcil cambiar el cdigo ilegal y adems te cargas la
            compatibilidad con muchos sistemas.

2. Self-modifying code:
-----------------------

2.1. Encryptive/decryptive algorithm:

       Desencriptas un cdigo antes de ejecutarlo. Si el depurador ha
       metido un byte int 03 al desencriptarlo se cambiar por basura.

           100     mov bx, 0971
           103     mov di, 0110
           106     xchg ax,cx
           107     xchg ax,cx
           108     xor byte ptr [cs:di],97
           10c     inc di
           10d     dec bx
           10e     jnz 106
           110 07  pop es    ; cambiar a 90 NOP
           111     pop es


2.2. Self-modifying code:
   2.2.1. Simple self-modification:

       Modificar el cdigo que vas a ejecutar para borrar los int 03 que
       ponga el depurador:

          100         call 0107   ; queremos saltarnos esta subrutina
          103 cd 20   int 20      ; aqu el depurador pone int 3
          105         int 21
          107         mov [word ptr 103],4cb4 ; "mov ah,4c"
          10d         ret

POR QU NO: Depuradores V86 te dejan usar breakpoints hardware, sin
            utilizar int 03. (Tanto para 2.1 como para 2.2.1)


   2.2.2. The Running Line (self-decrypting):

       < Este lo puse antes :-) >


Crditos:

ANTIDEPURADOR:
                            Anti Debugging Tricks
                                     By:
                                  Inbar Raz
                 Assistance by Eden Shochat and Yossi Gottlieb
                               Release number 5

                                   - - - -
ANTIANTIDEPURADOR ("POR QU NO"):

        Sun 24 Jan 93
        By: Michael Forrest
        Hi.  Here's release 1 of the Anti-Anti Debugging Tricks article.
