Foro de elhacker.net

Programación => Ingeniería Inversa => Mensaje iniciado por: cibergolen en 16 Marzo 2015, 16:42 pm



Título: [Reto] Crackme C Yo-Mismo, nivel 1/10 (Principiantes)
Publicado por: cibergolen en 16 Marzo 2015, 16:42 pm
Hacía tiempo que no programaba nada, asique aquí estoy de nuevo

Descripción: Un crackme hecho en C, creado para los más novatos
Dificultad: 1/10
Plataforma: Windows
Lenguaje: C

Enlace de descarga (https://mega.co.nz/#!oZVDVRwR!wp41-5LuPjMRchWN2145q_DNCw6h6jkMBeYBqYCTN5Y)

Código fuente (Solo si lo has resuelto, o te das por vencido) (http://enviar-un-mp.com)

Happy coding


Título: Re: [Reto] Crackme C Yo-Mismo, nivel 1/10 (Principiantes)
Publicado por: d00rt en 16 Marzo 2015, 20:41 pm
Hacía tiempo que no programaba nada, asique aquí estoy de nuevo

Descripción: Un crackme hecho en C, creado para los más novatos
Dificultad: 1/10
Plataforma: Windows
Lenguaje: C

Enlace de descarga (https://mega.co.nz/#!oZVDVRwR!wp41-5LuPjMRchWN2145q_DNCw6h6jkMBeYBqYCTN5Y)

Código fuente (Solo si lo has resuelto, o te das por vencido) (http://pastebin.com/aHniwb1b)

Happy coding

Hola, llevo una semana aprendiendo el arte del cracking y me he lanzado a por este reto, estoy siguiendo el tutorial de Narvaja, y voy por la lección 14  (esto lo dejo aclarado para que los recién iniciados como yo no tiren la toalla) llevo desde que has subido el problema intentando solucionarlo, he destripado las funciones por las que pasa el serial y el nombre con los que después hace las comprobaciones, el caso es que no se como generar dichos serials, he creado en python un código para que me intente sacar por fuerza bruta los serials pero creo que no me esta dando resultado (aun sigue ejecutando XD).

He hecho un caso de prueba aislado con este serial "1234567" y mi programa de python responde correctamente y concuerda con lo que aparece en el ollydbg para dicho caso.

Dejo el código para ver si alguien me puede hechar una mano ya que creo que la fuerza bruta no es la solución mas correcta.

A el que quiera intentar el reto no le recomiendo mirar el código ya que creo que desvela parte de las cosas que hace el programa y se pueden usar como pista, si alguno me puede echar una mano... lo agradeceria

Código:
def sumaAsciiHex(serial):
    suma=0
    i=0
    for caracter in serial:
        if i==0:
            i=1
        else:
            suma=suma+ord(caracter)
    
    return hex(suma)

def XOR32(hexa):
    nHexa=hex(int(hexa,16)^int('0x32',16))
    return (nHexa)

def resta0A(hexa):
    return hex(int(hexa,16) - 10)

def main(name):
    for i in range(9999999,9999999999999):
        resul=sumaAsciiHex(str(i))
        while  int(resul,16)>int('0x64',16):
                xor=XOR32(resul)
                resul=resta0A(xor)
                resulint=int(resul,16)
                char=chr(int(resul,16))
        if char==name[0]:
            print("RESULTADO: ")
            print (i)
            print(char)
            print("///////")


Título: Re: [Reto] Crackme C Yo-Mismo, nivel 1/10 (Principiantes)
Publicado por: tincopasan en 16 Marzo 2015, 22:09 pm
Está bien que subas un crackme para aprender, pero creo sería mejor no pongas el código fuente, hasta que hayan mostrado algún tipo de solución, que podría ser parchar(la más fácil y rápida) o sacar el serial para un usuario y lo más completo generar un keygen más un tute de como resolverlo. La iniciativa a activar los conocimientos siempre será bien recibida. Saludos.


Título: Re: [Reto] Crackme C Yo-Mismo, nivel 1/10 (Principiantes)
Publicado por: Flamer en 16 Marzo 2015, 22:15 pm
Está bien que subas un crackme para aprender, pero creo sería mejor no pongas el código fuente, hasta que hayan mostrado algún tipo de solución, que podría ser parchar(la más fácil y rápida) o sacar el serial para un usuario y lo más completo generar un keygen más un tute de como resolverlo. La iniciativa a activar los conocimientos siempre será bien recibida. Saludos.

y he cierto lo que dise tinco no hay que mostrar el codigo, el chiste es batallar y no que nos den la solucion

Fasil

Usuario:Dlameres
Contraseña:123456789

Saludos Flamer y falta el keygen


Título: Re: [Reto] Crackme C Yo-Mismo, nivel 1/10 (Principiantes)
Publicado por: cibergolen en 17 Marzo 2015, 11:43 am
Solo di el código por si alguien se rinde, aunque el crackme es relativamente simple

Un saludo, y esperen el siguiente!


Título: Re: [Reto] Crackme C Yo-Mismo, nivel 1/10 (Principiantes)
Publicado por: tincopasan en 18 Marzo 2015, 18:41 pm
El post tuvo muchas vistas ¿y solo hay dos posibles soluciones? Después hay muchos post que dicen ¿cómo puedo hallar el serial? y no intentan hacer un crackme que como dice el autor es para los más novatos. ¿quién puede tener ganas de ayudar a alguien que quiere todo servido?
1) Flamer, no creo que seas novato, pero está muy bien que aportes datos o soluciones.
2)d00rt no es necesaria la fuerza bruta ya que el código se puede reversear.
3) yo soy un novato eterno, mi nivel se mantiene por inútil y sobre todo vago! pero intento aprender.
4) daré un user y serial para que investiguen y aporten soluciones.
   user: Alguien
   pass:32225677
5) quien quiera aprender que practique y lo que no sepa pregunte!
6)cibergolen a)gracias por el trabajo b)insisto que el code lo dejes solo para quien te lo pida, si se rinden, que pregunten!!!!

Edito: quien no sabe casi nada podría intentar parchar que es lo más fácil.

Saludos.


Título: Re: [Reto] Crackme C Yo-Mismo, nivel 1/10 (Principiantes)
Publicado por: d00rt en 19 Marzo 2015, 01:17 am
tincopasan, la verdad que se cuales son las funciones que se les aplica tanto al nombre como a la pass, pero lo que no se es como conseguir un User y un pass valido para dicho programa o eso a lo que tu te refieres como "reversear", ¿Me lo podrías explicar por aquí o bien por privado para no aportar pistas por aquí? Si de lo que no te fías es de que no sepa en absoluto lo que hace el programa si quieres antes te digo que es lo que yo creo que hace al user y al serial y si estoy en lo correcto me explicas lo otro.

Gracias!!


Título: Re: [Reto] Crackme C Yo-Mismo, nivel 1/10 (Principiantes)
Publicado por: Flamer en 19 Marzo 2015, 02:42 am
Hola tinco como estas...no abia contestado por falta de tiempo trabajo 8 horas diarias y el keygen no lo e hecho por lo mismo y por otro lado en este mismo momento seme quemo el monitor, sigo teniendo problemas con mi pc pero en fin.

Mi analisis el crackme tiene una rutina(un call) donde pregunta si el serial y el nombre son mayores que 6 osea que se permite de 7 digitos en adelante.

Despues de eso mas adelante se encuentra otro call este es el mas importante ya que es el que genera el serial pero no lo genera fasil mente sino que suma los valores ascii del serial que ingresamos menos el primer digito del serial.
Y despues de esto pasa por un ciclo el cual pregunta si es mayor a 100 y si es le xorea 50 y le resta 10 y saldra del ciclo cuando sea menor a 100 y el resultado que quede sera comparado con el valor ascii de la primera letra del nombre que ingresamos el cual tiene que ser igual

asi que aqui importa la primera letra del nombre y el serial a ingresar.

bueno saludos flamer y no fui espesifico con direciones por que estoy desde mi celular


Título: Re: [Reto] Crackme C Yo-Mismo, nivel 1/10 (Principiantes)
Publicado por: tincopasan en 19 Marzo 2015, 02:51 am
Flamer:
seguro que encontraste la forma de resolverlo, obvio que también yo, pero no posteo la solución para ver si alguien más lo intenta!.
Saludos


Título: Re: [Reto] Crackme C Yo-Mismo, nivel 1/10 (Principiantes)
Publicado por: Flamer en 19 Marzo 2015, 03:44 am
el keygen no logre terminarlo por que trono el monitor y me quede sin pc pero quedo empesado y pues cuando compre el nuevo se los muestro aun que dejame desirte que si esta de quebrarse la cabesa un rato para lograr el keygen para mi no esta sencillo por eso te digo que soy nobato...

Saludos Flamer y si entiendo su funcionamiento y si te garantiso que logro el keygen pero tendria que pensar un rato ajajajajaaja


Título: Re: [Reto] Crackme C Yo-Mismo, nivel 1/10 (Principiantes)
Publicado por: cibergolen en 19 Marzo 2015, 09:40 am
Hola tinco como estas...no abia contestado por falta de tiempo trabajo 8 horas diarias y el keygen no lo e hecho por lo mismo y por otro lado en este mismo momento seme quemo el monitor, sigo teniendo problemas con mi pc pero en fin.

Mi analisis el crackme tiene una rutina(un call) donde pregunta si el serial y el nombre son mayores que 6 osea que se permite de 7 digitos en adelante.

Despues de eso mas adelante se encuentra otro call este es el mas importante ya que es el que genera el serial pero no lo genera fasil mente sino que suma los valores ascii del serial que ingresamos menos el primer digito del serial.
Y despues de esto pasa por un ciclo el cual pregunta si es mayor a 100 y si es le xorea 50 y le resta 10 y saldra del ciclo cuando sea menor a 100 y el resultado que quede sera comparado con el valor ascii de la primera letra del nombre que ingresamos el cual tiene que ser igual

asi que aqui importa la primera letra del nombre y el serial a ingresar.

bueno saludos flamer y no fui espesifico con direciones por que estoy desde mi celular

Buen trabajo, Flamer, sólo falta el keygen  :silbar:

Tincopan: Gracias a ti por tratar de resolverlo, para el próximo crackme no colocare la solución..  ::)

Un saludo, y buen trabajo (Todos los que trataron de solucionarlo, pronto vendré con la V2)


Título: Re: [Reto] Crackme C Yo-Mismo, nivel 1/10 (Principiantes)
Publicado por: d00rt en 19 Marzo 2015, 11:12 am
User: D0000rt
Pass: 0555500

Ahora mismo tengo que ir a la facultad para seguir trabajando en el proyecto de fin de carrera, pero mas adelante si queréis y ya que soy nuevo podría hacer un tutorial de como resolver este Crackme con el Ollydbg, de todos modos agradecer a tincopasan por su amabilidad y ayuda (En cuanto pueda te contesto al MP).

Next Level  ;-)


Título: Re: [Reto] Crackme C Yo-Mismo, nivel 1/10 (Principiantes)
Publicado por: tincopasan en 19 Marzo 2015, 12:04 pm
d00rt: Felicitaciones! como dicen los que saben lo mejor que se puede hacer es un tute de lo aprendido! así que estaría bueno que hagas uno para los que no se animaron a resolverlo.
Saludos


Título: Re: [Reto] Crackme C Yo-Mismo, nivel 1/10 (Principiantes)
Publicado por: cibergolen en 19 Marzo 2015, 18:25 pm
Crackme solucionado.

Esperen el siguiente!

Un saludo


Título: Re: [Reto] Crackme C Yo-Mismo, nivel 1/10 (Principiantes)
Publicado por: ViejoMajara en 25 Marzo 2015, 08:08 am
¡Hola!

Aunque Flamer lo había explicado resumido, pero perfecto, aquí envío un tutorial para alguien que sea más novato que yo. Es el primero que preparo para los demás, o sea que espero vuestra comprensión.

TUTORIAL PARA RESOLVER EL CRACKME

Corremos el crackme.exe para ver cómo funciona. Sale una ventana en la que nos indica: ”Introduzca usuario”. Metemos un nombre y pulsamos enter.

En la misma ventana aparece “Introduzca serial”. Metemos un número y pulsamos enter.

Como parece que no acertamos, desaparece la ventana.

Miramos cómo está escrito y si está empaquetado con RDG Packer Detector. Nos indica que está escrito en C++ y no detecta packer alguno.

Lo abrimos con OLLY parcheado para su detección por nombre y con todas las opciones de HideOD marcadas.

Lo corremos con F9. Nos sale la ventana anteriormente citada, introducimos nombre y clave como antes, pero ahora en la misma ventana nos indica: “Buen intento”.

Pulsamos Debug y Restart y nos lleva al inicio en 401220. Botón Derecho (BD), Search for y All referenced text strings. Vemos “Correcto” y “Buen intento” en dos direcciones distintas. Vamos a esa zona en el debugger.

Brujuleamos por la zona y observamos que en 4013C0 hay CALL 401290, luego un CMP EAX,1 y un JNZ al “Buen intento” si EAX no es 1.

En 4013D3 hay un CALL 4012E9, dos líneas más abajo un CMP [EBP-208],AL y un JNZ al otro “Buen intento” si [EBP-206] y AL no son iguales.

A la vista de lo anterior ponemos BP  en los dos CALL y pulsamos F9. Nos aparece la ventana, la rellenamos como siempre y al dar al segundo  enter se nos para en 4013C0.

Entramos en el CALL con F7 y estudiamos lo que hace. Primero mide la longitud (cantidad de caracteres) del nombre y, si es 6 o menos, retorna EAX=0. En caso de que el nombre tuviese una longitud mayor que 6, mide la longitud (cantidad de cifras) de la clave y si es 6 o menos, retorna EAX=0. Si la longitud de la Clave también es superior  a 6, retorna EAX=1. Cuando sale del CALL, si EAX=0 salta al segundo “Buen intento” y finaliza. Si EAX =1, sigue adelante.

Lo finalizamos, eliminamos el BP en 4013C0 y reiniciamos el crackme, pero ahora meteremos un nombre y una clave de longitud superior a 6. Se nos para en 4013D3.
Entramos en el CALL con F7 y lo estudiamos. Aquí  vemos que suma los valores ASCII de todas las cifras de la Clave excepto la más significativa (la de la izquierda), la hace un XOR 32, al resultado le resta 0A y a la cifra resultante la compara con 64. Si es mayor que 64, a la resultante le hace las mismas operaciones, XOR 32 y resta de 0A, y así hasta que da un resultado menor o igual que 64, en el que sale del CALL poniendo en EAX este valor.

A la salida, en 4013E4, compara EAX con el valor ASCII  de la primera letra de la Clave. Si son iguales nos imprime “Correcto” y termina, y si no, nos larga el primero de los “Buen intento” y termina.

Forma de solución rápida: Reiniciar, poner un BP en 4013E4, correrlo, poner nombre y clave de más de 6 signos y darle a enter. Parará en 4013E4. En el espacio del OLLY donde explica lo que hace, verás la primera letra de la clave que has metido y la que tenía que ser. Pones esta letra la primera de tu nombre y más de seis letras después, y la misma clave que has usado para obtenerla anteriormente y te aparecerá “Correcto”.

La otra, prepararte un Keygen. Yo lo he hecho en Python 2.7.
Las operaciones del segundo CALL en el keygen las  puedes hacer en decimal, sustituyendo 32 por 50, 64 por 100 y 0A por 10.
 


Título: Re: [Reto] Crackme C Yo-Mismo, nivel 1/10 (Principiantes)
Publicado por: Flamer en 29 Marzo 2015, 03:07 am
Hola aqui el KeyGen:


http://ultrashare.net/hosting/fl/a0bda93c07
 (http://ultrashare.net/hosting/fl/a0bda93c07)

mas vale tarde que nunca jajaja

saludos Flamer y boy hacer un tutorial en mi blog aver que sale y alo mejor subo el code de mi keygen