Karpoff Spanish Tutor 1999-2001

Programa:

SI-R


 

PROTECCION: Serial, Limitacion de Tiempo
Descripcion: Gestor de restaurates
Dificultad: Novato
DOWNLOAD: http://www.si-r.com/download_fin.htm
Herramientas: SmartCeck, Softice, Editor Hexadecimal, Pupe
CRACKER: The Pupe's Team crackpe.gif (3908 bytes)   FECHA: 30/09/2001

 

 INTRODUCCION

Este tute está pensado para los inexpertos o poco experimetados en la ingeniería inversa ya que su nivel de dificultad es mínimo. Hemos seleccionado esta cobaya precisamente por eso, su sencillez.
        SI-R está escrito en Visual Basic 6. Su protección es... digamos... casi nula. Un número de serie nos autoriza el uso de este programa durante un periodo de tiempo, determinado por el código introducido. Una vez transcurrido este tiempo el usuario ha de volver a adquirir otra licencia y se le otorga otro código nuevo. Para que SI-R funcione, será necesario tener instalado Microsoft Data Access y Windows Installer, ambos componentes podeis bajarlos desde la página de SI-R.
        Tan solo vamos a utilizar 3 herramientas, Smartcheck (que llamaremos a partir de ahora smc), softice (al que ya llamamos sice) y un editor hexadecimal para parchear el ejecutable, utilizad el que os parezca bien, si usais patcher nosotros estaremos encantados, podeis bajarlo de nuestra página :o). También necesitaremos algún programa que nos informe de los DLL y las funciones que importa, nosotros, por supuesto, usaremos pupe. Habíamos pensado compilar para esta ocasión una nueva versión del veoveo, que también podeis encontrar en nuestra página, para la activación de todos los botones desactivados en SI-R pero al final no ha sido necesario, así que nos guardamos este arma para futuros experimentos y la usaremos en otro tutorial.
        Quiero que quede claro que la programación y el crack tienen algo en común y es que, dependiendo de qué persona esté crackeando y/o programando, los pasos a seguir serán completamete diferentes aunque el fin y resultado sea el mismo. Con esto quiero decir que probablemente otro cracker atacaría esta aplciación por otro flanco y de otro modo diferente consiguiendo indeticos resultados.

Bien, suponemos que ya teneis instalado los 3 componentes necesarios para rodar SI-R y las herramientas. En este caso no es necesario, pero es muy importante observar ciertos detalles de la instalación cuando queremos destripar una aplicación, estos detalles son: Archivos que lee y escribe y claves del registro que lee y escribe. Para ello debereis utilizar file monitor y register monitor. Hablaremos de ellos en otro momento.

    SI-R solo funciona en 800 X 600 y tipo de letra pequeño, tenedlo en cuenta.

 

 AL ATAKE


    Paso 1. Observar los dll y funciones que importa:

        Rodamos SI-R y observamos que además de ocupar toda la pantalla, se ejecuta en primer plano y oculta la barra de tareas. No podemos ver el escritorio y nos hace un desmierde en la configuración de la pantalla. Para poder utilizar las herramientas, mientras está rodando la aplicación, podeis añadirlas al menú inicio, de tal modo que cuando las necesiteis tan solo tendreis que pulsar Ctrl y Esc para que inicio se abra y desde ahí lanzarlas con un click.
        En este momento (tenemos rodando SI-R), nuestro interés se centra en averiguar qué funciones y de qué dll's está utilizando. Lanzamos pupe y sombreamos con un click el proceso SI-R, a continuación pulsaremos el botón derecho del ratón para que se abra el menu de pupe donde activaremos la 'caja de herramientas'. Ahora, sobre la caja de herramientas, buscaremos el modul SI-R.exe, lo sombreamos de nuevo y volveremos a pulsar el botón derecho del ratón para cargar este módulo. En la sección de más herramientas pulsaremos el botón 'Visor F.I.'. Se nos abrirá una ventana donde podemos observar los dll y funciones importados. Vemos que uno de los DLL es MSVBVM60, lo que nos indica que es una aplicación vb6,  y abriendo el arbol observamos las funciones que importa de él. Cerramos pupe y antes de proceder a utilizar smc observamos cómo funciona la aplicación. En el dialogo vemos una bonita foto a la derecha donde al hacer un click se abre otro dialogo con las opciones. Debajo de esta foto hay un relojito muy mono, esto nos sugiere que SI-R hara uso de una función timer para actualizarlo, así que cuando estemos capturando eventos con smc lo haremos de forma rápida y concreta para evitar cargarlo de eventos no necesarios. Veamos qué pasos tendremos que dar para que smc nos capture los eventos que nos interesan. Primero haremos un click sobre la foto. A continuación otro click sobre contratar SI-R. Un pequeño diálogo nos invita a introducir el código de usuario y observamos un código en este diálogo que en nuestro caso es 'c0jnwuwi'. Ya sabemos todo lo necesario para la captura de eventos, anulamos y pulsamos sobre cierre->salir sin cerrar caja para finalizar SI-R.

    Paso 2. Captura de eventos:

        Rodamos smc. En el menú abrimos, buscando la ruta, SI-R. Pulsamos F5 y lo ponemos a rodar. A lo largo de la ejecución, en smc nos aparecerán una serie de errores sin relevancia alguna para nosotros, así que iremos pulsando sobre 'Acknowledge' acada vez que esto suceda hasta que la aplicación esté en marcha. Una vez abierto el diálogo principal de SI-R es muy importante ir directamente al grano y lo más rápido posible para evitar todos aquellos eventos no necesarios. Pulsaremos sobre la foto=>contratar SI-R e introduciremos la cadena '10000002'. Un mensaje de error nos advierte de que el código no es bueno, faltaría más.
        Ya tenemos toda la información que necesitamos almacenada en smc. Cerramos el dialogo de contratar y directamente hacemos cierre y salir sin cerrar caja. Nos encontraremos en smc. Sobre el menú 'program' pulsaremos 'end' para finalizar y a continuación 'file'=>'save as' para guardar todo lo sucedido.

    Paso 3. Busqueda de los eventos que nos interesan.

        Si os fijais, incluso habiendo sido cautos y rápidos en las acciones, vereis que tenemos 800.000 eventos aproximadamente. A nosotros nos interesa saber todo lo que ha sucedido desde que hemos hecho click después de introducir '10000002' dentro de contratar SI-R y sabemos que, para llegar hasta ahí, hemos hecho 3 clicks, unos sobre la foto, otro sobre el botón contratar y otro despues de haber introducido el código. Sobre el menú de smc pulsaremos Edit=>find e introduciremos 'click' para buscar este evento. Seguiremos 'find next' hasta situarnos sobre el tercer evento click que es el que le ha proporcionado a SI-R el número introducido. Procurad tener en las opciones activado Expand all para poder observar eventos dentro de otros eventos. Observareis que se utiliza la función vbaStrCmp de MSVBM60 poco despues del evento click pero esta comparación de cadenas no nos interesa porque todavía no ha operado con lo que hemos introducido, así que seguimos buscando.
    Vereis que algunos eventos después se captura el código del dialogo de contratar 'c0jnwuwi' y el itnroducido por nosotros '10000002'. Con ellos, Si-R realiza una serie interminable de operaciones que dan como resultado una cadena, en nuestro caso '308900576807', después realiza otra serie de operaciones cuyo resultado es '308900808503' y a continuación se llama de nuevo a la función vbaStrCmp pasándole como parámetros estas dos cadenas nuevas. El retorno de la función es un bonito FFFFFFFF, y a continuación la función MsgBox nos muestra el diálogo de numerito no válido. Parece que está todo bastante claro, no?. Nuestro trabajo con smc ha concluido, ya sabemos todo lo que necesitamos, ahora usaremos sice.

    Paso 4. Traceo puro y duro.

        antes de nada, nos aseguraremos que en winice.dat tenemos la siguiente línea:

        EXP=c:\windows\system\msvbvm60.dll

        Esto será necesario para poder interceptar la función vbaStrCmp.
        Reiniciamos el sistema para que sice cargue la nueva configuración y rodamos SI-R hasta llegar al diálogo donde itroducimos el numerito, recordad 10000002.
        Antes de pulsar 'aceptar' entraremos en sice pulsando Crtl+D y pondremos un bonito break point con la orden 'bpx vbaStrCmp'. Pulsamos F5 para volver a win y botón de aceptar para que SI-R capture nuestro código.
        En teoría debería haberse detenido la ejecución y tendríamos que estar dentro de sice pero no es así, vaya, era demasiado fácil, no? La alternativa es repetir la operación y antes de pulsar sobre el botón aceptar entramos en sice (Ctrl+D) y bpeamos hmemcpy con la orden 'bpx hmemcpy'. Salimos de sice (F5) y pulsamos aceptar. Ahora sí estamos dentro de sice... pero en user.

    Paso 5. Busqueda de un punto de ruptura dentro de SI-R

        Nos encotramos dentro de user y no podemos detener la aplicación con un bpx en vbaStrCmp. Pulsamos varias veces F12 dentro de sice para regresar a la aplicación. Despues de 6 F12 observamos que nos encontramos en el módulo MSVBVM60 y con otro F12 nos metemos en SI-R. Ahora es cuestión de ir traceando hasta tropezarnos con una instrucción call [MSVBM60!__vbaStrCmp]. Tendremos que recorrer el código para encontrarla. Una vez encontrado quitaremos todos los bp's con la orden 'bc *' y haremos un doble click sobre call [MSVBM60!__vbaStrCmp] para ponerle un bonito bp. Volvemos a SI-R con F5 y rodamos hasta que sice se detiene en nuestro Break point. Tracearemos con F8 para que nos lleve al comienzo de vbaStrCmp. Una vez dentro, quitaremos todos los bp's con 'bc *' y haremos doble click sobre el comienzo de vbaStrCmp para poder romper luego en él. Salimos con F5 a Si-R. Si alguno de vosotros no encuentra la función buscad dentro de sice en la posición XXX:0058D00C.

    Paso 6. Detener SI-R donde nos interesa.

        Volveremos a pulsar sobre el botón de aceptar para que SI-R capture otra vez nuestro código y ahora sí se dentiene en vbaStrCmp pero recordar que en los eventos se producía la llamada a esta función en dos ocasiones, la primera no nos sirve para nada, así que F5 para que rompa en la segunda.

    Paso 7. Parcheo sobre memoria.

        Sice vuelve a romper. La instrucción anterior a call [MSVBM60!__vbaStrCmp] es un push eax. Con la orden 'D eax' observamos que eax contiene uno de los valores que SI-R ha generado con el código que hemos introducido y el código que aparece en el diálogo de comprar SI-R (308900808503). Hemos dado en el clavo. Si pulsamos F10 para que se ejecute la función observamos que al retorno EAX contiene un FFFFFFFF. Si sustituimos el valor de EAX por cero veremos que nos hemos registrado por un periodo de muchos años. Ya lo tenemos.

    Paso 7. Captura de datos para parchear el ejecutable.

        Repetiremos toda la operación para llegar al momento en que sice rompe en el segundo vbaStrCmp. Anotaremos los bytes que componen algunas intrucciones por delante y por detrás del call para poder buscarlos en el editor hexadecimal (F7, D8, 1B, C0, 8D, 4D, 90, 40). Modificaremos la intrucción que tenemos después del call (NEG EAX) por un XOR EAX, EAX, de este modo pondremos EAX a cero para que SI-R de por válido nuestro número introducido. Suponiendo que NEG EAX lo tengais en 16F:0058D012 lo modificaremos con la orden 'a 16F:0058D012' y ensamblaremos XOR EAX, EAX. Anotamos los nuevos bytes resultantes después del cambio (33, C0, 1B, C0, 8D, 4D, 90, 40) y salimos. Cerramos SI-R.

    Paso 8. Parcheo sobre el ejecutable.

        Con un editor Hexadecimal, ultra edit por ejemplo, buscaremos la cadena que había en Si-R antes de modificarla, o sea F7, D8, 1B, C0, 8D, 4D, 90, 40. Una vez localizada, nos aseguraremos de que es la correcta comprobando más bytes por delante y por detrás. La cambiamos por la resultante del xor eax, eax, o sea 33, C0, 1B, C0, 8D, 4D, 90, 40 y guardamos los cambios.

    Paso 9. Aplicación totalmente operativa para un perido de algunos años.

    Ejecutar SI-R y comprobar que nuestro trabajo ha sido eficaz, limpio y, sobre todo, con un cambio de 2 bytes.

        Esperamos habernos explicado con claridad y que os sirva para algo este sencillo ejercicio.


Un saludo
Crack el Destripador & Marmota
http://welcome.to/craaaack

 

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