TUTORIAL SOBRE EYESYS WINDOWS WORKSTATION 2.11W

En primer lugar dare las gracias a la persona que me envio este programa para examinarlo.

EyeSys , por lo que he podido ver es una herramienta util para opticos.

De hecho sin algun hardware de especialista este software es inutil.

Como era de esperar de una aplicacion de especialista se ha usado una proteccion del tipo Dongle ,

el programa data de 1994 ( lo que quiere decir que es anterior al SoftIce v3.x W32Dsm y posiblemente IDA ).

Con las herramientas que hay a dia de hoy no deberia haber mucho problema.

Sin embargo el programa esta en 16-bits y como se vera , implementa una proteccion basica

Anti-Debugging. No te dare ningun premio por poner un BPX al MessageBox,

Pero mirando hacia atras vemos que la funcion responsable del chequeo del Dongle

es importada desde una DLL ( Kecheck.dll ).

Se podria abrir ww.exe con W32dsm e invertir el salto responsable del MessageBox.

Pero en vez de eso usaremos el SoftIce , un bpio -h 378 rw funcionara pero por mas F-12 que pulses

no llegaras a donde fue llamado desde la aplicacion ,

recuerda que el objetivo sera parchear la DLL y no el ejecutable.

Siendo una aplicacion en 16-bits tambien nos traera dolores de cabeza,

si ponemos demasiados Bpx en un trozo especifico de codigo en modo protegido

el valor del Segmento de Codigo (CS) es muy importante, bajo 32-bits ,aparte de circunstancias

excepcionales podemos asumir CS como una constante.

Consideremos este trozo de codigo:

:0010.3206 PUSH BX <-- No se puede poner un Bpx aqui facilmente.

:0010.3213 CALL KECHK.KECHECK <-- llamada a la DLL responsable.

El truco evidentemente es el uso de la tecnica de parche temporal de la INT-3

Nosotros reensamblaremos entonces el " push bx " en tiempo de Debug.

Alcanzamos este codigo e intentamos tracear KECHEK...problemas,

" SoftIce Break due to embedded INT-3" se repite hasta el infinito.

No puedes tracearlo, por supuesto,podemos sortearlo facilmente

considera este truco basico antidebugging como en los dias cuando los crackers usaban

Turbo Debugger/SoftIce para Windows 3.1

start:

MOV CX, 0200h <-- CX usado para el loop.

MOV SI, 0100h <-- SI contador. LODSB <-- cargar Byte.

INT 3 <-- Stop si cualquier debugger esta activo.

CBW ADD BX,AX LOOP start <-- y frustrar al cracker volviendo al loop.

Como ya debes saber , los debuggers insertan una INT-3 (opcode CC) en el codigo del programa,

que actua como disparador del bpx. En este codigo cualquier debugger saltara

en cada reiteracion del bucle 2 bucles como este te molestaran bastante en tu tarea.

Por supuesto SoftIce puede facilmente desconectar este mecanismo usando I3HERE.

Tan pronto como tracees en la llamada a KECHEK desconecta todas las INT-3 con I3HERE OFF.

Sin embargo esto no sera suficiente.

:0001.01BC MOV BH,00 <-- Flag.

:0001.01BE MOV CX,0002 <-Numero de words a copiar de p-mode a r-mode stack.

:0001.01C1 LES DI, [BP-22]

:0001.01C4 MOV AX,0301 <-- R-mode (procedimiento con "far return frame")

:0001.01C7 PUSH WORD PTR [BP-10]

:0001.01CA PUSH WORD PTR [BP-12]

:0001.01CD INT 31 <-- Executa esto en SoftICE y se acabo el juego.

Cambiaremos esta INT-31 con NOP´s, no es muy elegante pero si efectivo.

Deberias ser capaz de ver que nuestro objetivo es poner en KECHEK los puntos deseados a cero.

La manera mas simple para ver donde ocurren malos movimientos es en la ventana watch.

Considera este codigo:

:0010.32A1 CALL KECHK.KECHECK <-- Chequeo Dongle Key.

:0010.32A6 MOV [BP-0A], AX <-- El valor de AX es importante

:0010.32AC MOV AX, ES:[BX] <-- Como en [BP-04].

:0010.32AF MOV [BP-10],AX <-- guardar ax.

Tras estos ajustes,los punteros a BP-06/08 & 0A seran comparados con cero

cualquiera de ellos siendo cero resultaran en un salto bueno.

Siguiendo el salto , veremos otros 3 chequeos esta vez usando el valor de AX

y punteros a BP-0C/0E (de nuevo los ceros son deseables)

Ahora parchearemos ww.exe con una INT-3 justo antes de la llamada final a KECHEK

(recuerda nopear la int-31 en kechk.dll) esto es suficiente para tener un cero en los tres chequeos

a BP-06 sin embargo en BP-0C/0E tenemos FFFF lo cual no deseamos,

Traceamos KECHEK y vigilamos estos punteros. Pronto veras que esta llamada especifica no es la

responsable de estos valores (ya estaban a FF antes de empezar)

Tendremos que obtenerlos antes,como puesdes haber imaginado la primera llamada a KECHEK

pone BP-0C y la segunda BP-0E el codigo es muy similar y usa el valor de AX

el cual es actualmente ES:[BX] Hay sin embargo un pequeño problema,

antes incluso de la llamada a KECHEK , ES:[BX] contiene FFFF asi pues buscaremos

una instruccion para alterar esto, He echado un vistazo a todas las Subrutinas llamadas por KECHEK

y no he encontrado nada que pueda servir para desempeñar esta "instruccion magica"

Esto significa que tendremos que parchear ww.exe despues de todo.

Sugerencias para el Patch :

Reemplazar los tres MOV AX,ES:[BX] con 66 33 C0 (XOR AX,AX)

direcciones : 0010.321E , 0010.3265 , 0010.32AC

Haciendo estos cambios podremos lanzar el programa.

 


Dongles Return to Main Index


© 1999 CrackZ. 7th March 1999.
www.000webhost.com