Resolver Crackme CrueHead 2

Iniciado por $Edu$, 11 Abril 2012, 22:10 PM

0 Miembros y 1 Visitante están viendo este tema.

$Edu$

Este crackme no lo hace ricardo, para que pueda ver, solamente te pide que lo hagas, es con una password nomas y yo estuve a punto de darme por vencido porque no le encontraba logica al programa y mirando los strings que comparaba eleji el primero que era "!" y lo puse y pum.. entro, es decir la password seria solo "!" ? xDD

Luego puse otra contraseña para ir traceando y ver que hacia con ella y ahora la contraseña era "W".

La idea es que lo logre, pero no creo que lo haya hecho bien, no creo que la contraseña sea "!" o "W" , puede ser que no sea una password fija, pero que sea un caracter solo.. siento que solo descubri un bug del programa pero no la password que me pide Ricardo xD

A ver quien me puede dar una mano mirandolo, explicandome como lo crackearon, asi por arriba, no pido un tutorial, yo me las arreglo luego.


Crackme: http://www.gigasize.com/get/m33hlmll86b


Desde ya gracias!

avesudra

Es complicadito de hecho yo no lo ví hasta que pregunte en crackslatinos, esto lo tengo muy abandonado desde verano pues lo miré para distraerme y lo dejé pero bueno, lo de que sólo metas un caracter y te lo acepte es un bug del crackme.
Para crackearlo pues la rutina del programa convierte tu password a mayúsculas hace una operación con una cadena perdida en memoria( si te lo digo pierde la gracia)y tu password en mayúsculas y compara con una serie de valores hexadecimales el resultado de la operación anterior , ojo esto es por encima.

De todas maneras para empezar a toquetear puedes mirar de donde viene la llamada al mensaje de No luck there mate! por allí estará la comparación y obviamente antes de esa comparación la rutina que hace todas esas operaciones. Ten mucha atención a los movimientos de bytes a memoria.Creo que era así , desde luego tengo aquí unos folios con lo que seguí para sacarlo yo despues que me orientaran.Si alguien más experto en esto tiene que corregirme algo por favor que lo haga.

¡Un saludo!Y perdona si no me he explicado bien :)
Regístrate en

.:UND3R:.

#2
Si vemos el crackme está empaquetado, si no me equivoco con UPX.
Lo desempaquetamos.

Ya desempaquetado buscamos referencias de string, encontrarás la de que el serial es correcto, lo que debes dirigirte a ella y subir hasta el push ahí si miras abajo OllyDBG mostrará de donde es llamado ese procedimiento encargado de mostrar el mensaje, te darás cuenta que viene por consecuencia de un salto condicional si te vas a el, verás un poco más arriba dos call que utilizan parámetros de la pila, si entras verás que lo primero que hace es tomar la pass y pasarla a mayúscula, luego de pasarla a mayúscula realiza un cifrado XOR del password ingresado junto con la string:
Messing_in_bytes

Mientras va cifrando el resultado va sobre escribiendo el password introducido:

0040217E

luego de esto lo compara con:

00402150  1F 2C 37 36 3B 3D 28 19 3D 26 1A 31 2D 3B 37 3E

Por lo que si el password cifrado con la string Messing_in_bytes no es igual a los bytes ubicados en 00402150, nos mostrará un mensaje de error.

Por suerte el cifrado XOR es bidireccional lo cual puede ser invertido sin ningún problema, debemos plantearnos la siguiente pregunta: ¿Que serial necesito introducir para que cuando se cifre con la string me de como resultado el serial ubicado en 00402150?.

Si Serial introducido XOR String (Messing_in_bytes) = contenido address 00402150 (serial correcto)

al ser bidireccional

Serial correcto (X)= String (Messing_in_bytes) XOR contenido address 00402150

Lo cual nos dará la siguiente tabla:

  M  e s  s  i n  g  _  i  n _  b  y  t  e  s
00402150  1F 2C 37 36 3B 3D 28 19 3D 26 1A 31 2D 3B 37 3E
          4D 65 73 73 69 6E 67 5F 69 6E 5F 62 79 74 65 73
XOR =     52 49 44 45 52 53 4F 46 54 48 45 53 54 4F 52 4D

HEX-ASCCI=R  I  D  E  R  S  O  F  T  H  E  S  T  O  R  M


RIDERSOFTHESTORM (válido en minúsculas)

Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)

$Edu$

#3
Si, se donde esta la comparacion, por lo que puedo crackearlo sin problemas, la cosa es sacar cual es la password. Yo lo que hice fue poner un BP en la api GetIdemTextA algo asi y cuando ingreso el serial falso y le doy al boton, me para en la api esa, asi que toma el valor con esa api, luego miro en el Dump el buffer y veo que deja ahi mi serial falso, entonces yo le puse un BP memory on access a ese serial falso en el dump, para que pare cuando empieze a tocarlo y cuando paro, ahi empeze a tracear y mirar, pero algunas cosas no me parecian tan importantes y fui avanzando y termino en un call que dentro es cortito y pone a CL con el valor 3 hex y luego sale del call ese con el retn y compara si CL es 0 xD me re pierdo porque no entiendo la logica.

Se ve que para hacer mas seguros tus programas tenes que ser mal programador y hacer cosas insolitas, inesperadas para los estamos acostumbrados a programar de una forma xD


edit: Gracias UND3R, pero no veo que este empaquetado :S no entiendo bien eso.. se que aparece distinto el primer analisis que hace olly, pero yo le pongo Remove Analisis y queda como cualquier otro programa :S. A ver si haces algun tutorial sobre la IAT y esas cosas que me quisiste explicar hoy xD (por cierto, te fugaste) xD

edit2: Continuaste la explicacion... gracias!! yo habia visto esa string Messing... pero me perdi luego, ya me acuerdo que hace tiempo cuando empezaste con esto lo hiciste y me hablabas a mi por facebook a la vez y me habias escrito esa password para acordarte o algo asi xD
Por cierto.. tenes algun soft o algo para hacer los XOR, porque yo los hago manualmente.. paso en este caso todo junto 1F 2C 37 36 3B 3D 28 19 3D 26 1A 31 2D 3B 37 3Eh a binario y luego tambien el 4D 65 73 73 69 6E 67 5F 69 6E 5F 62 79 74 65 73h a binario y ahi manualmente hago el xor xD esta bien eso?

avesudra

Bueno ya te lo dijo todo .:UND3R:. , me parece que no eh el xor lo realizas byte por byte pues si o sea:
1F xor 4D : es 52 que en ascii corresponde a "R"
y así sucesivamente , con la calculadora de windows en modo programador y trabajando en hexadecimal puedes sacarlo relativamente rápido.
es que si lo juntas todo te sale un numero un monton de grande y te quedas con un numero en hexadecimal nada más creo que me corrijan si no  jajajajaja
Un saludo!
Regístrate en

$Edu$

Ah si si tenes razon, y creo que me hare una herramienta para poner todo el string directo y que haga operaciones logicas de estas.

Pero espero la respuesta de UND3R sobre si hara el tutorial de IAT y todo eso para desempaquetar o darse cuenta si esta empacado que no me doy cuenta :/

.:UND3R:.

Hola $edu, no creo que sea necesario un tutorial de unpack, en el tutorial de ricardo narvaja explica muy claramente que es IAT y todos los conceptos necesarios para poder comenzar con el unpack, Saludos.

Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)

$Edu$

Pero porque deja que hagamos un crackme si no he aprendido eso aun, voy por el capitulo 21 recien, te pedia porque pensaba que era algo que tendria que saber, pero bueno.. a seguir leyendo y algun dia aprendere. Gracias como siempre a todos!

Иōҳ

UPX es un packer muy buenito... puedes trabajar con el target perfectamente sin pararle bola al packer...

Seguramente lo hizo para darle una poca de dificultad pero vamos un UPX no es dificultad x).

Saludos,
Nox.
Eres adicto a la Ing. Inversa? -> www.noxsoft.net

$Edu$

Ah con razon yo ni cuenta me di xD, lo que me pasa ahora es que acabo de analizarlo con RDG packet detector y me dice que no encuentra nada, lo mismo con otro crackme que hasta el olly me decia que si estaba comprimido o empaquetado, funciona a veces o que?


Sobre lo del XOR con las cadenas y eso me quedo una duda solamente.. si me ponen como tarea que haga un un XOR a una cadena "123" con 0Ah por ejemplo, no se puede entonces? porque yo haria:

"123" --> 31 32 33
Xor                   0A

-----------------------
33 -->  00110011
Xor
0A -->  00001010
-----------------------
            00111001

32 --> ....
........
....
............................

Y despues que tengo el segundo como hago? o no funciona de esta forma?

Gracias!