Karpoff Spanish Tutor

Programa: Visual Zip Password recorvery processor multicomputer V4.0 Final Win9x/NT/2000


 

PROTECCION: Molesta Nag cada 10.000.000 de password comprobadas y luego cada 10.000
Descripcion: Programa para sacar las password de los zip, exe protegidos, permite usar varias computadoras asi como el uso de diccionarios y otros metodos.
Dificultad: Facilon
DOWNLOAD: http://ftechsoft.hypermart.net
Herramientas: W32Dasm , Softice o TRW2000 , Editor Hex y Apis32
CRACKER: karpoff   FECHA: 24/04/2000


 

    INTRODUCCION
Tutorial de Crackeo Para Newbies desde Cero        ## PROYECTO 17 ## 

                        
Hola Gentes !! despues de un par de meses sin escribir nada hoy me apetece y por peticion de un amigo me dispongo a darle un repasillo al Visual zip password, los que habeis seguido mis manuales sabreis que ya nos enfrentamos a este programa en su version 3.12, ahora estamos en la v4 y no tiene nada que ver :-), si recordais la version 3.12 estaba comprimida, protegida contra debugger y desensablado y estaba limitada a no poder buscar password mayores de 5 digitos en esa ocasion hicimos un loader. Ahora veamos que nos cuenta la version 4. 


 
 

         AL ATAKE

  Como siempre fundamental prepararnos el terreno para tener todo a mano, hacemos una copia de vzprp.exe con el nombre cvzpre.exe y cargamos nuestro debugger softice o TRW2000 (da igual), ahora nos haremos con toda la informacion posible sobre la victima, existen muchos programas que nos dan informacion sobre el encabezado PE y el compilado de la victima yo uso el File Analicer, solo tenemos que pinchar con el mousse una copia de la victima osea cVzprp.exe y arrástrarla sobre fa.exe el resultado es:

fa.GIF (10717 bytes)


A simple vista ya sabemos que vzprp.exe no esta empakado y no esta protegido contra desensamblado, de estar protegido tendriamos en la seccion CODE, Flags un valor de C0000040 (para mas informacion sobre encabezados PE leer los trabajos de nuMIT_or explica paso a paso y detalladamente todo lo que veis en la imagen.)

Bueno ya sabemos algunas cosillas, no tendremos ningun problema a la hora de desensamblarlo (por lo general) ahora debemos averiguar que limitaciones tiene la victima, solo con leer en la ayuda del programa su autor nos dice ya cuales son las restricciones que segun dice son: un horrible NagScreen cada 1.000.000 de password en modo brute force y en otros modos cada 100.000 password, por si acaso lo comprobamos no valla ha ser que sea un pequeño engaño para despistarnos a la hora de crackearlo, y bueno yo por mas pruebas que hago me escupe el nag cada 10.000.000 de password en brute force y cada 10.000 password en otros modos Mnnnn que mariconcete jeje.

Como atacamos a este programa?? aparentemente no parece que sea muy dificil no esta comprimido, no tiene proteccion antidasm y tampoco antidebugger (lo se, por que tengo el Softice cargado y puedo ejecutar la victima sin ningun problema)asi que veamos si encontramos en las String Ref algo interesante, procedamos a desensamblarlo con W32Dasm, ya esta ?? pues guardalo como proyecto para no tener que desensamblarlo de nuevo, pulsamos sobre [String-Ref] y no veo nada interesante, vaya putada, se me ocurre tracearlo con Apis32 , este programa da mucha informacion y suele ahorrar mucho trabajo. Ya os habreis dado cuenta de que nuestra victima nos da la opcion de registrarnos mediante el tipico Name / Serial, asi que igual guarda en el registro de Windows la informacion del registro si es asi Apis32 nos dara informacion sobre ello, ejecutamos Apis32 y cargamos vzprp.exe como lo que nos interesa es ver que hace en el registro de Windows borramos todas las apis que tengamos para monitorear en apis32 y metemos solo las que tienen que ver con el registro de Windows, que como lo hago ?? veamos un gif de Apis32:

apis32.GIF (10635 bytes)

Para borrar todas las apis que hay en la ventana pulsamos el boton Del all ya tenemos la ventana en blanco, sin ninguna api, ahora tenemos que meter las correspondientes al archivo Advapi32.dll que es el encargado de gestionar las apis basadas en el reg de Windows, pulsamos Add y nos dara a elegir entre algunos archivos.fnl seleccionamos advapi32.fnl y pulsamos la opcion Add all y ya tenemos agregadas todas la apis, tambien podemos agregarlas de otra forma pulsamos la opcion Imports y veremos todas las apis que manejara nuestra victima podemos agregarlas una a una :) pero creo que es mas comoda la primera opcion, ahora pulsamos Run y veamos que ocurre cuando se este ejecutado vzprp.exe intentamos registrarnos mediante Help Register y nos escupe el mensaje de que los datos no son validos, ahora veamos la ventana del apis32 se aprecia claramente que solo toca el registro de Windows al iniciarse el programa asi que antes de cerrar nada pulsamos en save log para guardar los eventos creados hasta ahora, los demas no nos importan y cerramos todo el apis32 y vzprp.exe, ahora editemos el archivo vzprp.log que ha creado Apis32 en el directorio donde tenemos intalada la victima, entre todo lo que hay lo unico que me parece algo   interesante es:

log.GIF (10812 bytes)

son estas lineas que cuando el programa se inicia parece que chekea en el registro si estamos o no registrados, fijaros en esta ultima linea donde RegQueryValueExa Chekea "Key" el sitio dode podria estar la clave de registro si seriamos usuarios registrados como tenemos la direccion de memoria donde ocurre esto vallamos al W32dasm e intentemos modificar codigo para que reciba el valor contrario al que esta recibiendo de "Key" como se ve, la direccion de memoria es 0047522E veamos que encontramos en ella, y si os fijais es una direccion que se repite bastante en el log (igual sacamos algo interesante :)) bueno pues buscamos y encontramos:

Wdas1.GIF (3575 bytes)
aqui tenemos la api y su correspondiente codigo, la direccion que hemos buscado nos muestra una llamada (call 00406740) pulsemos sobre [Call] y veamos que hace:
Wdas2.GIF (1350 bytes)
Aqui lo no hace mas que saltar a un valor lejano y hacer algunas operaciones en advapi32.dll y retorna enseguida asi que vamos a ver que hace la siguiente llamada (call 00474fac) nos situamos encima y pulsamos sobre [Call] :

Wdas3.GIF (1671 bytes)
Aqui es donde podemos manipular e invertir el valor de que recibe de "Key"  en esta instrusión cmp eax,000001 pone a 1 el flag con lo que hace que jne 00474fb4 se ejecute osea que salta a esa direccion y evita el retorno (ret) que le sigue, bueno pues invertimos el salto para ver que pasa (aclaracion, este proceso no es mas que una valoracion para ver como y por donde podriamos atakar a el programa) tenemos que cambiar 00474faf 7403 jne 00474fba por 00474faf 7503 je 00474fba para hacerlo vamos a nuestro editor hexadecimal y mediante el offset de esa instruccion que es 743af localizamos la instruccion en valores hexadecimales 7503 B001 cambiamos por 7403 B001 salvamos y probamos el resultado (recordare que estas modificaciones las hacemo en una copia de vzprp.zip) redobleeeeee ejecucion y..... VaYA !! el mensaje de Unregistered version! que canta nada mas ver el programa a desaparecido y en su lugar vemos System messages, es una buena señal probemos a hacer alguna prueba, pero ohh todo sigue igual, que coño hacemos ahora bueno de momento dejamos los cambios que hemos hecho por lo menos ya no canta tanto el mensaje rojo ese y el programa funciona igual osea que algo hemos adelantado je hay que ser optimistas :).

Cambiando la tactica, sabemos que cada 10.000.000 de password sale el Nag no? pues pasemos a hexadecimal ese numero y rastreemos en busca de la instruccion que que chekea el asunto, 10.000.000 en Hexadecimal es = 989680 haber si tenemos suerte y encontramos coincidencias, metemos el numero en la opcion buscar (la linterna) Bien !! tenemos suerte y encontramos la primera, ademas tiene toda la pinta de estar hay para hacer esa comprobacion :)

Wdas4.GIF (2023 bytes)

Y tenemos un bonito salto que si queremos la puede evitar jeje pues no se hable mas y adelante convirtamos ese condicional a un incondicional ousease jne por jmp el cambio a realizar (para los que no os empapais mucho todavia) 

:00484DCA 0F85E5000000 jne 00484EB5  por :00484DCA E9E6000000 jmp 00484EB5

Que como se que el valor E9E6000000 Corresponde a un salto incodicional a la mima direccion de memoria (00484EB5) que nuestro :00484DCA 0F85E5000000 jne 00484EB5 , bueno en casi todos mis manuales lo explico asi que este por se el nº17 no lo explicare, si alguien tiene dudas que consulte los anteriores, creo que en casi todos esta explicado. Bueno a lo que vamos metemos la direccion del offset 841CA en el editor hexadecimal y veremos 0F85 E500 0000 lo cambiamos por E9E6 0000 0090 Que que pinta ese 90 puesto hay?? pos muy facil tenemos que sustituir 6 bytes pero al cambiar el salto a un salto incondicional este solo se representa con 5 bytes entonces lo que hacemos es anular el sexto. Bueno una vez realizados los cambios probemos, hacemos una prueba y OK el Nag que escupia cada 10.000.000 de passwords ya no es un problema jeje. Ahora seria igual de facil localizar la rutina que chekea que salga el nag cada 10.000 pasword, seria lo mismo pasar a hexadecima 10.000 (que son = 2710) y buscar las posibles coincidencias, pero ojo 2710 es una cifra que nos la vamos a encontrar muchas veces, por que la busqueda no va a mostrarnos solo las coincidencias de la instruccion relacionada, sino que nos va ha mostrar todas esto incluye direcciones de memoria etc. pero esto no es ningun problema ya que es bien facil distinguir cual es solo tenemos que descartar las que aparezcan en direcciones de memoria y buscar las que coincidan con el valor de una instruccion (push 00002710 o Mov xxx,00002710 etc.) pero eso que el valor sea exacto a 2710, bueno pues a partir de aqui si quieres puedes seguir por este camino o podemos cambiar la tactica e ir a por algo mas seguro, Me explico.

Sabemos que cada cierto numero de comprobaciones saca un nag, nosotro hemos manipulado la instruccion que chekea la comprobacion de 10.000.000 de password, pero tiene que haber una instruccion encargada unicamente de que salga el nag y que se pueda modificar sin necesidad de que afecte a otras instrucciones, asi que busquemos esa instruccion y veamos de que va, sabemos que esa instruccion esta relacionada con el salto que hemos manipulado no?? pues solo tenemos que tracearla paso a paso con nuestro debugger y observar en que preciso momento lanza el nag, que os parece?? es por cambiar de tactica y aprender algo mas, pues al atake:

Cargamos nuestro debugger preferido (softice o TRW2000) y seleccionamos vzprp.exe (pero qque sea virgen, osea una copia sin manipular) la cargamos con el debugger y ponemos um break point en la direccion del salto manipulado osea 

:00484DCA0F85E5000000 jne 00484EB5 

BPX 00484dca [RETURN]

Algunas obserbaciones: el primer nag saldra cunado chekee 10 millones de password con lo cual si ponemos el Break Point nada mas empezar a chekear password nos podemos morir hasta dar con la instruccion que lanza el nag ya que pasara por esa direccion de memoria 40.000 veces (por decir algo) entonces mejor de momento no ponemos el Brak Point y corremos Vzprp.exe desde el debugger, y y lo hacemos que testee cualquier zip protegido estamos atentos para cuando llegue a  mas o menos 9.999.999 pasword comprobadas interumpimos el proceso pulsando [Ctrl + D] los que utilizais Softice o [Ctrl + N] los que ulilizamos TRW2000 y eso se trata de interrumpir el proceso lo mas cerca posible a 10 millones, yo lo he parado en 9.931.363 ahora es cuando ponemos el Brak Point a nuestro salto :00484DCA0F85E5000000 jne 00484EB5 

BPX 00484dca [RETURN]

si os habeis quedado bastante alejados de 10.000.000 vamos pulsando F5 hasta que nos hacerquemos un poco, para saber cuanto os vais acercando pulsais F4 y mirais , pulsais nuevamente F4 y otra vez a softice, ahora vamos traceando con F10 hasta que salte el nag con tener pulsado F10 es suficiente (es para ir mas rapidos) y derrepente boom!! el nag atencion ahora pulsamos en OK y nos devuelve al softice justo debajo de la instruccion que ha sacado el nag que si todo os ha ido bien al pulsar OK aparecereis en:

:00484E6A 8B45EC       mov eax, dword ptr [ebp-14]
:00484E6D 8B10         mov edx, dword ptr [eax]
:00484E6F FF92D8000000 call dword ptr [edx+000000D8]-- Esta es la responsable del Nag
:00484E75 83F802       cmp eax, 00000002 -- Aqui aparecemos al pulsar OK en el Nag
:00484E78 750E         jne 00484E88

Bueno pues ya hemos localizado quien saca el maldito Nag ahora solo tenemos que eliminar esa instruccion (ah acordaros de borrar el break point del softice), para hacerlo localizamos el offset que es 8426f y vemos FF92 D800 0000 asi que para eliminar la instruccion lo sustituimos por 9090 9090 9090 salvamos los cambios y probamos, je hemos tenido exito ya no hay nag, ohhh pero ahora nos sale el de las 10.000 password, que quiere decir esto?? pues que posiblemente existan mas instrucciones iguales en otra parte del codigo pero buscarlas es bien sencillo solo tenemos que coger el valor hexadecimal de 

call dword ptr [edx+000000D8] que era FF92D8000000 y buscar todas las coincidencias en el W32dasm, pos vamos alla, y aparecen 16 coincidencias Mnnnn son muchas solo una de ellas seguramente es la que sacara el nag de las 10.000 pasword, Como sabemos cual es?? muy sencillo, apuntemos las direcciones de memoria en donde se encuentran todas las coincidencias en mi caso han sido en

454239
454515
45CD26
48310B
483130
484E6F
485196 -- a este no hace falta poner un BP, ya lo hemos eliminado.
487FC8
48A829
48BCB3
48C035
48C92D
48CB40
48D34F
48D6A8
48D744

Ahora solo tenemos que poner unos Break Points a todas estas direcciones y correr el programa, cuando salga el nag se interrumpira el proceso y se parara en una de esas direcciones en la que se pare es la encargada de escupir el nag de las 10.000 password seguimos los mismos pasos que con el anterior y ya esta, tenemos el programa 100 x 100 funcional, jeje y con la primera operacion del registro de windows que hicimos al comienzo del manual hemos eliminado hasta el unrregistered version :-).

Bueno espero que os sirva para ampliar algo vuestros conocimiento, he intentado dar a entender que siempre se pueden tomar varios caminos mientras estamos crackeando un programa, se trata de ir valorando mientras lo trabajas y pensar en todas las posibilidades, yo siempre os recomiendo que no sigais siempre los mismos atakes intentar pensar e imaginar otras formas de atakar, este programa tiene muchas mas maneras de atakarle, como siempre es un placer escribir para vosot@s

Cualquier duda, critica, sugerencias

Email

Saludos a todos y especialmente a TNT!,KUT ,WKT ,TUTORIAL LETAL ,KarlitoxZ ,Esiel2 y a todos los que me envias vuestros emails con dudas e ideas.

karpoff /TnT!Cracker

Este material es solo para uso educativo, por ahora los cracks son ilegales.


 

Karpoff Spanish Tutor: Pagina dedicada a la dibulgacion de informacion en Castellano, sobre Ingenieria Inversa y Programacion. Email "Colabora con tus Proyectos"
www.000webhost.com