| ESTUDIO COLECTIVO DE DESPROTECCIONES Última Actualizacion: 25/10/2001 |
Programa | Uninstall Manager v2.60 | W95 / W98 / NT
Descripción | Programa de limpieza de archivos
Tipo | Shareware
Tipo de Tutorial | [X]Original, []Adaptación, []Aplicación, []Traducción
Url | http://members.tripod.com/~umpage
Protección | Nag Screen. Time Limit 30 Dias
Dificultad | 1) Principiante, 2) Amateur, 3) Aficionado, 4) Profesional, 5) Especialista
Herramientas | SoftIce v3.24, W32Dasm v8.93
Objetivo | Encontrar el numero de registro real del programa
Cracker | Mr.Grey
Grupo | Whiskey Kon Tekila
Fecha | 15 de Noviembre de 1998
AL ATAQUE
Cuando arrancamos el programa, sale directamente la Nag-Screen, avisandonos de que el programa es shareware y de que nos debemos de registrar. Tendremos dos posibilidades, una es el boton Register o el boton OK. Pulsaremos el boton Register y nos saldra una pantalla pidiendonos el nombre de usuario y la clave. Registration Name: Mr.Grey Registration Key: 30071996 Antes de pulsar el boton OK, pondremos 2 BreakPoints en el SoftIce. Para ello, pulsar CTRL+D y escribir lo siguiente: bpx GetWindowTextA bpx GetDlgItemTextA Pulsar la tecla F5 para volver al programa y pulsar el boton OK. Veremos que no sale el SoftIce y que en cambio, sale otra ventana con el mensage de Sorry not a correct reg key. Esto quiere decir que la forma de seguimiento no va por los conductos mas normales. Pulsar otra vez CTRL+D para quitar los BreakPoints anteriores escribiendo bc * y despues la tecla F5. En lugar de usar el SoftIce directamente, pasaremos a traves del WDasm. Arrancar el WDasm y abrir una copia del fichero Uninsman.exe. Una vez que tengamos el programa desensamblado, salvar el proyecto para no tener que desensamblarlo otra vez. Ahora seleccionaremos el menu Refs / String Data References que nos mostrara todas las cadenas de caracteres que el WDasm considere como tales. Aqui intentaremos buscar el mensaje que nos salio cuando intentamos registrar el programa, pero .... resulta que no esta este mensaje y no tenemos mas pistas que seguir. En estos casos, una de las cosas que se pueden hacer, es buscar cualquier tipo de referencia o cadena de caracteres que nos den una pista sobre que el programa es shareware, que no esta registrado, que es de evaluacion o algo fuera de lo que se pudiera considerar normal. En el caso de este programa, hay una referencia que salta a la vista que no es muy normal, esta es SILICON SURFER [PC] ya que no es un texto muy normal y ademas esta en mayusculas, mas bien parece un nombre de algun grupo. Si pulsamos un doble click, saltaremos directamente a la siguiente linea en donde se encuentra este texto: * Referenced by a (U)nconditional or (C)onditional Jump at Address: |:0045BFAE(C) | :0045BFC2 8D55F4 lea edx, dword ptr [ebp-0C] :0045BFC5 8B45FC mov eax, dword ptr [ebp-04] :0045BFC8 8B800C020000 mov eax, dword ptr [eax+0000020C] :0045BFCE E8B539FCFF call 0041F988 :0045BFD3 8B45F4 mov eax, dword ptr [ebp-0C] :0045BFD6 8D55EC lea edx, dword ptr [ebp-14] :0045BFD9 E89AB0FAFF call 00407078 :0045BFDE 8B45EC mov eax, dword ptr [ebp-14] * Possible StringData Ref from Code Obj ->"SILICON SURFER [PC]" | :0045BFE1 BAA0C34500 mov edx, 0045C3A0 <-- Aparecemos aqui :0045BFE6 E8297EFAFF call 00403E14 :0045BFEB 753D jne 0045C02A :0045BFED 6A00 push 00000000 :0045BFEF B8B9000000 mov eax, 000000B9 :0045BFF4 E877100000 call 0045D070 :0045BFF9 50 push eax :0045BFFA B828000000 mov eax, 00000028 :0045BFFF E890100000 call 0045D094 :0045C004 50 push eax :0045C005 668B0DB4C34500 mov cx, word ptr [0045C3B4] :0045C00C 33D2 xor edx, edx Vamos a hacer una prueba, ejecutar otra vez el programa e ir a registrarlo con el nombre anterior. Resulta que nos sale una ventana con el mensaje This registration info is illegal. No need to pirate this software. It is just 10$ to register. Por lo visto, este grupo debio de haberles crakeado alguna version anterior o algo asi y han metido este control. Volvamos al WDasm e intentemos buscar el texto pirate a ver que sale, ir al menu Search / Find Text y escribirlo. Resulta que si que hay un texto con esta palabra y resulta que es el mensaje que nos habia salido: * Possible StringData Ref from Code Obj ->"This registration info is illegal. " ........................................->"No need to pirate this software. " ........................................->"It is just 10$ to register" | :0045C00E B8C0C34500 mov eax, 0045C3C0 <-- Aparecemos casi aqui :) :0045C013 E87000FEFF call 0043C088 :0045C018 8B45FC mov eax, dword ptr [ebp-04] :0045C01B C7805001000002000000 mov dword ptr [ebx+00000150], 00000002 :0045C025 E93A030000 jmp 0045C364 Si os fijais y subis unas lineas hacia arriba, vereis el texto que hace referencia al grupo justamente en la linea :0045BFE1 y en la siguiente linea una llamada a 00403E14 y que a su vuelta hace un salto condicional si no es igual. Esto quiere decir que si el nombre introducido no es igual al del grupo, que salte a 0045C02A: * Referenced by a (U)nconditional or (C)onditional Jump at Address: |:0045BFEB(C) | :0045C02A 8B45FC mov eax, dword ptr [ebp-04] <-- Aparecemos aqui :0045C02D E8E6F8FFFF call 0045B918 <-- Comprobacion numero registro :0045C032 3C01 cmp al, 01 <-- AL es igual a 1 ? :0045C034 0F8551020000 jne 0045C28B <-- Si AL no es 1, malo :0045C03A B201 mov dl, 01 <-- Bien, bravo... registrado Aqui podemos ver que hace una llamada a 0045B918 y a la vuelta, compara el contenido del registro AL con el valor 1 y si el resultado no es igual, salta a 0045C28B que es la rutina de error. Veamos el codigo de la llamada a 0045B918: * Referenced by a CALL at Address: |:0045C02D | :0045B918 55 push ebp :0045B919 8BEC mov ebp, esp :0045B91B 33C9 xor ecx, ecx :0045B91D 51 push ecx ..... :0045B936 8D55F4 lea edx, dword ptr [ebp-0C] :0045B939 8B860C020000 mov eax, dword ptr [esi+0000020C] :0045B93F E84440FCFF call 0041F988 :0045B944 837DF400 cmp dword ptr [ebp-0C], 00000000 :0045B948 747E je 0045B9C8 ..... :0045B96D 8B55F0 mov edx, dword ptr [ebp-10] :0045B970 8D45FC lea eax, dword ptr [ebp-04] :0045B973 E8A881FAFF call 00403B20 :0045B978 33DB xor ebx, ebx :0045B97A 85FF test edi, edi :0045B97C 7E20 jle 0045B99E Vemos que en la linea :0045B944 hace una comprobacion de si el nombre introducido esta vacio o no y en la linea :0045B97A hace otra comprobacion. El codigo que nos interesa, es el que viene a continuacion: * Referenced by a (U)nconditional or (C)onditional Jump at Address: |:0045B99C(C) | :0045B983 8B55FC mov edx, dword ptr [ebp-04] :0045B986 8A5402FF mov dl, byte ptr [edx+eax-01] :0045B98A 80FA20 cmp dl, 20 :0045B98D 740B je 0045B99A :0045B98F 8B4DFC mov ecx, dword ptr [ebp-04] :0045B992 81E2FF000000 and edx, 000000FF :0045B998 03DA add ebx, edx * Referenced by a (U)nconditional or (C)onditional Jump at Address: |:0045B98D(C) | :0045B99A 40 inc eax :0045B99B 4F dec edi :0045B99C 75E5 jne 0045B983 * Referenced by a (U)nconditional or (C)onditional Jump at Address: |:0045B97C(C) | :0045B99E 81F389000000 xor ebx, 00000089 :0045B9A4 83F333 xor ebx, 00000033 :0045B9A7 43 inc ebx :0045B9A8 8D55F8 lea edx, dword ptr [ebp-08] :0045B9AB 8B8610020000 mov eax, dword ptr [esi+00000210] :0045B9B1 E8D23FFCFF call 0041F988 :0045B9B6 8B45F8 mov eax, dword ptr [ebp-08] :0045B9B9 E876BAFAFF call 00407434 :0045B9BE 3BD8 cmp ebx, eax :0045B9C0 7504 jne 0045B9C6 :0045B9C2 B301 mov bl, 01 :0045B9C4 EB02 jmp 0045B9C8 Desde la linea :0045B983 y hasta la linea :0045B99C, lo que hace es un bucle en el que monta la primera parte del numero de registro. Cuando a terminado de recorrer todo el nombre, sigue en la linea :0045B99E y hace un par de XOR al contenido del registro EBX y lo incrementa en 1. Si miramos unas lineas mas abajo, vemos que hay una comparacion entre EBX y EAX que es evaluada en la siguiente linea haciendo un salto a 0045B9C6 en caso de que no sean iguales. Si son iguales, mueve un 1 a BL. Llegados a este punto, vamos a usar el Symbol Loader del SoftIce y elegiremos el menu File / Open Module, cogeremos el fichero uninsman.exe. Elegir el menu Module / Load y poner un BreakPoint en la linea :0045B9BE y pulsar la tecla F5 para que se ejecute el programa. Nos aparecera la Nag-Screen y pulsaremos el boton de Register e introducir el nombre y clave que se pusieron la vez anterior y pulsar el boton de OK. Automaticamente, aparecera la pantalla del SoftIce, justo en la linea donde pusimos el BreakPoint, o sea, en la linea del CMP EBX, EAX. Si evaluamos el contenido de ambos registros, veremos lo siguiente: ? EBX = 597 <-- Numero real ? EAX = 30071996 <-- Nuestro numero Ahora ya sabemos el numero de registro real, solo queda desactivar el BreakPoint que pusimos: bd 00 Pulsar F5 para volver al programa que nos saldra una ventana diciendo que el numero es erroneo. Volver a pedir el registro y poner el numero real y el programa ya esta registrado.
[ 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