Matchmover - Tutorial by Kashmir

Traducción de ^[G]oLe[E]^

"Un corto, pero invaluable tutorial de un ex-SiEGE, colega mio. Solamente va para mostrar que un buen tutorial no necesita ningun code snippet cuando está empacado con información útil acerca de InstallShield & HASP cracking, digo que Aladino no esta en este esquema de envoltura gag#.mod que se vuelve un poco tedioso :-)". "Ligeramente editado por CrackZ".

Parte 1 : Crackeando el InstallShield

Localiza el chequeo en SoftICE con un bpx GetWindowTextA, siguiendo la entrada. Notaras cuando ira a través de algunos calculos y entonces ser chequeado contra algunos numeros, si es igual, retornara 1, de lo contrario, Cero. Este chequeo solo controla la activación del boton de Continuar. Usa algun password y cambia ese switch, entonces haz click en Continue, continua siguiendo el password. Pasaremos ese primer chequeo, y de nuevo el mismo tipo de comparación, si es igual salta, entonces notaras que el password es copiado y tirado en una rutina que consume mucho tiempo.

Desensambla esta rutina. Notaras que primero, el password toma XORed con una doubleword, es decir cada 4 bytes toma XORed con la misma DWORD. Entonces un archivo temporal (el archivo actual de instalación) toma bytes tratados inteligentemente con la llave resultante, en una forma simple: los bits bajo y alto, son intercambiados y el byte resultante es XORed con un Byte llave. Este procedimiento toma lugar desde que el archivo temporal es grande. El archivo temporal ¨desencriptado¨ es ahora chequeado por su firma : los primeros 4 bytes deberian leer MSCF, esto nos da de hecho que los primeros 4 caracteres del password son ISE2.

Ahora un simple criptoanalisis : incrementar la longitud del password hasta que veas partes reconocibles en el archivo temporal : esto pasara con una longitud de 5 y 10. Veras por ejemplo partes de la word como estas "isk1" "\Dis" "out,"etc. Si lo comparas con un archivo InstallShield empaquetado, notaras que contiene frases como Disk1\layout.bin etc. Así que está claro que la longitud del pass es 10 y ahora es facil reconstruir los caracteres perdidos.

Part 2 - Crackeando la HASP

La envoltura HASP chequea el SoftICE. Está versión solo chequea probando a abrir el NTICE driver. Así, cambia cualquier nombre en tu SoftICE (en todos los archivos) o fija pon un bpx CreateFileA, su primer golpe será tratar de abrir NTICE, cambialo a algo mas, p.e.CreateFileA debería retornar -1. La Envoltura HASP usa un tedioso esquema de encriptación ¨Piel de Cebolla¨ : está construido de pequeñas rutinas con nombre *.mod. Cada mod comienza usualmente desencriptando el siguiente .mod, entonces si es un mod funcional, hace lo que supuestamente hace (por ejemplo killice.mod, detecta SoftICE hasperr.mod cuida de mensajes de erro de la DoNgLe, hasp.mod contiene las rutinas de acceso a la DoNgLe etc.) o si es un mod no funcional, los pasos fluyen al siguiente mod, quiza disimulando el flujo un poco, usando la interrupción que la manipula (flujo usando INT 3 o instrucciones ilegales).

Nuestro trabajo es el siguiente, encontrar donde se desencripta hasp.mod, nota la rutina de desencriptación (imprimela) y sus argumentos. Las Rutinas de Desencriptación tienen como argumentos : offset (desde donde desencriptar), longitud (que tan largo es el mod a desencriptar) y un seed value (no estoy seguro, pero creo que esto quiere decir un valor sembrado, es decir, un valor default). No todas las rutinas de desencripción son rutinas, algunas son implementadas como un loop. Todas tienen la misma estructura, sin embargo, con algunos cambios menores.

Codifica está rutina de encriptación en tu lenguaje familiar, desencripta el the hasp.mod. Parchea lo que quieras parchear y encripta de nuevo (para la encriptación puedes tener que hace algunos pequeños cambios en la rutina de encriptación).

Para mamoe.exe trabaja así : bpx CreateFileA, cambiar NTICE en algo mas; ver dentro de la rutina que llamó CreateFileA, desplazarse un poco hacia arriba para encontrar la memoria que contiene la direccion del siguiente .mod (al principio de la rutina en la forma cmp [...],0 / jz ... Ahora fija un bpx en el comienzo de ese mod, chequear su nombre en la ventana de datos, estará al final de la rutina. Continua hasta que encuentres hasp.mod.

La mayoria de mods con el nombre gag#.mod son mods no funcionales. Usualmente hasperr.mod vendrá un poco antes de hasp.mod. Usualmente pongo el emulador HASP en un dll que he construido con un punto de entrada GetEnvironmentStrings, eso es justamente para ser capaz de parchearlo minimamente. Nota la desencriptación del programa principal, basado en la rutina HaspCode. Su algoritmo es conocido (descubierto por UCL del Empaquetado de Encripción HASP). Alguna memoria leida desde la DoNgLe puede ser usada para fijar algunas flags, en el caso de Mamoe.exe, las direcciones 18h & 19h, deberian estar en este caso 0 & FFFFh.

Kashmir (June 2000).


greenball.gif (835 bytes) Dongles greenball.gif (835 bytes) Return to Main Index


© 1998, 1999, 2000 Hosted by CrackZ. Kashmir 8th June 2000.
www.000webhost.com