| ESTUDIO COLECTIVO DE DESPROTECCIONES Última Actualizacion: 25/10/2001 |
Programa | Visual Zip Password recorvery processor multicomputer V4.0 Final | W95 / W98 / NT
Descripción | Programa para sacar las password de los zip, exe protegidos, permite usar varias computadoras asi como el uso de diccionarios y otros metodos
Tipo | Shareware
Tipo de Tutorial | [X]Original, []Adaptación, []Aplicación, []Traducción
Url | http://ftechsoft.hypermart.net
Protección | Molesta Nag Aleatoria cada x password comprobadas
Dificultad | 1) Principiante, 2) Amateur, 3) Aficionado, 4) Profesional, 5) Especialista
Herramientas | W32Dasm , Softice o TRW2000 , Editor Hex y Apis32
Objetivo | Evitar la Nag y sus Restricciones
Cracker | karpoff
Grupo | TNT!
Fecha | 24 de Abril de 2000
INTRODUCCION
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 ATAQUE
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: 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: 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:rdar 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: 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: 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: 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] : 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 program a) tenemos que cambiar 00474faf 7403 jne 00474fba por 00474faf 75 03 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 :) 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 :00484DCA 0F85E5000000 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 :00484DCA 0F85E5000000 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 (osea la anulamos con 90s)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 http//welcome.to/karpoff http://members.xoom.com/kf_karpoff 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.
[ Entrada | Documentos Genéricos | WkT! Web Site ]
[ Todo el ECD | x Tipo de Protección | x Fecha de Publicación | x Orden Alfabético ]
(c) Whiskey Kon Tekila [WkT!] - The Original Spanish Reversers. Si necesitas contactar con nosotros , lee esto antes e infórmate de cómo puedes ayudarnos