| ESTUDIO COLECTIVO DE DESPROTECCIONES Última Actualizacion: 25/10/2001 |
Programa | Opera v3.60 | W95 / W98 / NT
Descripción | Browser
Tipo | Trial de 30 dias
Tipo de Tutorial | [X]Original, []Adaptación, []Aplicación, []Traducción
Url | http://www.operasoftware.com
Protección | Nag Screen. Time Limit 30 Dias
Dificultad | 1) Principiante, 2) Amateur, 3) Aficionado, 4) Profesional, 5) Especialista
Herramientas | W32dasm v8.9, Hiew 6.15
Objetivo | Simular estar registrados.
Cracker | n3bUr+
Fecha | 03 de Noviembre de 1999
INTRODUCCION
Para empezar se podria decir que el programa Opera 3.60 es un magnifico browser, aunque su protección no es tan magnifica y se puede anular en pocos minutos. La proteccion se basa en el tipico serial, para hacer que casque se puede hacer: i) LLoriquear para que alguien te pase un serial válido (al mas puro estilo lammerman). ii) Averiguar un serial valido i/o escribir un keygen. iii) Parchear el algoritmo de comprovacion del serial para que acepte cualquier cosa. iv) Parchear el programa para que crea que estamos registrados, aunque no hayamos ni siquiera introducido un serial. Bueno yo como aun no tengo demasiada experiencia, he optado por una solucion relativamente facil, la cuarta ( aunque primero intente la tercera) : Esta turorial esta pensada para principiantes ya que la proteccion de este programa no es demasiado buena y , si yo he podido crackearlo, cualquiera puede. Con esta tutorial se ajunta el patch para quien quiera probarlo, aunque te recomiendo que leas esta tutorial, todas las que hay en WKT y todas las de +ORC (Importante) y crackees por ti mismo. (porque si estas leyendo esto es porque quieres aprender ingenieria inversa y no simplemente desproteger algunos programas estupidos al mas puro estilo lammerman???). Saludos y que aproveche...
AL ATAQUE
Herramientas : W32dasm : yo uso la ver. 8.93 Hiew (lo uso porque permite modificar directamente el assembler y asi no hace falta averiguar los codigos en hex (aunque esto ultimo noes demasiado complicado si tienes una buena lista de opcodes)) ver. 6.15 Para realizar este patch usaremos la vieja tecnica de los listados "muertos", es decir desensamblaremos elprograma principal [Opera.exe] y estudiaremos el codigo sin que este se encuentre en ejecución. Bueno, a lo dicho lanzamos el w32dasm i seleccionamos para desensamblar el opera.exe, y le damos al botoncito Str. Ref. (nos da las referencias a cadenas de texto), buscamos palabras del tipo "Registered ", "unregistered", o algunas de las palabrejas tan gratas que te dicen cuando introduces un serial incorrecto. Desisti de intentar parchear la rutina de comprovación del serial ya que no encontre nada que me gustase. Asi pues intentemos otro camino, ¿cuando sabe el programa si estamos o no registrados?. Quien lo sepa que levante el dedo!! MUY BIEENN!!! Seguro que ya lo sabes es AL PRINCIPIO cuando te da ese pantalluco blanco tan feo antes de arrancar. Y cual es la palabra magica ..... SII!!! UNREGISTERED!!! Muy bien, sabiendo esto nos vamos al principio del codigo desensamblado y abrimos una busqueda y tecleamos "Unregistered" (sin comillas), esto nos da dos casos (el bueno es el segundo), asi pues nos vamos al segundo caso y aparece.. :0049749D 68252B0000 push 00002B25 :004974A2 FF7508 push [ebp+08] :004974A5 FFD6 call esi :004974A7 8D856CFCFFFF lea eax, dword ptr [ebp+FFFFFC6C] :004974AD 50 push eax * Possible Reference to Dialog: SPLASH, CONTROL_ID:2B26, " " | :004974AE 68262B0000 push 00002B26 :004974B3 FF7508 push [ebp+08] :004974B6 FFD6 call esi :004974B8 393D0C155100 cmp dword ptr [0051150C], edi :004974BE 752A jne 004974EA :004974C0 68FF000000 push 000000FF :004974C5 8D85C4FEFFFF lea eax, dword ptr [ebp+FFFFFEC4] :004974CB 50 push eax * Possible Reference to String Resource ID=21428: " (unregistered)" ******nuestro amigo!!! | :004974CC 68B4530000 push 000053B4 :004974D1 FF35180F5100 push dword ptr [00510F18] :004974D7 FFD3 call ebx :004974D9 8D85C5FEFFFF lea eax, dword ptr [ebp+FFFFFEC5] :004974DF 50 push eax * Possible Reference to Dialog: SPLASH, CONTROL_ID:2B25, " " seguro que ya sabes por donde voy ¿no? es facil.. :0049749D 68252B0000 push 00002B25 :004974A2 FF7508 push [ebp+08] :004974A5 FFD6 call esi :004974A7 8D856CFCFFFF lea eax, dword ptr [ebp+FFFFFC6C] :004974AD 50 push eax * Possible Reference to Dialog: SPLASH, CONTROL_ID:2B26, " " | :004974AE 68262B0000 push 00002B26 :004974B3 FF7508 push [ebp+08] :004974B6 FFD6 call esi :004974B8 393D0C155100 cmp dword ptr [0051150C], edi ***aqui compara dos valores :004974BE 752A jne 004974EA **********aqui decide si eres un buen o un mal chico :004974C0 68FF000000 push 000000FF :004974C5 8D85C4FEFFFF lea eax, dword ptr [ebp+FFFFFEC4] :004974CB 50 push eax * Possible Reference to String Resource ID=21428: " (unregistered)" | :004974CC 68B4530000 push 000053B4 :004974D1 FF35180F5100 push dword ptr [00510F18] :004974D7 FFD3 call ebx :004974D9 8D85C5FEFFFF lea eax, dword ptr [ebp+FFFFFEC5] :004974DF 50 push eax * Possible Reference to Dialog: SPLASH, CONTROL_ID:2B25, " " asi pues trato de invertir el salto con un "je" pero no da resultado, y eso quiere decir que debe almacenar algun valor que le indique si estamos o no registrados , asi pues probamos con este [0051150C] , abrimos una busqueda y metemos 0051150C, nos da un par o tres ocurrencias, de las cuales hay una que parece interesante :00497336 8D8DE8F2FFFF lea ecx, dword ptr [ebp+FFFFF2E8] :0049733C E8A05C0200 call 004BCFE1 :00497341 8D8DE8F2FFFF lea ecx, dword ptr [ebp+FFFFF2E8] :00497347 E8065B0200 call 004BCE52 :0049734C 3BC7 cmp eax, edi :0049734E A30C155100 mov dword ptr [0051150C], eax ******aqui mueve el contenido de eax a nuestro amiguete :00497353 68BC040000 push 000004BC :00497358 7415 je 0049736F pero donde leches mete el contenido de eax?? mirad dos lineas mas arriba... :00497347 E8065B0200 call 004BCE52 Si seguimos este call aterrizamos en la rutina que revela la existencia no registrada * Referenced by a CALL at Addresses: |:0045E2DA , :00497347 | :004BCE52 8D8138010000 lea eax, dword ptr [ecx+00000138] :004BCE58 85C0 test eax, eax :004BCE5A 741A je 004BCE76 ***********todos estos saltitos van a la rutina de mas abajo que es la que revela la existencia no registrada, es decir si los evitamos, ya estamos registrados :004BCE5C 803800 cmp byte ptr [eax], 00 :004BCE5F 7415 je 004BCE76 :004BCE61 81C190030000 add ecx, 00000390 :004BCE67 51 push ecx : 004BCE68 E88650FDFF call 00491EF3 :004BCE6D 85C0 test eax, eax :004BCE6F 59 pop ecx :004BCE70 7404 je 004BCE76 :004BCE72 6A01 push 00000001 ********* Esto dice "adelante amable comprador". :004BCE74 58 pop eax : 004BCE75 C3 ret *****retorna registrado. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses: |:004BCE5A(C), :004BCE5F(C), :004BCE70(C) | ***** los jumps de arriba van a parar aqui. :004BCE76 33C0 xor eax, eax ************ Esto dice "oh! oh! este niño malo no esta registrado. :004BCE78 C3 ret ***retorna "no registrado" asi pues sabiendo todo esto, nos apuntamos el offset i nos vamos al hiew, abrimos Opera.exe i nos situamos en el offset que corresponde (ahora no macuerdo) le damos a F4, seleccionamos el modo codigo y cambiamos el je 004BCE76 por jmp 004bce72 le damos a actualizar, con lo cual cuando se llame a esta rutina pasara de los saltos y ira directamente a decirnos "Buenos dias amable registrado". Y yasta... by. n3bUr+ psxmodchip@latinmail.com
[ 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