Karpoff Spanish Tutor

Programa:

WinAccelerator v1.1


 

PROTECCION: serial name
Descripcion: Acelerador de aplicaciones y del rendimiento general del Sistema.
Dificultad: Principiante++
DOWNLOAD: http://winaccelerator.8m.com 
Herramientas: SoftICE v3.x; IDA v4.0; W32Intro; FileInfo.
CRACKER: LEiRUS   FECHA: 22/09/2000

 

 INTRODUCCION

Ya estamos aquí de nuevo, con mi 5º TUT ya en mi haber, que no es poco.

Bueno, nuestra víctima, como reza el encabezado, se trata esta vez de WinAccelerator v1.1. Es un programa un tanto pobre, pero eficaz, que realiza su trabajo sin rechistar: acelerar el sistema para que se inician las aplicaciones más rápido. He de decir que su programación está plagada de errores, que vamos a ir descubriendo a lo largo del tutorial.

Adelanto que este tutorial no va más allá de lo que hemos o habéis visto por ahí, sino que es una forma divertida de ver como un programa realiza las comprobaciones necesarias para protegerse a sí mismo, algo que por cierto lo hace realmente mal, como veremos en adelante.

Las herramientas que pido no son nada del otro mundo. Quizás me exceda en el uso del W32Intro, pero es sólo con el fin de enseñar algo más acerca del IDA, el desensamblador al que va ir orientado este TUT.

En fin, que ha llegado la hora de empezar

 

 AL ATAKE

UN APERITIVO CON SICE 
Siempre que ataquemos un programa, lo vamos a hacer directamente por el SiCE. Al 
poner para capturar serial's. Si no sabes cuales son (a estas alturas deberías saberlos), te aconsejo que te leas las crackers notes, traducidas por Txeli y que puedes encontrar en la compilación del ProfesorX.

Comprobamos como el Hmemcpy de toda la vida no pica, pero el messageboxa sí lo hace. Por cierto, y haciendo un inciso, he de decir que según el programa, te da un "Erro" en ven de un "Error". Estos mierdas de programadores comerciales no hacen absolutamente nada bien. En fín, que le damos a F11 y anotamos la dirección desde donde se llama a messagebox.

Con eso y con un bizcocho a las ocho, tenemos datos suficiente como para analizarlo más detenidamente con una lista muerta. Esta vez vamos a elegir IDA. Pero antes debemos comprobar que no está empaketado. 

ANALIZADO Y DESEMPAKADO: UNA RUTA ESCABROSA 

Después de comprobar que con el SiCE lo tenemos difícil, decidimos desempakarlo. Para ello analizamos el EXE. En este caso, y como siempre he hecho hasta ahora, vamos a utilizar una estupenda herramienta que nos va a hacer el favor de analizar el archivo por nosotros. Nos referimos al pizpireto FileInfo. Le damos ahí con caña y nos dice que está empaketado con PECompact.

En esto que caemos en la cuenta que ProcDump tiene en su Script este empaketador, así que sin más preámbulos y antes de que nos ceguemos con bits de información, ejecutamos la utilidad de G-RoM, y lo intentamos desempakar. Peeeeeeeeeeero, descubrimos que WinAccelerator se ejecuta como un VxD cualquiera, lo que quiere decir que se pone en la barra de tareas junto a los iconos tradicionales que allí se alojan. Por tanto, ProcDump y su Script fallarán estripitosamente si intentamos desempakarlo. Al menos eso fue lo que a mi me pasó. Pero tranquilos, aún tenemos un recurso más: W32Intro.

¿Cómo?, ¿Que no habéis oído hablar de ese programa?. Pues se trata simplemente de un desempakador/desencriptador universal y que acepta multitud de formatos. Lo podéis encontrar en la WEB de K-FoR, en la sección Dumper's / Unpacker's de las tools. Pues bueno, realizamos el desempakado (no creo que deba explicar el funcionamiento del programa porque es extremadamente sencillo).

Ahora ya estamos preparado para desensamblarlo con el IDA.

LA BESTIA PARDA
Como dije en la introducción, este tutorial estaba básicamente encaminado a explicar el funcionamiento del IDA, un magnífico desensamblador creado por DataRescue (interesante nombre).

En primera instancia, he de decir que IDA no es como los demás desensambladore habituales como W32Dasm o demás. IDA utiliza una nueva tecnología que es sorprendente. Estamos hablando de FLIRT, una tecnología que es capaz de reconocer instrucciones de los lenguajes en que han sido escritos los programas a partir de un listado en ensamblador básico. Esto nos permitirá reconcer funciones en C como strcmp y demás. Pero bueno, de momento no vamos a utilizar esto para nuestro fines. Esto que he dicho es para que lo sepáis, simplemente. También os lo digo porque el desensamblado en IDA tarda muy poco, lo que pasa es que después viene el reconocimiento de las funciones, variables, estructuras, y claro, esto no se hace precisamente en un pis-pas, tarda lo suyo. Sin embargo, con un programa del tamaño del WinAccelerator, no tardaremos casi nada incluso en las máquinas más antiguas.

Una cosa, el archivo que vamos a desensamblar es el que previamente hemos dumpeado, no el original. Digo esto porque seguro que hay mucho bestia por ahí intentando desensamblar un archivo empaketado.

Bueno, suponemos que el IDA ya ha terminado de procesar. Ya tenemos la lista muerta. Pero antes, voy a explicar un poco la interfaz del IDA y como se utiliza:

 

Esta es una pantalla típica del IDA. Vamos a ir explicando paso a paso cada una de las secciones.

En primer lugar, tenemos una línea, al principio del desensamblado que pone "SUBROUTINE", que nos indica que es el comienzo de una subrutina. Posteriormente, aparece el nombre de la misma, o de la función concreta que la regenta. En este caso hablamos de _WinMain@16 que la implementan todos los programas escritos en VisualC. Por supuesto se indica también el tipo de función que es: Proc Near. Posteriormente se detallan las variables y argumentos que le se son pasados a la función: 6 variables y 2 argumentos. También aparece y en color verde la referencia cruzada, desde donde es llamada esta función, vamos. Si situamos el cursor sobre estas líneas y hacemos doble-click, nos aparecerá un menú contextual, con un comando "Jump to cross reference" que nos hará aparecer una ventana en el centro justo del monitor para regocijo y disfrute de todos nosotros. Esta ventana nos muestra todas la referencias a esta función y cómo son llamadas, sin son saltos o llamadas.

Bueno, pues de momento no voy a explicar nada más acerca del IDA. Próximamente voy a sacar un documento hablando específicamente del IDA, de su uso y de mucho más acerca de este genial desensamblador. Baste por ahora.

BUSCANDO LA MessageBoxA 

Ahora, lo que necesitamos es buscar la llamada que se hizo a la MessageBoxA que vimos antes con el SiCE. Bueno, pues lo que vamos hacer es dirigirnos a la dirección de memoria que apuntamos anteriormente.

Cogemos y pulsamos la tecla G o vamos al menú Search --> Jump to Address. Ponemos la dirección y saltamos directamente a la función desde donde se llama a la messagebox. En la referencia cruzada de esta función encontramos 3 referencias. Sin nos damos cuenta, resulta que son tres saltos condicionales.

El primero de ellos comprueba que la longitud del serial que hemos introducido es de diez caracteres. El segundo y el tercero hacen comprobaciones varias que no vienen al caso.

Si nos vamos a SiCE y, en cada uno de estos saltos, modificamos el flag Z en cada ocasión, resulta que nos sale una ventanita de registrado. ¿Que dices?, ¿que nos hemos comido tanto la perola con esta mierda de programa y hemos hecho tanto como para no conseguir un serial?. Efectivamente, así es, pero hemos conseguido algo prodigioso: Encontrar un programa que se registre sin tener que modificar nada, y sin conseguir el serial.

Os preguntaréis como determina el programa para saber si estamos registrados o no. Pues eso lo explico más abajo.

FUNCIONAMIENTO TEÓRICO DEL PROGRAMA 

Básicamente, lo que hace el programita este, es comprobar que hay una entrada en el registro que se llame Prc y que contenga algo. Para los que quieran registrar el programa, ahí va como hacerlo: Abrimos el REGEDIT, y en HKEY_LOCAL_MACHINE\Software\Alex Klanovskij\WinAccelerator creamos una clave de tipo cadena que se llame Prc y que contenga un número cualquiera de 10 caracteres de longitud.

El mierda del programa se limita a comprobar que existe esta clave y que su valor es una cadena de 10 caracteres de longitud. Llegados a este punto, cabe preguntarse porque se martirizan tanto los programadores en idear un algoritmo de validación de serial's que después no van a utilizar. Es que de verdad, eh?.

DESPEDIDA Y AGRADECIMIENTOS 

Siempre, siempre, siempre, he de agradecer a mis compañeros de grupo, RAZiEL y ViPER el apoyo recibido así como su gratitud y ánimo. Seguid siempre así, chicos, que pronto conseguiremos llegar a lo más alto.

He de agradecer también por supuesto a Karpoff, por la genial página que ha conseguido construido y que se ha convertido en un gran referente en el mundo del cracking hispano. Gracias, Karpoff.

También tiene su poquito de pastel el tan afamado y querido ProfesorX, que tenemos que dar las gracias por el inmenso trabajo que supone la compilación, que aunque parece ser que últimamente está sufriendo numerosos percances, estamos seguros de que conseguirá engrandecerse aún más.

Por último, he de agradecer la visita de todos los que habéis visitado mi página y la de mi grupo, porque me hace muy feliz que hayamos conseguido lo que hemos conseguido. Y todavía queda mucho más, porque esto es sólo el principio. Gracias a todos los crackers del mundo por ser como sois (que profundas me han salido estas frases 8·).

"AHORA SÉ PORQUÉ LLORÁIS LOS HUMANOS, PERO ES ALGO QUE YO NUNCA PODRÉ HACER"
Terminator 2: El Juicio Final.

http://go.to/leirus  - leirus@telepolis.com 

http://pagina.de/kfor  - kfor@telepolis.com 

 

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