Foro de elhacker.net

Programación => Ingeniería Inversa => Mensaje iniciado por: bAd bItE 32 en 20 Junio 2003, 20:30 pm



Título: crack winzip
Publicado por: bAd bItE 32 en 20 Junio 2003, 20:30 pm
esto lo escribio un tipo llamado GiBa. de un grupo llamado Ezkracho Team

Es bastante sencillo. Este fue mi primer CraCk y no lo logre solo, lo logro primero mi amigote BacH que luego me guió a mí. Yo llegue por mi cuenta pero no lo hubiera logrado sin su ayuda, así que GRACIAS BacH!
Otra persona a la que debo dar crédito es a KarlitoxZ que con sus expedientes
crackee unos programas y me di cuenta de que no era difícil; y por supuesto al Dios del CRACK +OrC que me ilumino en esta vida cibernética de ignorancia.

Hoy en día esta la versión 7 del WinZip, la que yo crackee fue la 6.3 que es igual que la nueva, solo que la nueva tiene la posibilidad de usar un serial logrado con el 6.3 y otro nuevo con un formato distinto.
Tratare de explicarles este sencillo CraCk usando el 6.3 porque tiene menos vueltas, pero luego intenta con el 7.0 que exactamente igual o instala el 7 sobre el anterior y todavía seguirá registrado :-).

Para comenzar necesitamos el WinZip instalado, su copia de seguridad y el Soft-Ice.
Si no sabes lo que es el Soft-Ice lo único que puedo decirte es que busques información acerca de lo siguiente: ASSEMBLER, INGENIERIA INVERSA, DESENSAMBLADOR, DEBUGGER y consigas los manuales del Soft-Ice que se pueden bajar gratis desde NuMega y es lo mejor que puedes hacer (nos solo debes bajarlos, sino que DEBES LEERLOS).

Con el Soft-Ice cargado y corriendo ejecutamos el WinZip y nos aparece una pantalla diciendo que les paguemos (si claro...jajaja) para que esta ventana no aparezca mas, y podemos ver que el botón que dice Agree va cambiando de posición para que uno no se acostumbre de memoria a hacer clic en determinado lugar de la pantalla; también vemos que la hot key cambia de posición y que nunca esta seleccionado como default para que con tocar enter Agreemos a lo que dice (a propósito: nunca lo he leído!).
Esta pantalla es muy fastidiosa cuando uno esta acostumbrado a manejarse con zips todo el tiempo, pero no es solo ese el problema, el programa que hace los Self-Extract o zips autodescomprimibles le agrega al exe generado una pantalla que advierte que ese self-extract ha sido generado con una versión no registrada del WinZip.

Ahora que ya tenemos un motivo para molestarnos en reventar el programa dado que no podemos o no queremos pagarlo por algún motivo moral que no quiero discutir, vamos a dedicarnos a joderlo!

Bien, ahora hay que ver como sacar esta pantalla de aquí y como hacer que el self-extract no tenga esa ventana, para esto PODRIAMOS:

a) Trazar el programa hasta el momento en que presenta la pantalla y ponerle un RET dentro del CALL o NOPearlo para que la pase de largo ya sea en el WinZip.exe como en cada uno de los SELF-Extract que hagamos :-(
b) En caso de no estar dentro de un CALL podríamos buscar una comparación al principio del programa que se fije si esta o no registrado y el JNE por un JE o algo así :-(
c) Desensamblarlo en código muerto con el DASM y buscar a través de las Strings References :-(
d) Desensamblarlo al vuelo y obtener un numero de registro valido:-)


Motivos por el cual no lo haremos del modo a:
A) No es una forma muy inteligente de hacerlo (además de que es muy difícil y yo no pude) y eso de andar patcheando cada self-extract es engorroso.

b) El o los programadores del WinZip no son tan tontos como quisiéramos, si se mandaron algo tan practico y que se presta a ser usado tanto como el WinZip no harían algo lamer, y de hecho no lo hicieron.

c) Perseguir Strings References es MUY molesto dado que tiene MILES y de las miles 40 interesantes pero ninguna que realmente ayude dado que las que queremos no están aquí.

d) Oh, sí! esto es lo mejor. Este es el método más aceptable dado que al obtener un numero de serie ya nos olvidamos por completo de modificar el ejecutable y del self-extract.

Primero que nada consíguete unas hojas de papel y un lápiz, porque para no olvidarse nada lo mejor es anotarlo y más cuando se trata de direcciones o números en Hexa.

Seguimos observando al programa y vemos que para registrarnos podemos usar esta nag screen o podemos ir a About -> Register WinZip; donde aparece una pantalla que pide un nombre y un serial.

Lo que DEBEMOS lograr pueden ser dos cosas: o que frene en el momento en que genera nuestro serial, para lo cual debemos perseguir al NOMBRE, o que frene cuando compara el serial valido con el que pusimos nosotros.
Lo más sencillo es parar en la comparación dado que esto nos da también la posibilidad de patchear el programa mas tarde para que la comparación de bien aunque sea cualquier serial y porque para hacer la comparación deberá apuntar directamente al serial nuestro y al valido.
Ahora escribimos un nombre, yo uso el mío, +GiBa y luego un serial cualquiera como por ej. 12121212. Tocamos Ctrl+D para pasar al Soft-Ice.
Ahora podemos hacer un break en hmemcpy o buscar en la memoria nuestro numero de la suerte, los comandos serian:
para el break en hmemcpy: BPX hMemCpy
para buscar el numero: >S 0 l FFFFFFFF '12121212' o sino >S CS:IP l FFFFFFFF '12121212'
Si usamos el BPX presionamos Ctrl+D y seguimos, si usamos la búsqueda haremos lo siguiente:
BPR direccion_de_respuesta direccion_de_respuesta+8 RW
esto hace que el programa pare en el momento en que lea o escriba sobre los caracteres a los cuales les pusimos el break.
Presionamos Ctrl+D

Seguimos:
Presionamos en el botón de aceptar y el Soft-Ice salta.
si usamos el bpx hmemcpy tocamos F8 hasta llegar a un REPZ MOVSD lo cual copia desde ESI nuestra clave mágica a ES:DI, que es dentro de una variable del programa.
Si usamos el bpr ya estamos en el REPZ MOVSD así que continuamos.
Agregamos un BPR ES:DI ES:DI + 8 RW para que pare cuando lea nuestro serial desde la variable del programa para algo que puede ser, tal vez, la comparación deseada.
Mandamos un G para que siga el programa y salta una vez, después de observar, aquí vemos que cuenta los caracteres que tiene nuestro serial, que es interesante mas no importante.
Mandamos otro G y aparecemos en un lugar con lo siguiente:

00457A1C        OR AL,AL   
00457A1E        JZ 0045794E  
00457A20   MOV AL, [ESI]         -->en la dirección ESI esta el serial  verdadero y pone la primer
           letra en el byte low de EAX, AL
00457A22   INC ESI               -->le suma 1 a ESI para apuntar a la próxima  letra, que será
           comprobada si la primera es valida.
00457A23   MOV AH, [ADI]     -->en la dirección EDI esta el serial nuestro y pone la primera letra
          en el byte high de EAX: AH.
00457A25   INC EDI          -->le suma 1 a EDI para apuntar a la próxima letra.
00457A26   CMP AL,AH        --> COMPARA EL SERIAL VERDADERO CON EL  NUESTRO
00457A28   JZ 00457A1C      -->si es valido continua.

Esto es lo que queríamos: esto toma un carácter en ESI y lo pone en AL y luego toma uno en EDI y lo pone en AH; entonces los compara y si alguno difiere se va a donde dice que es incorrecto.
SI, es aquí. Si vemos lo que hay en EDI con un memory dump ( D EDI ) vemos que esta nuestro 12121212 y si miramos en ESI (D ESI) vemos algo espectacularmente bello, que en mi caso con mi nombre es :C98C0363.
¡Huiiaa!, esto parece un serial y lo esta comparando con el mío. Ajammmm...YEAH! lo copiamos en nuestro cerebro (o mejor en un papel) y deshabilitamos todos los breakpoints con BC *.
Nos echamos otro go con G y nos aparece la pantalla de error, aceptamos y volvemos a poner los datos con el nombre exactamente igual al anterior y con el numero que tenemos.

¿Es necesario que te diga lo que sucedió?

Bueno, te acabas de registrar manito! No mas pantallas al inicio, no mas self-extracts delatores ni naa.

En realidad este es un CraCk muy sencillo y es muy raro encontrar este tipo de comparación tan obvia en otro lado, pero siempre son muy parecidas.
No seas tan lamer de utilizar mi nombre y numero de Serial porque en ese caso eres más tonto de lo tu mismo crees y no mereces este archivo.
Espero que mis pobres conocimientos te sirvan para algo y entiendas los pasos y el funcionamiento de este CraCk.


Título: Re:crack winzip
Publicado por: Songoku en 21 Junio 2003, 08:45 am
Solo una cosa, la version mas actual de winzip no es la 7 sino la 8.1.
Saludos...

Songoku