Karpoff Spanish Tutor

Programa: InWatch 95 Relase V1.3a


 

PROTECCION: Name / Serial
Descripcion: Programa Para Monitorear el systema, bueno para comprobar los cambios que hacen los programas al instalarlos.
Dificultad: Facilon
DOWNLOAD: http://members.xoom.com/_XOOM/kf_karpoff/Utilidades/Installw.zip
Herramientas: Softice v3x+, W32Dasm , Editor Hexadecimal
CRACKER: karpoff   FECHA: 11/09/99

 

 INTRODUCCION

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

Por Karpoff ## PROYECTO 9 ##

Hola a todos/as !!! Lo primero decir que esto no va ha ser un manual como los anteriores, voy a intentar demostraros el poco interés que ponen la mayoría de los programadores en proteger su software, y por lo tanto la mierda de software que nos quieren meter. Conocéis alguna utilidad con licencia shareware que merezca la pena pagar¿? Yo realmente no.

Siempre que queremos petar un programa los newbies (novatos) pensamos que tiene que ser super complicado encontrar el punto donde atacar al programa, generalmente queremos petarlo antes de empezar, con lo cual se nos cierra el cerebro y no vemos mas halla de nuestra totxa, os aseguro que si os tomáis las cosas con calma y probáis a modificar en un programa todo lo que creáis que os puede beneficiar en cuanto a la limitación se refiere, podéis flipar, a parte de aprender muchisimo os divertiréis viendo como puede llegar a actuar el programa que modifiquéis.

La víctima InWatch 95 Relase V1.3a parece ser una utilidad para seguir instalaciones, pudiendo ver todo lo que se modifico con una instalación tal, y recuperando el estado anterior a la instalación. Parece que tiene funciones de editor y algunas cosas mas,( el caso es que no conocía este programa y no he tenido la ocasión de probarlo). Lo podéis coger de:

http://members.xoom.com/_XOOM/nakarko/inversa/proggies/Installw.zip

Este es un programa limitado a 30 días, nos arranca con un nag para decirnos que es una versión sin registrar y una vez aceptado nos muestra un nuevo nag soltándonos otra vez el rollo de su limitación a 30 días.

Ataques: vamos a sacar con el SoftIce un numero de registro valido para el nombre que metamos, el proceso que voy a utilizar para capturar el S/N no es corriente, se trata de que sepáis que se puede crackear sin seguir el típico proceso de buscar la rutina de comprobación y a partir de hay comparar el reg falso con el valido.

Os explico como lo haremos, se trata únicamente de buscar en la memoria el n/s valido, porque cuando un programa nos da el mensaje de que el serial no es valido, en ese momento todavía puede estar el reg valido en la memoria, claro esta que para mostrar el mensaje de error en algún punto hizo la comprobación, entonces rastrearemos la memoria en la ventana de datos del softice en busca del posible n/s. este es un método un poco pasota pero os aseguro que con muy buenos resultados, Y con el W32dasm convertiremos la ventana donde tenemos que escribir el nombre y el numero de registro en un generador de S/N validos, ósea que meteremos un nombre cualquiera y sin meter n/s pulsaremos el botón que era para registrarnos, y nos mostrara el numero valido, curioso no¿?

 

 AL ATAKE

 

PARTE 1 BUSCAR UN S/N VALIDO, DE UNA FORMA POCO USUAL

Herramientas Softice, W32dasm, HEXedit, primero empezamos con el soft, ousease que hemos reiniciado nuestro ordenador y hemos cargado el sofice. Bien primero hacer una copia del archivo inwatch.exe para luego editarla con el hexedit, ahora cargamos el original con el softice, pulsamos el botón de los engranajes y nos baos al soft, F5 para vover a windows, aparece el primer nag, pulsamos OK y aparece el segundo nag pulsamaos OK y entramos en el programa vamos a register y pulsamos register now, y ya nos aparece la ventana de registro ( que luego la convertiremos en el generador de n/s validos) rellenamos los datos en mi caso pondré

NAME: karpoff

Regitration Number : 1212121212

Y ahora tenemos que poner un breakpoint que detenga la ejecución del programa justo cuando este, o aya comparado nuestro numero con el valido, que breakPoint poner¿? En anteriores manuales ya explique como saber a que funciones externas llama un programa, en este caso utilizamos la función messageboxexa, pues pulsamos [Ctrl+D] para entrar en el softice y poner nuestro breakpoint

BPX messageboxexa

Pulsamos nuevamente [Ctrl+D] para volver a Windows y pulsamos OK en la ventana del registro, inmediatamente el programa llama a la función messageboxexa e interrumpe la ejecución del programa llevándonos directamente al softice exactamente en

USER32 MESSAGEBOXEXA

015F:BFF52E1C B135 MOV CL,35

Lógicamente estamos dentro de user32.dll y necesitamos saber quien llamo a esta funcion desde inwatch.exe pues nada mas fácil pulsamos F12 y no nos muestra a papa (la rutina padre que llamo a messageboxexa) nos saca del softice a windows y nos muestra el mensage de que no es correcto nuestro numero, aquí es donde podemos empezar a soñar e imaginar y pensar con mucha paz y ciencia, bueno como decía esto ya ha hecho la comprobación y ha decidido que somos unos chicos/as malos/as, pero seamos aun peores, lo ultimo que hicimos en el softice fue pulsar la tecla F12 para que nos llevase a la rutina padre que había llamado a messageboxexa y nos saco a Windows, bueno pues en cuanto pulsemos aceptar en el mensaje de error iremos a parar a la rutina padre ya que esa orden todavía no se ha terminado de ejecutar en el softice Pulsemos aceptar y entramos al soft en

:0042B5B2 E8891B0300 Call USER32!!MESSAGEBOXEXA --- LA RUTINA PADRE

:0042B5B7 57 push edi --- APARECEMOS AQUÍ

Bueno pues yo sigo pensando que el numero correcto todavía debe de estar en memoria, si pulsamos la tecla F2 veréis que en la parte superior del softice nos aparece un nuevo apartado con los registros y los valores que llevan actualmente algo así

EAX=XXXXXXXX ESI=XXXXXXXX ECX=XXXXXXXXX ETC. ETC. ETC.

Si pulsamos con el botón derecho del ratón sobre cualquier registro (EAX, EDX, EBX, ECX,ESI, EDI ETC.) o sobre cualquier dato que veáis se despliega un menú y si escogéis la opción DISPLAY veréis que en la ventana de datos ( en la que se muestran los caracteres) se muestra lo que lleva la memoria en ese momento, mi idea es ir pulsando en cada registro y rastrear la ventana de datos hacia arriba y abajo, Y concretamente si pulsáis sobre ESP y le hacéis DISPLAY podéis ver en la ventana de datos y concretamente en la parte superior izquierda el numero 15757 claro veréis este numero si como nombre escribisteis karpoff, de haber escrito otro nombre veréis otro numero con cinco dígitos, seguramente en otros registros(EDX, EBP, ) también encontréis el n/s valido, solo que tendréis que rastrear arriba y abajo no siempre aparece a la primera, y en muchos programas este método no será valido.Bueno Pues este era nuestro n/s valido, queda entendido no ¿? hay muchas formas de crackear, la limitación la ponemos nosotros, echarle imaginación y veréis.

Los datos del registro se guardan en el archivo C:\WINDOWS\ inwatch.INI para hacer el siguiente experimento tenéis que desregistraros, con borrar el n/s del archivo inwatch.ini ya no estaréis registrados.

PARTE 2 Convertir la ventana de registro en un generador de S/N validos

Pues si con una pequeña modificación en solo dos bytes, haremos que la ventana donde metemos el nombre y el s/n para registrarnos se convierta en un generador de números validos para el programa (curioso no¿?)

Bueno utilizaremos el W32dasm y un editor HEX, desensamblamos el archivo inwatch.exe y con el HEXedit editamos una copia de este mismo archivo, ya hemos desensamblado el archivo, sigamos los pasos tipicos buscamos el mensaje de * Incorrect Registration Number." Y hacemos doble clip, aparecemos en

* Possible StringData Ref from Data Obj ->"Incorrect Registration"

|

:0042B5A6 6841FB4600 push 0046FB41

* Possible StringData Ref from Data Obj ->"Incorrect Registration Number."

|

:0042B5AB 682CFA4600 push 0046FA2CAPARECEMOS AQUI

:0042B5B0 6A00 push 00000000

echemos un vistazo encima de este código para ver que hace que se imprima este mensaje.

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

|

:0042B55F 680DFA4600 push 0046FA0D

:0042B564 FF75F0 push [ebp-10]

:0042B567 E8B4900200 call 00454620

:0042B56C 83C408 add esp, 00000008

:0042B56F 85C0 test eax, eax

:0042B571 742A je 0042B59DSI NO SALTA GENERA EL S/N

:0042B573 6A00 push 00000000

* Possible StringData Ref from Data Obj ->"Registration Number"

|

:0042B575 6818FA4600 push 0046FA18

:0042B57A 8D45CC lea eax, dword ptr [ebp-34]

:0042B57D 50 push eax

:0042B57E FF37 push dword ptr [edi]

:0042B580 E87C4E0100 call 00440401

:0042B585 83C410 add esp, 00000010

:0042B588 FF7720 push [edi+20]

:0042B58B 8B4720 mov eax, dword ptr [edi+20]

:0042B58E 8B4008 mov eax, dword ptr [eax+08]

:0042B591 FF908C000000 call dword ptr [eax+0000008C]

:0042B597 59 pop ecx

:0042B598 E9A5000000 jmp 0042B642

 

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

|:0042B571(C)

|

:0042B59D 3B5DEC cmp ebx, dword ptr [ebp-14]

:0042B5A0 741E je 0042B5C0 – SALTO AL MENSAJEE DE ERROR

:0042B5A2 6A00 push 00000000

:0042B5A4 6A00 push 00000000

* Possible StringData Ref from Data Obj ->"Incorrect Registration"

|

:0042B5A6 6841FB4600 push 0046FB41

* Possible StringData Ref from Data Obj ->"Incorrect Registration Number."

|

:0042B5AB 682CFA4600 push 0046FA2C – APARECEMOS AQUI

:0042B5B0 6A00 push 00000000

Bueno ya veis no¿? No voy a enrroyarme, mas bien resumiré, tenemos un salto en

0042B5A0 si este salto se ejecuta evitaría el mensaje de error, por lo tanto nos registraría cualquier numero, para ello tendríamos que cambiar

0042B5A0 741E je 0042B5C0 por 0042B5A0 EB1E jmp 0042B5C0

EN realidad esto nos aceptaría el s/n que metamos, incluso nos felicita con el típico Tank you for register o similar, pero al iniciar nuevamente el programa vemos que no mantiene el registro, que puede pasar, pues que hay otra comprobación o la misma pero llamado desde otro punto del programa, en cualquier caso no me centrare en buscarla eso os lo dejo a vosotros que esta muy fácil.

Sigamos en 0042B571 742A je 0042B59D otro salto si os fijáis en la dirección de memoria a la que apunta vemos que si salta va directo al salto que hemos analizado antes , pero si lo eliminamos haciendo que no salte entra en el código que genera el s/n valido, y cual fue mi sorpresa al ver que si eliminas el salto convierte la ventana de registro en un keygen, actuando así, metemos un nombre pulsamos ok y en vez de mostrarnos el nag con el aviso de registro aceptado o registro fallido nos muestra un nag diciendo su numero de registro es tal ( alucinante, nunca vi un programa con este comportamiento) bueno para eliminar el salto 0042B571 742A je 0042B59D tendríamos que cambiar los bytes 742A por 9090 solo tenemos que ver la dirección del offset e ir al HEXedit Offset 1BB71 cuando realizeis los cambios salvar el programa ( que es una copia del original claro) y veréis cuando intentéis registraros....

Espero que lo entendáis todo, no me he querido meter en explicaciones profundas por dos razones, una por que ya debéis de tener nivel suficiente para llevar a cavo todos estos cambios sin las explicaciones detalladas de los anteriores manuales, y dos porque en este manual lo que intento es deciros que cualquier forma de crackeo es valida, todo lo que se os ocurra vale no os centréis solo en los manuales, buscar nuevos métodos de ataque.

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