## Tutoríal de Crackeo Para Newbies desde Cero 24/10/99

Por Karpoff ## KARPOFF-NEW 98/99 ##

PROYECTO 14 ##

 

- Regitry Studio V1.01

INTRODUCCION

HE hola nuevamente a todos!!! Si, después de unas semanas sin escribir nada por fin saque un poco de tiempo para presentaros otro proyecto, mi falta de tiempo en parte es por vosotros que habéis conseguido llenarme el buzón de correo con las 1000 y una pregunta J . Muchas de las preguntas que hacéis están relacionadas con..

Que significa call, jmp, ret, etc, por que EB = JMP 74 = JE etc.

Este tipo de preguntas os recomiendo que echéis un ojo a manuales o libros sobre ASM, que en la red tenemos muchisimos manuales sobre ASM para todos los niveles, no obstante aclarare alguna de estas dudas sin extenderme demasiado.

También os pido que antes de preguntarme cualquier duda busquéis en otros manuales que seguro que encontrareis la respuesta, y en caso de no encontrar ninguna respuesta podéis contar con migo pero buscar primero J por que no doy abasto intentando responder todas las dudas, y generalmente cada email es un programa que tenéis problemas para petarlo, con lo cual si os quiero ayudar tengo que conseguir el programa y eso multiplicado por 50 os podéis imaginar.

 

En la pagina de WKT existen unos foros sobre Cracking donde podéis exponer vuestras dudas y seguro que encontrareis ayuda, eso si os digo lo mismo, antes de postear una duda en el foro aseguraros de que la respuesta no este en cualquier manual oseea mirar un poco antes de exponer dudas, para acceder a estos foros podéis entrar directamente desde la pagina principal de mi Web o desde la pagina de WTK cuya dirección esta en la pagina de links de mi Web.

 

1ª PARTE

El programa Víctima de hoy es un estupendo editor del registro de Windows, con muchas funciones y utilidades, lo podéis coger de:

http://tucows.teleweb.pt/files4/rs1inst.exe (440 KB)

 

Herramientas

SoftIce V3x o posterior

W32Dasm V8.93

Editor Hexadecimal (cualquiera yo utilizare. Hex Workshop V2.54)

 

Comportamiento del Programa

Al ejecutar el programa no nos muestra ningún tipo de Nag ni tansiquiera nos dice el tiempo que nos queda de evaluación, desde el programa y pulsando sobre studio tenemos la opción de registrarnos mediante el típico nombre y s/n, una vez que hemos agotado el tiempo de evaluación y ejecutamos nuestra víctima nos muestra la opción para registrarnos si fallamos con los datos no hay posibilidad de que el programa se inicie.

Ataque

Bien lo típico seria Introducir los datos del registro al azar y mediante el mensaje de error intentar suprimir la rutina de comprobación, pero vamos a atacarle a partir de que el programa expire, de tal manera una vez pasada la evaluación nunca llegue a mostrarnos la ventana de registro haciendo así a nuestra víctima incaducable, por que escojo este método?? Por que este programa tiene una pequeña protección que cuando modificas cualquier parte del código, el programa no se inicia con lo cual no podríamos parchearlo.

Lo primero es estudiar que ocurre cuando modificas el código, por que el programa no se inicia y una vez localizado esto y modificado evitaremos que que el programa caduque. Osea que manos a la obra.

 

2ª Parte

A trabajar, bien como siempre lo primero es prepararnos todo para trabajar cómodamente, iniciamos Windows cargando el SoftIce, hacemos una copia del ejecutable RegStudio.exe con el nombre Studio.exe, desensamblamos el original y editamos con el editor Hex la copia Studio.exe y por ultimo adelantamos la fecha de Windows 1 mes para trabajar con el programa expirado, ya tenemos todo a punto

Bueno vamos a ir paso a paso por que como dije quiero aprovechar para explicar algunas dudas.

Ejecutamos RegStudio.exe y lo primero que vemos es una ventanita con la opción de registrarnos y con el siguiente aviso "Trial period has expired. Do you tal y tal"

Directamente vamos al W32dasm y buscamos esta cadena de texto en las strign dataa Refernces pulsando sobre [STRN-REF] hay podemos ver la referencia que buscamos, algo que me llamo la atención es que hay poquisimas referencias a cadenas de texto por ejemplo no vemos ninguna que haga referencia a cuantos dias de evaluación nos quedan, ni el típico invalid code, Thank you for register etc. Y el motivo de esto es la librería regStudio.dll donde se encuentran todas estas y muchas mas de hecho husmeando un poquito si la desensambláis podéis modificar la rutina que decide si el reg metido es correcto o no y que os acepte cualquier numero de registro, además no cuenta con la protección que tiene el ejecutable ósea que modifiques lo que sea el programa se inicia, pero creo que es mas interesante atacar al ejecutable y romperle el royó anti inicio que tiene.

Bueno pulsamos sobre Trial period has expired. Do you y vamos a:

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

|:00401351(C)

|

:0040135C 83F801 cmp eax, 00000001

:0040135F 7509 jne 0040136A – Salto Interesante

:00401361 5F pop edi

:00401362 5E pop esi

:00401363 81C4F4000000 add esp, 000000F4

:00401369 C3 ret – Retorno Cabron

 

 

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

|:0040135F(C)

|

:0040136A 6A04 push 00000004

:0040136C 6824564000 push 00405624

* Possible StringData Ref from Data Obj ->"Trial period has expired. Do you "

->"want to register now?"

|

:00401371 68D4504000 push 004050D4 – Aquí Aparecemos

:00401376 6A00 push 00000000

 

Viendo que tenemos un jne en 0040135F es lógico pensar que si este no se ejecuta pillara el retorno (ret) evitando así el mensaje de expiración,

ACLARACION A VUESTRAS DUDAS: Como viendo un jne o jmp o una Call sabemos a donde va a parar ¿?

Si te fijas todos los saltos (jne, je, jmp etc.) llamadas (call)

0040135F 7509 jne 0040136A

0040135F ---- Direccion de memoria en la que se encuentra el salto

7509 ----- el 75 representa en Hexadecimal a Jne para esto nos sirve el editor hex para modificar estos valores y beneficiarios, el 09 --- este valor dependerá de la distancia a la que se dirija el salto (jne)cuanto mas lejos valla mayor será el valor.

0040136A --- La dirección a donde ira el jne si este llegase a ejecutarse.

Entonces sabemos con ver 0040135F 7509 jne 0040136A que este salto iría a la dirección de memoria 0040136A que en este caso y viendo el código del programa que estamos estudiando nos llevaría a 0040136A 6A04 push 00000004

Bueno esto queda aclarado

CONTINUAMOS Estabamos en lo interesante que seria modificar

0040135F 7509 jne 0040136a por un nop nop para que no se ejecute el salto y no llegue nunca a mostrarnos el mensaje de expired, probemos localizamos el offset de este salto que es 135F y nos vamos al editor hex cambiamos el 7509 por un 9090 con esto el salto queda eliminado ya no existe (9090 es = a nop nop que en asm son instrucciones que no hacen nada (otra duda)) probamos a ejecutar studio.exe y como os comente el programa no hace nada antes de abrirse ya se ha cerrado, veamos por que puede ocurrir esto.

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

|:00401351(C)

|

:0040135C 83F801 cmp eax, 00000001

:0040135F 7509 jne 0040136A – Salto Interesante

:00401361 5F pop edi

:00401362 5E pop esi

:00401363 81C4F4000000 add esp, 000000F4

:00401369 C3 ret – Retorno Cabron

Bueno pues vemos que si quitamos del medio el jne la siguiente instrucción importante es el retorno ( RET) en azul ahora tenemos que averiguar que call es el responsable de que este el ret.

((otra duda) que es Ret?? Los ret son instrucciones de retorno de una llamada (call) osea que siempre que veamos un

Call xxxxxx para seguirlo iremos a la dirección xxxxxx y todo lo que se encuentre entre el call xxxxxx y el siguiente ret será el contenido y la ejecución de esa llamada (call)))

CONTINUAMOS para localizar la llamada (call) responsable de que exista ese ret no tenemos mas opción que utilizar nuestro querido y amado SoftIce, ejecutamos la consola del softice cargamos el archivo RegStudio.exe para saber donde se encuentra el call responsable podemos poner un BreakPoint directamente a el salto que hemos parcheado antes (aseguraros de que el ejecutable que cargáis en el softice es el original y que no es el que hemos parcheado) pulsamos el botón de los engranajes (load)cuando nos salga el típico mensaje del softice aceptamos y entramos directos al soft (recordar la dirección del salto para ponerle un BP)

Bpx 0040135F

Pulsamos F5 para que siga la ejecución del programa e inmediatamente se para en la dirección a la que le pusimos el BP, fígaros como en

0040135F 7509 jne 0040136A – que es donde se para el soft

hay a su derecha una flecha indicando que este salto se ejecutara a la dirección de memoria que apunta, claro se salta el RET que nos interesa, ósea que parcheamos el jne como antes convirtiéndolo en un nop nop para hacerlo desde le soft metemos el commando a que es ensamblar

a 40135f [Intro] en azul lo que ponemos y pulsamos Intro, seguimos los pasos

- 0040135f nop [Intro]

- 00401360 nop [Intro]

- 00401360 [Intro]

quitamos el BP para que nos moleste

bc *    - Quitar todos los BP

y ya hemos ensamblado el salto suprimiéndolo ahora vamos pulsando F10 hasta llegar al ret otro F10 y justamente nos lleva a

:0040103A E8C1020000 call 00401300 – La responsable del ret

:0040103F 85C0 test eax, eax

:00401041 0F85BE010000 jne 00401205 – muy interesante

Tenemos localizado la llamada responsable del ret hechemosle un ojo, cuando parcheamos antes el primer salto y lo convertimos en mierda el ret nos trae a

0040103F 85C0 test eax, eax – aquí

aquí se compara los valores de eax si estos son iguales hará que se ejecute

00401041 0F85BE010000 jne 00401205 – si se ejecuta chungo

si se ejecuta nos manda a

:00401205 5F pop edi -- aqui

:00401206 5E pop esi

:00401207 5D pop ebp

:00401208 33C0 xor eax, eax

:0040120A 5B pop ebx

:0040120B 81C4F4010000 add esp, 000001F4

:00401211 C21000 ret 0010 – nos saca del programa

bueno si quereis seguir todo el proceso con el soft os lo recomiendo si no entendéis lo que ocurre,

al ejecutarse el salto 00401041 0F85BE010000 jne 00401205 veis que nos lleva a una serie de instrucciones que nos sacan inmediatamente del programa he aquí la estúpida protección, si es que esta puesta como tal aunque creo que si si os fijáis en cualquier pedazo de código encontráis un ret que si lo seguís con el soft nos trae al mismo sitio.

Ya solo nos queda hacer que no se ejecute nunca este salto, para ello lo eliminamos con una serie de 6 nop o 90s. Localizamos el offset que es 1041 y vamos a nuestro editor hex donde cambiamos 0F85BE010000 por 909090909090 salvamos los cambios y el ejecutable funciona perfectamente sin limitaciones de tiempo.

Recordar que tenemos que parchear los dos saltos que hemos analizado, acordaros también de volver a poner la fecha actual a Windows.

 

Pues esto es todo. Que os a parecido.. interesante no¿? Como siempre mi mayor deseo es que entendáis esto como yo intento explicarlo.

Un saludo para todos/as (karpoff)

No responderé a los emils con pedidos de Cracks ni a las preguntas cuya respuesta se pueda encontrar en cualquiera de estos tutoriales, por lo demás como siempre podéis contar con migo.

 

EMAIL: Kf_karpoff@hotmail.com

URL: http://welcome.to/karpoff

http://members.xoom.com/kf_karpoff

El uso de este material es solo para uso educativo, por ahora los cracks son ilegales cada cual es responsable del uso que le de a este tutorial, el autor no se hace responsable de nada.

Tutorial Descargado de Karpoff Spanis Tutor

www.000webhost.com