Karpoff Spanish Tutor

Programa: Revival 3.1


 

PROTECCION: Name / Serial
Descripcion: Programa Para Recuperar archivos borrados.
Dificultad: Facilon
DOWNLOAD: http://www.revival2000.com/revflp31.zip
Herramientas: W32Dasm , Editor Hexadecimal
CRACKER: karpoff   FECHA: 05/09/99

 

 INTRODUCCION

## Tutoríal de Crackeo Para Newbies desde Cero 05/09/99

Por Karpoff ## PROYECTO 8 ##

Revival 3.1 ( Existen dos versiones, una para utilizar desde diskett y otra para instalar en el disco duro, podemos utilizar cualquiera)

Hello otra otra vez, a todos los que seguís esta serie de Tutoriales de aprendizaje del arte del crackeo, olee ¡!!. Agradezco los Emails tan cariñosos que me enviáis, pero no tengo tanto nivel como muchos de vosotros creéis , es mas yo también soy un Newbie mas.

Víctima, la versión 3.1 del Revival. Este programa es una utilidad para recuperar archivos borrados o dañados tanto en fat 12, 16, 32. Existen 2 versiones 3.1, una parece ser que es para utilizarla desde un diskett y ocupa unos 500KB ( que es la que utilizaremos) la otra ocupa 1.1MB y creo que la utilidad en si no aporta nada nuevo con respecto a la pequeña. La podéis coger de:

http://www.revival2000.com/revflp31.zip

http://www.chollian.net/~ship3/revflp31.zip

Este programa nos da una Evaluación de 30 días, al inicio nos presenta un típico nag para insertar el S/N , y por si fuese poco tenemos una limitación de solo tres archivos recuperables por sesión, Que evaluación tan asquerosa solo por eso será nuestra víctima je je je.

Comportamiento del programa. Al ejecutar el programa nos sale el nag, rellenemos con los datos que queramos y pulsamos Register, como era de esperar el típico mensaje de The serial Number is invalid. Y si pulsamos cancelar entramos directamente al programa, con la limitación de recuperar solo tres archivos.

Si queréis podéis tracear la ejecución del programa con el regmon, filemon, Techfacts, ¿? Para que ¿? Pues para ver donde se guardan los datos del registro, con el filemon podemos ver si guarda datos o coge datos de algún archivo que desconozcamos etc. Enfinn que siempre es recomendable utilizar todas nuestras herramientas para saber lo mas posible sobre el programa, esto nos evitara muchos quebraderos de coco.

Herramientas, W32dasm y un HexEdit, utilizaremos el W32dasm en vez del Softice, porque es interesante como actúa este programa, quizás el próximo manual lo haremos con el softice y capturaremos su S/N valido.

 

 AL ATAKE

 

Ataque: A partir del mensaje The serial Number is invalid localizaremos la rutina que verifica si es correcto nuestro S/N y la modificaremos en beneficio nuestro.

Como siempre lo primero hacer una copia de Revival.exe para editarla con el HEXedit, y el archivo original lo desensamblamos con el W32dasm.

Bueno tenemos desensamblado el revival.exe y editado con el Hexedit una copia,

Que es lo primero que podemos hacer.... en efecto, localizar The serial Number is invalid. En el Wdasm para eso pulsamos el botón [strn-ref] esto nos muestra una ventana con todas las cadenas de caracteres ( frases ) que el W32Dasm interpreta como tal.

Y enseguida la localizamos, ahora hacemos doble clip encima de la frasecita para que nos lleve a la parte del código donde de aloja, y aparecemos en :

* Posible Reference to Dialog: DialogID_008A, CONTROL_ID:00FF, ""

|

:004068E3 6AFF push FFFFFFFF

:004068E5 6A30 push 00000030

* Possible Reference to String Resource ID=61215: "The Serial number is invalid"

:004068E7 681FEF0000 push 0000EF1F --- Aparecemos AQUÍ

:004068EC E8A7750300 call 0043DE98

:004068F1 8BCE mov ecx, esi

:004068F3 E860AA0200 call 00431358

como siempre cliquearemos nuevamente sobre The Serial number is invalid por si hubiese mas referencias a esta frase, y en efecto volamos asta:

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:

|:00445510(C), :00445518(C)

:00445533 8DBE90000000 lea edi, dword ptr [esi+00000090]

:00445539 81F900FF0000 cmp ecx, 0000FF00

:0044553F 7208 jb 00445549

* Possible Reference to String Resource ID=61215: "The Serial number is invalid"

|

:00445541 C7071FEF0000 mov dword ptr [edi], 0000EF1F ---- Aparecemos AQUI

:00445547 EB10 jmp 00445559

Que pasa ahora por cual empezamos ¿?¿?¿?. Veamos que hay alrededor en la primera referencia y mirando por encima, nos encontramos con el código donde posiblemente

Se compara o se genera el registro valido, por que ¿? Mirar :

* Posible StringData Ref from Data Obj ->"Name"

|

:004068A9 6814C24500 push 0045C214

:004068AE E8BD040000 call 00406D70

:004068B3 83C408 add esp, 00000008

:004068B6 8B8614010000 mov eax, dword ptr [esi+00000114]

:004068BC 50 push eax

* Possible StringData Ref from Data Obj ->"Company"

|

:004068BD 680CC24500 push 0045C20C

:004068C2 E8A9040000 call 00406D70

:004068C7 83C408 add esp, 00000008

:004068CA 8B07 mov eax, dword ptr [edi]

:004068CC 50 push eax

possible StringData Ref from Data Obj ->"Serial"

 

Y ahora veamos que hay alrrededor de la segunda referencia a nuestro mensaje de error ¿¿¿??? a mi parecer nada interesante, creo que lo mas lógico es centrarnos en el código de la primera referencia a el mensaje de error.

Llegados a este punto pensemos, si habéis seguido los otros manuales sabréis que lo primero que suelo buscar es un salto después de una comprobación tipo Test eax,eax o call xxxxxxx, que le diga al salto ( je, jne etc.) si de tiene que ejecutar o no , dependiendo de si hemos acertado con el S/N (numero de serie) o no, este salto debe tener unas características como... Si el registro es falso salta a The Serial number is invalid pero si es valido no salta y sigue ejecutándose.

Si os fijáis no existe ninguna cadena de texto que nos de las gracias cuando el programa es registrado correctamente tipo Thank You for register, con lo cual nos imaginaremos que si registramos el programa simplemente no mostrara el aviso de error y entraremos directamente en el programa, igual os parece una tontería este razonamiento pero creerme que no lo es. Bueno pues no se hable mas y a analizar el código que hay encima de la primera referencia a The Serial number is invalid

Bueno a buscar el salto magico, nos centramos en al primera referencia a The Serial number is invalid. y Teniamos lo siguiente.

:0040687E 8BCF mov ecx, edi

:00406880 E8D9F00200 call 0043595E

:00406885 50 push eax

:00406886 E815CAFFFF call 004032A0

:0040688B 83C404 add esp, 00000004

:0040688E 85C0 test eax, eax

:00406890 7451 je 004068E3

:00406892 C7465C01000000 mov [esi+5C], 00000001

:00406899 83BE2001000000 cmp dword ptr [esi+00000120], 00000000

:004068A0 7438 je 004068DA

:004068A2 8B8618010000 mov eax, dword ptr [esi+00000118]

:004068A8 50 push eax

* Possible StringData Ref from Data Obj ->"Name"

|

:004068A9 6814C24500 push 0045C214

:004068AE E8BD040000 call 00406D70

:004068B3 83C408 add esp, 00000008

:004068B6 8B8614010000 mov eax, dword ptr [esi+00000114]

:004068BC 50 push eax

* Possible StringData Ref from Data Obj ->"Company"

|

:004068BD 680CC24500 push 0045C20C

:004068C2 E8A9040000 call 00406D70

:004068C7 83C408 add esp, 00000008

:004068CA 8B07 mov eax, dword ptr [edi]

:004068CC 50 push eax

* Possible StringData Ref from Data Obj ->"Serial"

|

:004068CD 6804C24500 push 0045C204

:004068D2 E899040000 call 00406D70

:004068D7 83C408 add esp, 00000008

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:004068A0(C)

|

:004068DA 8BCE mov ecx, esi

:004068DC E85EAA0200 call 0043133F

:004068E1 EB15 jmp 004068F8

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:00406890(C)

|

* Possible Reference to Dialog: DialogID_008A, CONTROL_ID:00FF, ""

|

:004068E3 6AFF push FFFFFFFF

:004068E5 6A30 push 00000030

* Possible Reference to String Resource ID=61215: "The Serial number is invalid"

|

:004068E7 681FEF0000 push 0000EF1F – Aparecemos Aqui

:004068EC E8A7750300 call 0043DE98

:004068F1 8BCE mov ecx, esi

:004068F3 E860AA0200 call 00431358

Pues vemos que un poco mas arriba de donde estamos hay un salto precedido de una llamada

:004068DC E85EAA0200 call 0043133F

:004068E1 EB15 jmp 004068F8 salto incondicional

Primero nos fijamos la direccion a la que apunta este salto jmp 004068F8 veis que si este salto se ejecuta se pasaría el mensaje de Invalid con lo cual no nos podría imprimir "The Serial number is invalid" y por si quedase alguna duda encima es un salto Incondiciona ósea que salta de todas todas, no importa el valor que le asigne call 0043133F saltara por cojones, deducciones... esto no es lo que buscamos, sigamos hacia arriba y enseguida vemos otro salto.

:00406899 83BE2001000000 cmp dword ptr [esi+00000120], 00000000

:004068A0 7438 je 004068DA

Este ya no es un salto incondicional, saltara o no saltara dependiendo del valor que le asigne la comparación que tiene arriba, Pero si os fijáis en la dirección a la que puede saltar nunca llegaría a The Serial number is invalid ya que :004068A0 7438 je 004068DA esta dirección nos lleva al salto que acabamos de analizar (:004068E1 EB15 jmp 004068F8) entonces si se ejecuta se pasaría el The Serial number is invalid gracias a jmp 004068F8 y no imprimiria el mensaje de error

Lo entendéis.. ¿?,bueno bueno pues a seguir buscando y justo encima otro salto mas

:00406886 E815CAFFFF call 004032A0 – Comprueba si el reg es correcto

:0040688B 83C404 add esp, 00000004

:0040688E 85C0 test eax, eax

:00406890 7451 je 004068E3 Nuestro querido salto

Pues sin lugar a duda este si es :00406890 7451 je 004068E3 como veis si se llegase a ejecutar el salto nos manda directos a The Serial number is invalid

Lo que ocurre aquí es que 00406886 E815CAFFFF call 004032A0 este call va directo a el código que genera el S/N, por lo tanto según el S/N que metamos llegara a este call y aquí se decide si je 004068E3 se ejecuta o no, y lo que interesa es que no se ejecute, pues de lo contrario toma ventanazo con The Serial number is invalid ale vamos a parchearlo, la mejor manera de que no se ejecute es eliminándolo. Lo primero localizar el offset de je 004068E3 que si miráis en la barra de estado ( abajo ) del W32dasm veréis @Offset 00005C90h y de aqui la h no se utiliza y los 4 ceros anteriores no hacen falta ósea 5C90 es nuestro OFFSET

Vamos al Editor HEX que lo tenemos abierto y con una copia de revival.exe editada

Y en Goto ponemos la dirección de offset 5C90 aceptamos y nos lleva a 7451 C746 Y lo cambiamos por 9090 C746 ya hemos eliminado el salto, si ahora desensamblaríamos la copia de revival. Exe y buscamos la dirección donde estaba el salto nos encontraríamos esto

:00406886 E815CAFFFF call 004032A0 – Comprueba si el reg es correcto

:0040688B 83C404 add esp, 00000004

:0040688E 85C0 test eax, eax

:00406890 90 NOP Un byte de el salto

:00406890 90 NOP y el otro byte

No nos desviemos del tema ya hemos parcheado ahora salvamos el parcheo de la copia, y la ejecutamos para ver si todo es correcto, Run Copia de revival.exe

Sale el nag rellenamos con los datos, Register y directos al programa miramos en help y han desaparecido todo tipo de referencias a registrarnos, si probamos el programa también se ha quitado la limitación de solo 3 archivos, ósea que estamos registrados. Cerramos el programa y lo ejecutamos nuevamente para ver si se mantiene el registro, pero ooooooohhhh desgraciadamente no se mantiene, aunque si metemos los datos nuevamente otra vez registrado. Esto suele ocurrir amenudo, Por que creéis que puede ser ¿?

Pensar............................................................. Yaa   ¿? Pues parece ser que cuando se inicia el programa comprueba nuevamente si estamos registrados, pero como es posible, si tenemos parcheado el salto que nos mandaba al Invalid serial entonces o hay otra rutina que hace lo mismo o se llama a la misma rutina desde otra parte del programa ( Gracias Champion por tus consejos sobre este tema  ) recapitulemos. Recordáis que teníamos un call que llamaba a una dirección de memoria donde comprobaba si el reg era valido o no y según la comprobación hacia que se ejecutase el salto que hemos parcheado o no.

:00406886 E815CAFFFF call 004032A0 – Comprueba si el reg es correcto

:0040688B 83C404 add esp, 00000004

:0040688E 85C0 test eax, eax

:00406890 7451 je 004068E3 este lo tenemos parcheado

como estaba comentando o hay otra rutina completa de comprobación ( que no creo, Ya que la mayoría de los programadores tienden a la vagancia) o desde otro punto del programa cuando este esta empezando a ejecutarse, se hace otra llamada a 004032A0 pues lo mas practico en este momento es ir al W32dasm y buscar si hay mas llamadas ha esa dirección de memoria, como buscar pues pinchamos el botón de la linterna ( find text ) y escribimos la dirección de memoria 004032A0 y nos aparece la primera que es la que ya hemos parcheado volvemos a buscar y enseguida nos aparece otra en

:004117E0 E8BB1AFFFF call 004032A0 à Aquí esta la segunda llamada

:004117E5 83C404 add esp, 00000004

:004117E8 8B4DF0 mov ecx, dword ptr [ebp-10]

:004117EB 85C0 test eax, eax

:004117ED 7409 je 004117F8à salto hacia las rutinas de error

:004117EF C7415001000000 mov [ecx+50], 00000001

:004117F6 EB3D jmp 00411835

=======================================================

00406886 E815CAFFFF call 004032A0 -> primera llamada ==

004117E0 E8BB1AFFFF call 004032A0 -> segunda llamada ==

=======================================================

Lo veis claramente no un nuevo call hacia la misma dirección que el otro, por lo tanto una solución seria eliminar completamente este call ( siempre y cuando no afecte a otras partes del programa ) para eliminarla solo habrá que cambiar en la dirección de offset 10BE0 ---------- E8BB 1AFF FF83 C404 POR 9090 9090 9083 C404

O si os fijáis tenemos el salto 004117ED 7409 je 004117F8 que si se ejecuta va a las rutinas de error (no explicare lo que ocurre si se ejecuta el salto por que entraríamos en detalles de ASM y posiblemente os confunda mas ,dado que yo no se ASM)

Pues eso podéis inutilizar o el call 004032A0 como ya hemos visto o el salto

004117ED 7409 je 004117F8 que seria cambiar en Offset 10BED 7409 C741 5001

Por 9090 C741 5001

Salvamos nuevamente los parcheos y ejecutamos copia de revival.exe y ahora ya no hay ni ventanas ni nada referente a registrarnos ha desaparecido la limitación de 3 archivos ósea programa petado. :-D

Os encontrareis con muchos programas que funcionan de esta manera, ósea que tener en cuenta este manual J

Lo habéis entendido si no ¿? Cualquier duda ya sabéis me dais un toque

Cualquier Duda, Sugerencia, Critica etc. A

Email Kf_karpoff@hotmail.com     URL: http://welcome.to/karpoff

Un Saludo a TODOS/AS. (Karpoff)

Este material es solo para uso educativo, por ahora los cracks son ilegales.

 

Karpoff Spanish Tutor: Pagina dedicada a la dibulgacion de informacion en Castellano, sobre Ingenieria Inversa y Programacion. Email "Colabora con tus Proyectos"
www.000webhost.com