Tutorial sobre WinZip v8.0

Víctima:

WinZip v8.0

URL:

http://www.winzip.com

Descripción:

Compresion & descompresion de ficheros (ZIP)

Tamaño del ejecutable:

¿?¿?¿? bytes

Tipo de Protección:

Molesta Nag & Serial

Método de ataque

Desensamblado y estudio del serial

Objetivo

Simular estar registrados

Cracker

Mr_Burns [K-FoR]

Dificultad

Newbie - Aficionado - Avanzado - Experto - Élite

Herramientas 

SoftIce, Win32Dasm & Hex WorkShop

Fecha:

12-07-2000



INTRODUCCIÓN



Hola a todos. Este es el primer tutorial que hago y de los que yo denomino DE UN NEWBIE PARA OTRO NEWBIE ya que tan solo llevo en este mundo del cracking 1 mes. He decidido hacer este tutorial para aquellos newbies que tengan problemas en crackear el programa porque fue el primero que me dio problemas. Otra de las razones por las que queria hacer el crack es que despues de haberlo conseguido me di cuenta de que lo que acababa de hacer no iba a beneficiar a nadie excepto a mi ya que os cracks que hago no los publico en ninguna web por ello decidi hacer esto. Despues de tanto rollo y sentimentalismo........................ empecemos!!!!!!!!!!!!!

CUERPO

Pasos a seguir:

1. Instalar el WinZip v8.0
2. Ejecutarlo por primera vez. Vereis una molesta pantalla inicial que os recordara que es una versión NO registrada y que si deseas continuar o salir del programa.
3. Despues entraremos en "Enter Registration Code" e introduciremos nombre y número de serie; en mi caso voy a poner:
Name: Mr_Burns
Registration #: 12345
4. Observaremos que nos aparecera un mensaje: "Incomplete or incorrect information"; esta cadena la anotaremos!
5. Hagamos, para empezar, una copia del winzip32.exe a Copia de Winzip32.exe como BackUp. Después, corramos en Win32Dasm y desensamblemos en Winzip32.exe. Una vez desenamblado, busquemos en "Reference String" la cadena que habíamos apuntado antes ("Incomplete or incorrect information") (lo que suelo hacer yo, como buen vago que soy, es copiar todo el texto, y meterme en el WordPad, lo pego y busco la cadena ;-)), la cual estara en la linea 654. Aremos un dobleclic un par de veces para saber cuantas referencias hay, y nos damos cuenta de que tan solo hay una en el address 40800A y con el código:
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00407FAA(C), :00407FB3(C), :00407FBC(C) <------------ AKI HEMOS DE FIJARNOS!!!!!!
|
:00408005 E89C020000 call 004082A6

* Possible Reference to String Resource ID=00654: "Incomplete or incorrect information"
|
:0040800A 688E020000 push 0000028E
:0040800F E8D9750300 call 0043F5ED
:00408014 50 push eax
:00408015 53 push ebx
:00408016 6A3D push 0000003D
:00408018 E808800200 call 00430025
:0040801D 83C410 add esp, 00000010
:00408020 FF05F87A4800 inc dword ptr [00487AF8]
:00408026 833DF87A480003 cmp dword ptr [00487AF8], 00000003
:0040802D 0F85F9000000 jne 0040812C
:00408033 6A00 push 00000000

Nos hemos de fijar en las referencias condicionales (C) que hay mas arriba: 407FAA(C), 407FB3(C), 407FBC(C). Una vez conocidas las address que nos levan a esta dichosa ventana que nos recuerda que nuestro serial no vale, lo que ami se me ocurre es estudiar un poco el código, asi que con el mismo Win32Dasm subiremos hasta 407FAA encontrando los otros dos saltos condicionales cerca:
* Reference To: USER32.GetDlgItemTextA, Ord:0104h
|
:00407F8F FF1528744700 Call dword ptr [00477428]
:00407F95 56 push esi
:00407F96 E8FF780300 call 0043F89A
:00407F9B 56 push esi
:00407F9C E822790300 call 0043F8C3
:00407FA1 803D78CD480000 cmp byte ptr [0048CD78], 00 <------ Comprueba si se ha introducido el nombre
:00407FA8 59 pop ecx
:00407FA9 59 pop ecx
:00407FAA 7459 je 00408005 <------- Si no hay nombre salta al error
:00407FAC 803DA4CD480000 cmp byte ptr [0048CDA4], 00 <--------- Comprueba si se ha introducido la contraseña
:00407FB3 7450 je 00408005 <-------- Si no se ha introducido salta a error
:00407FB5 E81BFAFFFF call 004079D5 <------ Comprueba el serial
:00407FBA 85C0 test eax, eax
:00407FBC 7447 je 00408005 <------------ Salta si el serial no es válido
:00407FBE 57 push edi

Pues por lo que podemos observar el salto que no importa es el tercero, es decir el que comprueba que el serial que hemos introducido sea valido, lo que a mi se me ocurre es cambiar ese JE (74) por un JNE (75) así que a ello: Hay dos posibilidades una usar el softice y otra el propio debugger del Win32Dasm, yo usare el Softice. Para ello cargamos el Sofice y cargamos el programa, después, ponemos un breakpoint en la direccion deseada (bpx 407FBC) y apretamos F5, nos corre el programa... introducimos el nombre y la clave y damos aceptar... Y JODER!!! Nos aparece una ventanita diciendonos que estamos REGISTRADOS!!! Pues que facil ha sido!!! Bien, le damos aceptar, nos aparece otra ventana de comprobación y nos corre el WinZip... pero ya me huele mal la cosa cuando me encuentro en la barra WinZip (Unregistered). Asi que decido correr de nuevo el programa... y... vaya me vuelve a ocurrir lo de antes me aparece la puta NAG. Pues nada no era tan fácil como parecia xDDD

6. Corremos de nuevo el Win32Dasm y nos centramos en el código anterior y nos fijamos en la CALL del address 407FB5. A mi se me ocurre que al empezar el programa haga siempre una llamada similar para comprobar que esta registrado el programa y que no aparezca la NAG dichosa. Pues si es asi debera aparecer en CALL references dentro de esa CALL (lo pillais???). Para ello, entramos en la CALL y observamos el siguiente código:
* Referenced by a CALL at Addresses:
|:0040108B , :00401221 , :004041E8 , :00407FB5 , :00433D12
|
:004079D5 55 push ebp
:004079D6 8BEC mov ebp, esp
:004079D8 81EC08020000 sub esp, 00000208
:004079DE 53 push ebx
:004079DF 56 push esi
:004079E0 33F6 xor esi, esi
:004079E2 803D78CD480000 cmp byte ptr [0048CD78], 00
:004079E9 57 push edi
:004079EA 0F849A000000 je 00407A8A
:004079F0 8D45EC lea eax, dword ptr [ebp-14]
:004079F3 50 push eax

Anda!!! pero si tenia razón hay cinco llamadas (40108B, 401221, 4041E8, 407FB5, 433D12) a este proceso!! Pues lo que voy a hacer es apuntarlas, y ponerles los breakpoints (bpx XXXXXX) a ver cual de ellas salta primero. Lo hacemos y observamos que el primero que salta el 4041E8:
* Possible StringData Ref from Data Obj ->"WinZip"
|
:004041D4 68A4FF4700 push 0047FFA4
:004041D9 56 push esi
:004041DA E861370600 call 00467940
:004041DF 33DB xor ebx, ebx
:004041E1 59 pop ecx
:004041E2 395D08 cmp dword ptr [ebp+08], ebx
:004041E5 59 pop ecx
:004041E6 743A je 00404222
:004041E8 E8E8370000 call 004079D5 <-------------- NOS FIJAMOS AQUI!!!
:004041ED 85C0 test eax, eax
:004041EF 7531 jne 00404222 <------- Y AQUI!!
:004041F1 E819ECFFFF call 00402E0F
:004041F6 85C0 test eax, eax
:004041F8 7428 je 00404222

* Possible StringData Ref from Data Obj ->" (Unregistered)"
|
:004041FA BF1CE04700 mov edi, 0047E01C
:004041FF 57 push edi
:00404200 E80B390600 call 00467B10
:00404205 83F80F cmp eax, 0000000F
:00404208 59 pop ecx
:00404209 7406 je 00404211
:0040420B 891D68A84800 mov dword ptr [0048A868], ebx

Parece ser que hace esa llamada, "testea" y si no es igual continua, pero lo mas GUAY es que si continua aparece lo de la dichosa (Unregistered), así que prefiero que salte y para ello voy a cambiar en 4041EF JNE (75) por JE (74). Y lo aremos como antes con el Softice, poniendo un BPX 4041EF, y apretando F5; y nada mas hacer eso nos salta de nuevo al SOftIce asi que a ello... cambiamos el salto!! y apretamos de nuevo F5.

7. Pero OTRA VEZ NOS SALE LA PUTA (es que me emociono!!) NAG!! Un vez tranquilizado, se me ocurre que debe ser otra CALL como la anterior la que llama a las NAG, asi que deberemos poner otra vez los BPX (40108B, 401221, 4041E8, 407FB5, 433D12) observando que salta primero el 4041E8 y después el 401221 con un código como este:
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004011E0(C)
|
:004011F6 393D749F4800 cmp dword ptr [00489F74], edi
:004011FC 6A01 push 00000001
:004011FE 893D44C84800 mov dword ptr [0048C844], edi
:00401204 893D68A84800 mov dword ptr [0048A868], edi
:0040120A 5E pop esi
:0040120B 758E jne 0040119B
:0040120D 393D20C84800 cmp dword ptr [0048C820], edi
:00401213 7586 jne 0040119B
:00401215 393D60CF4800 cmp dword ptr [0048CF60], edi
:0040121B 0F857AFFFFFF jne 0040119B
:00401221 E8AF670000 call 004079D5 <----------- NOS FIJAMOS AQUI!!!
:00401226 85C0 test eax, eax
:00401228 0F8573FFFFFF jne 004011A1 <------ Y AQUI!!!
:0040122E E871060000 call 004018A4
:00401233 85C0 test eax, eax
:00401235 0F856CFFFFFF jne 004011A7
:0040123B E969FFFFFF jmp 004011A9
:00401240 6A01 push 00000001
:00401242 58 pop eax
:00401243 A344C84800 mov dword ptr [0048C844], eax
:00401248 A368A84800 mov dword ptr [0048A868], eax
:0040124D C3 ret

como en la anterior llamada dos lineas mas abajo hay un salto condiconal, que me incita a cambiarlo asi que eso cambiaremos en 401228 el JNE (85) por el JE (84). corremos el programa y ya está!!! Ni NAG ni (Unregistered) ni LECHES!!!

8. Correr el Hex WorkShop (u otro editor Hexadecimal) y hacer los cambios mencionados anteriormente (si se te han olvidado mira mas abajo que te los recuerdo :-))

Ya has conseguido crackear el WinZip v8.0!!!!!

De forma breve y rapida (para vosotros los vagos xDD):

1. Comprobar los saltos condicionales que nos llevan a la ventana de "Incomplete or incorect information"
407FAA
407FB3
407FBC <---Hemos de cambiar 74 por 75
2. Comprobar las llamadas a la dirección 4079D5
40108B
401221 <--- El segundo que salta. Cambiar en el salto condicional siguiente 85 por 84
4041E8 <--- La primera que salta. Cambiar en el salto condicional siguiente 75 por 74
407FB5
433D12

FINALIZANDO



Bueno no se como me habré explicado en este sencillo tutorial ya que mi primer trabajo pero espero que os haya servido de algo.

Si teneis alguna duda podreis encontrarme en:

HISPANO: #CRaCKeRS #Ingenieria_Inversa con el nick de "Mr_Burns"
EFNET: #TnTCRaCKeRS #WkT con el nick de "[MoRDReD]"

Se lo agradezco especialmente a KarlitoxZ (aunque el no lo sepa) por haberme ayudado a crackear este programa ya que fue uno de los primeros que me dio probremas y sin su ayuda no lo habra conseguido ;-)