8
Rompiendo el Crackme #1 By D4ph1 por Nitr0K1ller Rompiendo el Crackme #1 By D4ph1 Víctima Crackme #1 By D4ph1 Download Crackmes.de Dificultad Iniciado Objetivo Encontrar el algoritmo del serial y hallar el mensaje secreto Herramientas OllyDbg, Peid Takeoff Saludos. Hace rato que no escribo un tutorial, hoy que he tenido algo de tiempo me he decidido a hacerlo. La víctima de esta ocasión la solucione hace un buen rato, mas no escribí la solución. Esta vez tenemos algo muy interesante, una pequeña introducción al keygening. Engage Para iniciar, lo que ya es común, pasar la víctima por los analizadores de costumbre para obtener la mayor información posible de la misma: Nitr0K1ller Reversing Research Center – reversing.uni.cc

Crear keygen en visual basic 6

  • Upload
    rogncx

  • View
    21

  • Download
    1

Embed Size (px)

DESCRIPTION

como crear un keygen en vb 6.0

Citation preview

  • Rompiendo el Crackme #1 By D4ph1 por Nitr0K1ller

    Rompiendo el Crackme #1 By D4ph1

    Vctima Crackme #1 By D4ph1Download Crackmes.deDificultad IniciadoObjetivo Encontrar el algoritmo del serial y hallar el mensaje secretoHerramientas OllyDbg, Peid

    TakeoffSaludos. Hace rato que no escribo un tutorial, hoy que he tenido algo de tiempo me he decidido a hacerlo. La vctima de esta ocasin la solucione hace un buen rato, mas no escrib la solucin. Esta vez tenemos algo muy interesante, una pequea introduccin al keygening.

    EngagePara iniciar, lo que ya es comn, pasar la vctima por los analizadores de costumbre para obtener la mayor informacin posible de la misma:

    Nitr0K1ller Reversing Research Center reversing.uni.cc

  • Rompiendo el Crackme #1 By D4ph1 por Nitr0K1ller

    Se puede ver que no tiene ninguna proteccin y esta programado en ASM. Le creo al Peid porque lo mismo dijo el creador en el readme, je je je...

    El siguiente paso es ejecutarlo, se abre una ventana con dos cuadros de texto para introducir un nombre y serial, escribo los ya acostumbrados, el resultado es el siguiente:

    Ya me lo imaginaba, ahora lo destripo en el viejo Olly para empezar a analizarlo. Pruebo con la tcnica de las strings para mirar si el mensaje de chico malo esta por ah (Clic derecho en la primera lnea Search for All referenced text strings)

    Nitr0K1ller Reversing Research Center reversing.uni.cc

  • Rompiendo el Crackme #1 By D4ph1 por Nitr0K1ller

    Hay estn los mensajes de chico bueno y chico malo, doble clic sobre el mensaje de chico malo para ir a la direccin donde este se encuentra en la ventana de desensamblado.

    En esta zona se encuentran el cdigo encargado de desplegar los diferentes mensajes segn el resultado (el de chico malo esta al final). El primero corresponde a la solucin completa, ya que el crackme tiene un pequeo secreto escondido que dejare para ms tarde. El segundo corresponde al ingresar un serial correcto. En la imagen se puede ver como hay una comprobacin en 4011BB y en seguida un salto, que si es tomado se dirige exactamente al lugar del segundo mensaje (el del mensaje correcto). Ha simple vista, y si se fuera a parchar, ese salto seria un fuerte candidato, pero esa labor no la desarrollare ac. Pongo un breakpoint en 4011B9 (F2) para ver el comportamiento de esa comprobacin y hecho a andar el crackme (F9)... pero no para, se va de largo. Entonces selecciono la primera lnea que crea el cuadro de mensaje con el texto de chico malo.

    Nitr0K1ller Reversing Research Center reversing.uni.cc

  • Rompiendo el Crackme #1 By D4ph1 por Nitr0K1ller

    Resulta que esa comprobacin no era, sino que el serial se revisaba mas arriba, en la imagen se puede ver que el salto se hace desde 401194, pongo un breakpoint en ese salto y corro de nuevo el crackme con el mismo nombre y serial, en efecto se detiene en ese breakpoint para enviarme directamente a la seccin del chico malo.

    Aqu se pueden ver dos bloques de instrucciones interesantes, jurara que son bucles, as

    Nitr0K1ller Reversing Research Center reversing.uni.cc

  • Rompiendo el Crackme #1 By D4ph1 por Nitr0K1ller

    que pongo un breakpoint en la direccin de 401178 y ejecuto de nuevo el crackme. Al llegar aqu voy traceando con F7 y al llegar a la comparacin en 401194, revisa los valores 65 (en ASCII es e) y 31 (1), no toma el salto y me enva directo al salto del chico malo.

    As que cambio el serial 123456789 por e2345789, de nuevo ejecuto el crackme y traceo esta seccin. Al llegar a la comprobacin de 401194 ambos valores son iguales, tomo el salto que me enva al inicio del bucle para continuar con el siguiente carcter del serial. CONCLUSION: en este bucle se comprueba el serial MAS no se genera ac, lo se porque toma tanto el serial que introduzco como el serial verdadero de la memoria, la estructura que he deducido de este bucle es la siguiente:

    00401178 MOVSX EDI,BYTE PTR DS:[EDX+4033CC] ;toma el carcter del serial0040117F MOVSX EBX,BYTE PTR DS:[EDX+40338C] ;toma el carcter del serial verdadero00401186 INC EDX ;incrementa el contador del bucle00401187 CMP EDI,EBX ;comprueba ambos caracteres00401189 JE SHORT D4ph1_-_.00401178 ;si son iguales, va al inicio del bucle

    Para comprobar mi teora, al llegar a la instruccin en 40117F voy al panel de informacin del Olly (el que esta debajo del panel de desensamblado) hago clic derecho sobre la primera lnea y en el men escojo Follow address in Dump,

    En el panel del dump veo esto:

    Y pues como dira un gringo, Holy shit!!!, xD. Copio esa cadena (ec}z7m4hogs-) y pruebo este serial (quitando el breakpoint, o sino parara en cada carcter del serial) y pues no funciona de primerazo, pruebo entonces con ec}z7m4hogs y sale este mensaje:

    Nitr0K1ller Reversing Research Center reversing.uni.cc

  • Rompiendo el Crackme #1 By D4ph1 por Nitr0K1ller

    He dado con el serial correcto.

    Lock onYa sabiendo donde comprueba el serial, ahora hay que buscar la zona donde lo genera, as que pongo un breakpoint en 40113D y ejecuto de nuevo el crackme, esta vez con el serial falso 123456789, Olly para en el breakpoint y comienzo a tracear con F7, el anlisis se puede ver en la imagen, la primera vez que paro EDX era 11 y fue disminuyendo hasta 0.

    Hice una tabla con las operaciones que realizo en la direccin 40114D, de esta forma pude inferir el algoritmo que genera el serial:

    1. Toma el valor ASCII de un carcter del nombre, c2. Previamente ha calculado la longitud del nombre, x3. calcula c XOR (x - i), donde i es la posicin del carcter actual4. decrece el contador del bucle, i

    En pocas palabras, a cada carcter hace un XOR con el nmero de caracteres que quedan del nombre.

    EBXASCII EBX EDX

    XOR EBX, EDX

    ASCII XOR EBX, EDX

    6Eh n Bh 65h e69h i Ah 63h c74h t 9h 7Dh }72h r 8h 7Ah z30h 0 7h 37h 76Bh k 6h 6Dh m31h 1 5h 34h 46Ch l 4h 68h h6Ch l 3h 6Fh o65h e 2h 67h g72h r 1h 73h s

    Nitr0K1ller Reversing Research Center reversing.uni.cc

  • Rompiendo el Crackme #1 By D4ph1 por Nitr0K1ller

    LandingYa he descubierto los lugares donde este crackme comprueba y genera el serial, as como el algoritmo con el cual crea los seriales, legalmente con esto bastara para resolver el crackme. Lo nico que hace falta es descubrir el mensaje secreto al que hace referencia. Pues bien, mientras esculcaba el dump del crackme me encontr esto:

    Who received the NobelPrize in 1921 for his work on the photoelectric effect?, o sea, quien recibi el premio novel en 1921 por su trabajo sobre el efecto fotoelctrico?, lo dejo de tarea para el que lo quiera resolver, en todo caso, al introducir la respuesta al acertijo como nombre sale este mensaje:

    MISSION ACCOMPLISHED!!!!

    Otro crackme resuelto jejeje. Para terminar quiero mandar los saludos de siempre a toda la gente del CuT y a los dems entes que habitan su foro, jajaja.

    Suerte Pues

    Nitr0K1ller Reversing Research Center reversing.uni.cc

  • Rompiendo el Crackme #1 By D4ph1 por Nitr0K1ller

    Anexo: como programar el keygen

    Para programar el keygen teniendo ya el algoritmo es bien breve, como soy medio vago e ignorante lo voy a programar en VB, xD.

    El chiste se reduce a poner un cuadro de texto para escribir el nombre, una etiqueta u otro cuadro de texto en el cual aparecer el serial y el botn para que haga el trabajo sucio, este es el cdigo que va en el botn:

    Private Sub Command1_Click()Dim nombre, serial As StringDim x, i As Integeri = 1

    ' tomar el nombrenombre = CStr(txtnombre.Text)

    'Calcular el serialFor x = Len(nombre) To 1 Step -1 serial = serial & Chr(Asc(Mid(nombre, i, 1)) Xor x) i = i + 1Next x

    txtserial.Text = serial

    End Sub

    la parte mas compleja es la generacin del serial que va dentro del for, los pasos son estos

    1. se toma el carcter del nombre: Mid(nombre, i, 1))2. se busca el cdigo ASCII del carcter: Asc(Mid(nombre, i, 1))3. tanto el cdigo como x son nmeros, as que se hace el XOR: Asc(Mid(nombre, i,

    1)) Xor x

    4. Con el resultado del XOR se busca el carcter ASCII que le corresponde: Chr(Asc(Mid(nombre, i, 1)) Xor x)

    5. se van acumulando los caracteres: serial & Chr(Asc(Mid(nombre, i, 1)) Xor x)

    Listo, es bien fcil. Mi keygen lo deje as:

    Y esto es todo, lgicamente se puede hacer con cualquier lenguaje, pero como no conozco por el momento ningn lenguaje de escritorio mas decente (C++ ni loco, le tengo pnico xD) figuro VB.

    Nitr0K1ller Reversing Research Center reversing.uni.cc

    Rompiendo el Crackme #1 By D4ph1Anexo: como programar el keygen