Curso de ingeniería inversa - La primera aproximación

6 - La primera aproximación

[editar]
Curso gratis creado por Maniac Pc. Extraido de: http://www.publispain.com/supertutoriales
30 de Noviembre de 1999
He aquí nuestra primera aproximación, nuestro objetivo fue escogido al azar, y es un típico ejemplo de una combinación serial/fácilismo, debo mencionar que podremos seguir con muchas protecciones distintas. Empezaremos con protecciones fáciles y luego seguiremos con distintos esquemas de protección, aumentando así nuestro nivel poco a poco.
Ejemplo nº1 :
Nombre : ToggleMouse  Tamaño del ejecutable: 618.486 Bytes
Versión : 3.4.3 Ubicación : http://kutcracks.virtualave.net/kutfilez/toggle.zip
Nombre del ejecutable : Togglemouse.exe Tamaño del zip:418 Kb
Características : Programa que permite generar utilidades con el Mouse Protección : Sencilla
Tiempo estimado : 20 Minutos (Para ayudar a los principiantes) Tipo de protección : Serial*Registro*Tiempo
Precio : 14.95 Dólares americanos + 4.00 por compra y resguardo en diskette Limitaciones : 30 Días de prueba + 7 Días de terminación extra + Una pantalla que nos dice que tenemos que registrarnos.
Herramientas a utilizar : WDasm, Editor hexadecimal, Zen Cracking.

Primero que nada tenemos que familiarizarnos con el programa, ejecutemoslo, exploremos, y por un momento olvidemonos que se tiene que comprar, exploremos, miremos, probemos,  enfatizemos con el programa. Después de hacer varias pruebas con el programa, le doy 2 puntos y medio de 5, fue de mi agrado. Recordemos que solo crackeamos para extender el periodo de prueba de un programa para probarlo al máximo de sus capacidades. Y para aprender de él. En este caso estudiaremos este programa paso a paso para ver qué es lo que hace y cómo lo hace .. ¿Listos para comenzar? 

Teórico, ahora, práctico. 

Ok, vamos a abrir este bebé, se preguntarán qué es el zen cracking.. le llamaremos Zen Cracking a la manera en que usamos nuestra mente para pensar en cómo funciona un programa, y por donde atacaremos ... algo así, no se puede explicar, sin embargo ud. mismos lo aprenderán en el transcurso de este largo curso, sin que yo les diga poco a poco de que se trata. Vamos a empezar por averiguar el cómo usar nuestras propias herramientas, al mismo tiempo que vamos interactuando con el programa, te recomendaría que imprimieras este curso ya que con reiniciar e instalar softice y las herramientas se verá difícil estar cambiando de ventanas para leer mientras tratas de crackear el programa. 

  • Empezemos con nuestro amado programa, primero que nada, instalemos el WDasm, y corramos su ejecutable, apareceremos en una ventana típica de programas hechos en Windows, en el menú Disassembler. Open file to disassemble. Ahora, abramos nuestro ejecutable 'togglemouse.exe', y verán cómo la barra avanza la barra de progreso. Cuando termine, no empezaremos a crackear enseguida, si no que exploraremos las funciones de Wdasm para conocerlo mejor. Primero, conoceremos las referencias de datos (String data references). Si prestas atención a un botón a la esquina superior derecha. Al lado del botón de la impresora. Miremos la figura a continuación:

  • sabemos que si presionamos el primer botón abriremos otro archivo, si presionamos el segundo botón, guardaremos en un archivo el otro archivo ya desensamblado. Para este caso, usaremos referencias de cadenas, presionemos en aquel botón y veremos un listado de diferentes cadenas a las cuales llama el programa. Ejecutemos el programa ToggleMouse, en este caso veremos una carpeta que dice 'Order' (Ordenar), y aparecerá un botón que nos parecerá interesante... 'Click here to enter your registration code'(click aqui para poner tu código de registro). Le daremos un click y veremos una ventana diciendo que pongamos nuestro  nombre, compañia, y nuestro código de registro(serial). Escribamos un nombre p.e. 'M@NIAC PC', luego, una compañia p.e. 'KUt', y un serial cualquiera como   '1234567890'... aparecerá un diálogo diciendo 'The registration information you have entered is not valid. Please confirm that you have entered the information exactly as it was provided', tienes que saber aunque sea un poco de inglés básico para saber que esto es decir 'La información escrita no es válida. Por favor confirme que ha escrito la información tal como se le fue dado'...Nuestro objetivo por esta vez en Wdasm, será buscar cadenas relacionadas con registros(o sea, diálogos de compra y serial) .. busquemos y las cadenas que me aparecieron y encontré algo fueron:
  • String Resource ID=00157: "EconoClick has saved you %d clicks."
  • String Resource ID=00158: "You haven't taken advantage of the EconoClick feature." 
    String Resource ID=00159: "You've clicked %d times, double-clicked %d times, right-clic" 
    String Resource ID=00160: "You haven't used the PopDesk feature yet." 
    String Resource ID=00161: "You have used the PopDesk feature %d times." 
    String Resource ID=00162: "Your web browser will now be started and the Toggle Software" 
    String Resource ID=00163: "Your web browser could not be started automatically. Please " 
    String Resource ID=00164: "Registration is Complete!Thank you very much for registeri
    String Resource ID=00165: "The registration information you have entered is not valid.
    String Resource ID=00166: "Dear Customer,Our registration system has changed and in o" 
    String Resource ID=00167: "On some systems, color scrolling cursors may flicker while y" 
    String Resource ID=57344: "ToggleMOUSE" 
    String Resource ID=61446: "an unnamed file" 
    String Resource ID=61472: "No error message is available." 
    String Resource ID=61473: "An unsupported operation was attempted." 
    String Resource ID=61474: "A required resource was unavailable." 
    String Resource ID=61475: "Out of memory."
  • He remarcado las cadenas queme parecieron interesantes, si te acuerdas, la segunda que remarqué te parece conocida .. ¿Verdad?.. y la primera si es que te diste cuenta es la cadena que te dice que te registraste bien, en el cuadro de diálogos de Wdasm demosle click sobre la cadena 'Registration is Complete!...' para ver de que se trata, pero realmente no nos interesará esto ya que buscamos el por qué se produjo el error, o sea, demosle doble click a la cadena 'The registration information ...' y veremos lo siguiente :
  •    
    • * Referenced by a (U)nconditional or (C)onditional Jump at Address:
    • |:0040E82A(C)
    • |
    • :0040E8DF 6AFF push FFFFFFFF
    • :0040E8E1 6A10 push 00000010
    • * Possible Reference to String Resource ID=00165: "The registration information you have entered is not valid."
    • |
    • :0040E8E3 68A5000000 push 000000A5
    • :0040E8E8 E840F70100 call 0042E02D
    • :0040E8ED EB2F jmp 0040E91E
    •  
  • Con esto los tengo confundidos, ya que hay 2 cosas que no les enseñe de ensamblador antes, la función push, y call, a call, tal como lo suena su nombre en inglés 'llama' a funciones. En este caso llamará a otras funciones para que se ejecuten (jne,mov, etc.)

    Daré este código pequeño para que vean de que se trata la función 'call'. 
     

    mov ax,23h ; mueve el valor de 23 a AX
    call muevete ; llamada a 'muevete
    xor ax,ax
    xor bx,bx
    muevete: ; declara la función 'muevete'
    mov bx,24h ; mueve el valor 24 a BX
    ret ; otra función no vista, ret 'retorna' a la función.., retorna desde el call hacia adelante.
    Una vez terminada la función 'muevete' volverá a la instrucción siguiente después de la 'llamada', o sea, seguirá desde el xor ax,ax en adelante por el ret, y con esto dejará a AX y BX en 0. Por las instrucciones XOR.

    El comando push pone un valor en el tope de la 'pila', me explico. Si decimos como arriba push 00000000 sería mover el valor a la memoria. O sea como mover el valor 00000000 (Que es igual a 0) a la memoria6 para que quede con ese valor, esta memoria es como 'la cima' de los registros. (Como dice Ed!son, el Push es para guardar valores para su uso posterior) 
    Sigamos con lo nuestro,  tenemos la palabra "The registration information you have entered is not valid.", pero si prestamos atención veremos que arriba tiene escrito ' Referenced by a (U)nconditional or (C)onditional Jump at Address:' lo que significa 'Tiene una referencia de un salto (c)ondicional o (i)ncondicional de la dirección", esto quiere decir que la instrucción de error ("The registration information ...) Fue llamada desde una dirección, y nos aparece el siguiente texto:

    • * Referenced by a (U)nconditional or (C)onditional Jump at Address:
    • |:0040E82A(C)
    • Para esto quiere decir que la cadena de error fue llamada desde la dirección 0040E82A, tenemos que presionar el botón 'IR A UBICACIÓN', o ir al menú 'Goto' (Ir a..) y ver 'Goto Code Location'.. y escribiremos la dirección de la cuál se llama, o sea 0040E82A, iremos ahí y nos encontraremos con el siguiente pedazo de código:
       
      * Possible Reference to Dialog: DialogID_7801, CONTROL_ID:0064, </FONT> <DT><FONT size=2>| </FONT> <DT><FONT size=2>:0040E794 6A64 push 00000064 </FONT> <DT><FONT size=2>:0040E796 8BC3 mov eax, ebx </FONT> <DT><FONT size=2>:0040E798 33D2 xor edx, edx </FONT> <DT><FONT size=2>:0040E79A 59 pop ecx </FONT> <DT><FONT size=2>:0040E79B F7F1 div ecx </FONT> <DT><FONT size=2>:0040E79D FF7508 push [ebp+08] </FONT> <DT><FONT size=2>:0040E7A0 8BF0 mov esi, eax </FONT> <DT><FONT size=2>:0040E7A2 8BDE mov ebx, esi </FONT> <DT><FONT size=2>:0040E7A4 81F321332153 xor ebx, 53213321 </FONT> <DT><FONT size=2>:0040E7AA E8E1570000 call 00413F90 </FONT> <DT><FONT size=2>:0040E7AF 3DD7E7FC00 cmp eax, 00FCE7D7 </FONT> <DT><FONT size=2>:0040E7B4 59 pop ecx </FONT> <DT><FONT size=2>:0040E7B5 0F8434010000 je 0040E8EF </FONT> <DT><FONT size=2>:0040E7BB FF7508 push [ebp+08] </FONT> <DT><FONT size=2>:0040E7BE E8CD570000 call 00413F90 </FONT> <DT><FONT size=2>:0040E7C3 3D00A02E02 cmp eax, 022EA000 </FONT> <DT><FONT size=2>:0040E7C8 59 pop ecx </FONT> <DT><FONT size=2>:0040E7C9 0F8420040000 je 0040E8EF </FONT> <DT><FONT size=2>:0040E7CF FF7508 push [ebp+08] </FONT> <DT><FONT size=2>:0040E7D2 E8B9570000 call 00413F90 </FONT> <DT><FONT size=2>:0040E7D7 3DF87A4138 cmp eax, 38417AF8 </FONT> <DT><FONT size=2>:0040E7DC 59 pop ecx </FONT> <DT><FONT size=2>:0040E7DD 0F840C010000 je 0040E8EF </FONT> <DT><FONT size=2>:0040E7E3 FF7508 push [ebp+08] </FONT> <DT><FONT size=2>:0040E7E6 E8A5570000 call 00413F90 </FONT> <DT><FONT size=2>:0040E7EB 3D9EB18C00 cmp eax, 008CB19E </FONT> <DT><FONT size=2>:0040E7F0 59 pop ecx </FONT> <DT><FONT size=2>:0040E7F1 0F84F8000000 je 0040E8EF </FONT> <DT><FONT size=2>:0040E7F7 FF7508 push [ebp+08] </FONT> <DT><FONT size=2>:0040E7FA E891570000 call 00413F90 </FONT> <DT><FONT size=2>:0040E7FF 3DD713B200 cmp eax, 00B213D7 </FONT> <DT><FONT size=2>:0040E804 59 pop ecx </FONT> <DT><FONT size=2>:0040E805 0F84E4000000 je 0040E8EF </FONT> <DT><FONT size=2>:0040E80B FF7508 push [ebp+08] </FONT> <DT><FONT size=2>:0040E80E E87D570000 call 00413F90 </FONT> <DT><FONT size=2>:0040E813 3DF6336A2C cmp eax, 2C6A33F6 </FONT> <DT><FONT size=2>:0040E818 59 pop ecx </FONT> <DT><FONT size=2>:0040E819 0F84D0000000 je 0040E8EF </FONT> <DT><FONT size=2>:0040E81F FF7508 push [ebp+08] </FONT> <DT><FONT size=2>:0040E822 E869570000 call 00413F90 </FONT> <DT><FONT size=2>:0040E827 3BC6 cmp eax, esi </FONT> <DT><FONT size=2>:0040E829 59 pop ecx </FONT> <DT><FONT color=#00ff40><FONT size=2>:0040E82A 0F85AF000000<B> jne 0040E8DF</FONT></B> </FONT> <DT><FONT size=2>:0040E830 E84B3B0200 call 00432380 </FONT> <DT><FONT size=2>:0040E835 8B4004 mov eax, dword ptr [eax+04] </FONT> <DT><FONT size=2>:0040E838 56 push esi </FONT> <DT><FONT size=2>* Possible StringData Ref from Data Obj ->"Registration" </FONT> <DT><FONT size=2>| </FONT> <DT><FONT size=2>:0040E839 BEC4264400 mov esi, 004426C4 </FONT></DT></DL> <P><FONT size=2>He <FONT color=#00ff40>remarcado</FONT> claramente la instrucción que llama al error, en mi primer ejemplo de ensamblador, puse un <B>Jne acaba</B>, y en este caso llamamos a un <B>Jne 0040E8DF</B>, no se preocupen, cuando se programa en ensamblador, se etiquetan las instrucciones como <B>acaba</B>, digamos que es lo mismo pero que en vez de etiquetas como 'acaba' se etiquetan cuando se desensambla en direcciones tales como '0040E8DF'... Tal como les dije en unas páginas atrás, ¿Qué haremos con esta instrucción que salta si <B>no es equivalente</B>?.. exacto<B>!</B>, la revertiremos de una manera de la cuál pensará que estamos registrados correctamente si escribimos un código erroneo.. pero.. <B>¡Cuidado!</B>, vamos a aprender que si es que revertimos el salto ahora ... pensemos un poquito .. si lo revertimos para que si escribimos un serial incorrecto piense que es correcto .. ¿Qué pasará si escribimos el serial correcto? .. BUM! el error se arrojará en ese caso .. pero .. hey! antes de que hagas cualquier tipo de cambio como bestia salvaje sin nada que hacer mas que reventar unos bytes. vamos a lanzar el monitor de registro del sistema. para observar si es que el programa produce cambios en el registro de Windows.. Más tarde se explicará que és el registro de Windows.  Puedes descargar el monitor de registro </FONT><A href="http://www.shetef.com/wxr95-10.zip">http://www.wikilearning.com/imagescc/3807/figkut.gif" alt="image" /> width=250> </FONT> <DD><FONT size=2>Tal como podemos apreciar tenemos la compañía ; (KUt99), el Nombre; (M@NIAC PC) y el número de registro para estos dos nombres, (31071472) .. Vamos a tener un grave problema si no utilizamos los mismos nombres y compañia, podríamos probar eliminando todos estos valores (Excepto <B>siempre</B> el que dice (predeterminado)).. explicación de lo dicho, el programa, para <B>generar</B> su propio número serial, hace sus propias operaciones algebráicas con letras, o sea, para cada letra que se genere, hará su propia multiplicación, división, étc. esto se explicará más adelante en un capítulo mas avanzado. Tomemos por ejemplo otra operación de un programa inventado, o sea, en el programa dice 'Nombre' y 'serial'. Imaginense que el programa tiene como función poner en este caso, que si como nombre tenemos una 'm' minúscula esta vale 8, y si es mayúscula esta vale 3, ¿ok?, y si ponemos una 'm' junto con una 'a' hará una operación matemática complicada... traten de entenderlo superficialmente, ya que se estudará esto más tarde con más interés en ello.  </FONT></DD></DL>""
    [editar]

    8 opiniones

    Interes????

    pues ahora se pondran de moda sistemas q trabajan a 64bit, aunq el leng assembler no cambia ni muchas herramientas habra novedades, para personas q kieran ing inversa de cero pueden solicitar clases gratis a giovax@hotmail.com, con facilidad de herramientas y algoritmos para crear sus propias herramientas, buen post.
    Algo mas reciente

    En los ultimos 10 años el software y la tecnologia a evolucionado mucho...No hay algo mas reciente?
    Vmm32. Vxd falta o está dañado.

    Bien se ve que sabes mogollón. Tengo problemas en cargar windos98. Hice pruebas, meter el disco en una carpeta en fat32 ( tengo instalado xp profesional), quité windows vista, y un scaner canon e impresora epson, por si me contesta. En windows xp, me va bien, y quría tener los dos sistemas operativos. Por cierto caballero, me quedé anestesiado al leer. Felices navidades, joaquin.
    Curso de ingenieria inversa.

    Lo primero tengo 63 años y se muy poco de computacion o de internet pero me gusta inbestigar razonar, mi sueño es estudiar algo que aun pueda y este curso me parese interesante y novedoso, ustedes diran... Gracias.
    Muy bueno.

    Si pudiera ser me gustaria k me mandasen mas informacion a mi correo. Muchas gracias y felicidades por el curso.
    1 2 | siguiente >

    Cursos gratis relacionados con 'Curso de ingeniería inversa'

    La ingeniería inversa se basa en quitar, remover, suspender uno o más temas de protección... Más »
    Un sistema informático utiliza ordenadores para almacenar datos, procesarlos y ponerlos a disposición de quien... Más »
    El presente documento es de carácter didáctico, y está basado en documentación que se puede... Más »
    Las tecnologías de distribución de información están cambiando como no lo habían hecho nunca antes... Más »
    Este estudio sobre las Memorias de la Creación del Universo tiene su origen en la... Más »

    Autor y licencia de 'Curso de ingeniería inversa'


    Curso gratis de Maniac Pc. Extraido de: http://www.publispain.com/supertutoriales CopyLeft
    Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
    Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.