Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - karmany

#1021
Este tutorial ha sido realizado por karmany el 10 de noviembre de 2007 como solución al CrackME04 de x4uth. Descarga del crackme y más información en:
http://foro.elhacker.net/index.php/topic,180720.msg860578.html#msg860578


TUTE 'Crackme04 de x4uth' por karmany

Herramientas utilizadas: OllyDBG 1.10

INTRODUCCIÓN:
Viendo que nadie más se apunta a resolverlo, y porque se me está olvidando su solución pues creo conveniente realizar el tute de este fantástico CrackMe.
La verdad que el crackme no es que sea fácil, pero veremos cómo encontrarle puntos débiles que harán que todo sea mucho más sencillo.
Si analizamos el crackme con RDG Packer Detector, nos dice que no está empacado y que ha sido compilado con Microsoft Visual C++ 6.0. x4uth es un programador y cracker con experiencia así que podemos esperar muchas maldades.


TOMA DE CONTACTO:
Lo primero que voy a hacer es analizar el crackme y a escribir las cosas más importantes que veo:
1.- Después de examinarlo y ejecutarlo con el OllyDBG, observo que termina todo en un Exit Process. Así que cierro el OllyDBG y veo que el crackme se sigue ejecutando...
Ummm. En este punto mi lógica me dice que debe de haber algún proceso ejecutándose, así que simplemente pulso Ctrl+Alt+Supr y en procesos observo que se está ejecutando uno llamado: "Crackme04.exe"... ya te tengo...
2.- El crackme pide un UserName y un Keycode, así que yo voy a buscar la solución para UserName = "karmany".
Si introduzco un nombre-serial inválido me saldrá una nag de:
-Título: "!!!!!!!!"
-Mensaje: "Invalid KeyCode"
3.- Curiosamente, si pulso la tecla "Enter" mientras tengo el cursor en cualquier TEdit veo que el crackme se cierra... ¡Vaya!


MANOS A LA OBRA:
Como he dicho en el punto 1, hay un proceso ejecutándose así que voy a atachearlo. Ejecuto directamente el "crackme04.exe" y posteriormente abro el OllyDBG y voy a: File --> Attach y selecciono el proceso "crackme04.exe".
OllyDBG ya me avisa abajo: "Attached process paused at ntdll.DbgBreakPoint".
Pulso F9 para que se ejecute correctamente ya debugeado. Como se puede uno imaginar.


MI FORMA DE ALCANZAR LA "ZONA CALIENTE":
Ahora muchas formas de continuar, así que cada uno que elija o pruebe la que más le guste. Mi idea es la siguiente para este crackme:
Voy a buscar la API con la que toma el UserName y el Keycode y siguiendo el código probablemente me lleve a la zona "caliente".
Hay varias forma de tomar los datos de un TEdit, así que con el plugin "CommandBar" pongo varios Breakpoints y después de probar unas cuantas veces descubro que lo que interesa poner en la CommandBar es lo siguiente:
"BP GetWindowTextA".

Pongo de nombre: "karmany" y de serial "1234567890", pulso en Verificar y efectivamente se detiene el OllyDBG en GetWindowTextA pero para poder continuar hay que pulsar "Ctrl+Atl+Supr". Paso la función y retorno seguidamente al código aquí:
407597    MOV ECX,DWORD PTR SS:[EBP+10], que es justo después de la llamada a GetWindowTextA.

Llego hasta el RET, lo paso con F7 y llego a:
4014F7  ADD ESI,7C
En este punto ya veo que las dos CALL que aparecen obtienen: una el nombre (4014F2  CALL 00407562) que es la que acabo de pasar y la otra el serial (401501  CALL 00407562) que es la que voy a pasar ahora.
Llego hasta el RET, lo paso, vuelvo a llegar hasta el siguiente RET lo vuelvo a pasar y ya por fin caigo en el código caliente en:
4016EF   XOR EAX, EAX

Esta ha sido una forma sencilla de caer rápidamente en la zona que nos interesa.
La subrutina que hay que analizar por lo tanto:
Comienza en: 4016A0  PUSH EBP
Termina en:   402227 RETN


ANÁLISIS DE LA GRAN SUBRUTINA:
Para analizar esta gran subrutina hay que ir poco a poco entendiendo las trampas que nos ha hecho x4uth.

Tras analizarla detenidamente y traceando muchas veces por el código, podemos echar un vistazo al final y observar lo siguiente:


Ahí donde está el BP, tenemos el byte a 1 que nos registra.
Pero para que llegue a ejecutarse ese código x4uth nos ha puesto una serie de obstáculos que hay que saltar, ya que nos mandan después de MOV BYTE PTR SS:[EBP-1],1 y por lo tanto no estaremos registrados... son los JMP 004021FC

Yo en un primer momento intenté solucionarlo por Fuerza Bruta, que no voy a explicar aquí, pero me cansé de esperar tanto tiempo y ya que tenemos un buen debuger pues accedí a analizar todo el código...

Voy a estudiar los saltos:
Pongo de nombre: karmany
Pongo de serial: 12345678

401778     JE SHORT 00401793 Probando descubrí que salta cuando dejamos vacío el UserName. Así que ya sé: dejo de nombre "karmany"
401789     JE SHORT 00401793 Aún dejando el serial vacío no salta, así que como karmany no salta pues karmany me vale.
401791     JE SHORT 0040179D Tiene que saltar y salta, así que no me preocupa más.
4017C3     JE SHORT 004017CF Tiene que saltar. Se ve cómo toma los valores de mi nombre pero aún poniendo el serial vacío salta perfectamente. Sigo.
401B14     JE SHORT 00401B17 Hasta llegar aquí, ha realizado una barbaridad de operaciones, pero lo que me interesa es que hace un XOR EDX, EAX y una comparación CMP  EDX, 17. Me detuve en el XOR EDX, EAX y observé el valor de los registros: EAX = 37 y EDX = 36. Ummm parece que son los valores ASCII de mis 2 penúltimas cifras!!! O sea que XOR EAX, EDX tiene que ser 17. hay muchas combinaciones. Yo puse varias pero cuando va trascurriendo el CrackMe te das cuenta que no vale así que para no alargar voy a poner la que descubrí al final: "+<":
+ = 2B
< = 3C
XOR 2B, 3C = 17
Queda un serial ahora: "12345+<8"

Ahora nos encontramos con 4 malignos saltos. No se tienen que cumplir porque nos mandan a un RET. Toca investigar.


1º Salto.
Si me pongo en la comparación en 401F19 veo que el dato es FFFFFFF5. Así que por probar voy a ir modificando valores de mi serial y observo que ese valor (FFFFFFF5) se modifica al variar la 2ª cifra. Si pongo de serial "10345+<8" el valor cambiará a FFFFFFF3. Se puede hacer a mano pero yo hice una sencilla Fuerza Bruta y me dió el siguiente resultado: "=" (símbolo igual)
Así que queda de serial: "1=345+<8"

2º Salto.
Esta vez veo que se modifica la 1ª cifra así que descubro esta vez que es la letra "R".
Serial: R=345+<8

3º Salto.
Corresponde a la 3ª letra. Encontré que podía ser la "O".
Serial: R=O45+<8

4º Salto.
Este salto me hizo modificar los valores del XOR EDX, EAX. Por eso los cambié. Lo hice por Fuerza Bruta. Recuerdo que paró enseguida.

401FF1   JE SHORT 00401FFD Se tiene que producir. Modificando la 4ª cifra cambiaba de valor, así que descubrí: ">".
Serial: R=O>5+<8

402026     JE SHORT 00402032 Se tiene que producir. Modifiqué la 5º cifra y descubrí un valor posible: "i"
Serial: R=O>i+<8 (sale con este serial una ventana curiosa jeje)

4020B0     JE SHORT 004020BC Tiene que saltar. Y salta.

4021F2     JE SHORT 004021F8 Por fín el último salto que nos registra. Se tiene que producir. Modifico la última cifra que queda y compruebo que salta con: "p".

Serial Final: R=O>i+<p

Voy a probar el serial a ver:


Espero que a alguien le pueda ayudar.
Seguro que se puede resolver de muchas otras formas.

Un saludo
karmany
#1022
Muy bueno x4uth...y enhorabuena por resolverlo.


Primeramente Karman quisiera darte mi enhorabuena por tan expléndido CrackMe, realmente a mí me costó encontrarle el punto... Me ha gustado mucho y si no tienes paciencia no lo solucionas.

Sólo quería añadir (ahora que ya está todo resuelto) un par de cosas que he visto en el crackme y me parecen muy dignas de contar aquí. Yo lo soluciné por otro lado:
El MessageBox que aparece al pulsar "Aceptar" lo tenemos en 401FF5 y proviene de una comparación con 0E2D0.
Después de indagar bastante descubrí que Karman malignamente crea dos Threads que son los que nos complican la vida. Al final de uno de los Threads que se ejecutan (en 401859) veremos una CALL y esa CALL va a parar a un SendMessage y le da un valor sorprendente: 0E2D0!!
A partir de ahí nos manda al MessageBox.

Pues bien el puntero que carga la cadena de "chico malo" lo tenemos un poco antes de 401859 y si nos fijamos la cadena de "chico bueno" está en un puntero así definido:
Puntero a cadena "chico bueno" = puntero a cadena "chico malo" + 4

Por lo tanto el salto que nos registra o no, está en 40183B. Ese salto no se tiene que cumplir, así que si ponemos un BP en 401837, podremos ver el resultado de la comparación y el resultado tiene que dar 0.

Para mi nombre "karmany" puse el BP comentado y descubrí que si ponemos de serial 8 dígitos, pues es muy sencillo porque cada dígito modifica un valor.
Así que me costó muy poco descubrir que:
Nombre: karmany
Serial: hpiw1g1q
por ej. porque hay varias soluciones...

Un saludo
karmany

Editado después:
--He comprobado que mi serial no funciona siempre (si se pone nada más ejecutar el programa, va bien) pero como x4uth lo ha resuelto expléndidamente pues no merece que siga investigando más.
#1023
Ingeniería Inversa / RE
5 Noviembre 2007, 17:47 PM
CRACKME: CrackMe if you can II (Reloaded) por Karman

Autor: Karman
Nombre: CrackMe if you can II (Reloaded)
Fecha: 29 de octubre de 2007
Tamaño: 36,0 KB
Compilador y/o Packer: Dev-C++ 4.9.9.2 (según RDG Packer Detector)
Objetivos:
    El crackme pide Usuario-Clave
Dificultad: 4(1-10)
Descarga del crackme:
http://h1.ripway.com/karman/Files/crackme2.rar
Post Original:
http://foro.elhacker.net/index.php/topic,186201.0.html
Tutorial con la solución:
Tutorial hecho por x4uth en el mismo post original.





TUTORIAL: Cómo proteger tu programa por karmany

Autor: karmany
Fecha: 28 de julio de 2008
Descripción:
Un pequeño tutorial que realicé hace algunos años sobre cómo intentar proteger tu programa contra el Cracking. En mi Web trato también este tema y con el tiempo será cada vez más completo.
Enlace:
http://foro.elhacker.net/ingenieria_inversa/como_proteger_tu_programa-t222129.0.html
#1024
Ingeniería Inversa / Re: MIS TRECE TUTORIALES
3 Noviembre 2007, 17:22 PM
Muchas gracias por la colaboración.
Son interesantes y los has explicado de forma clara y sencilla.

En tutoriales he puesto el link, y ya los he guardado en mi HD.

Gracias
un saludo
karmany
#1025
Ingeniería Inversa / Re: olly me manda a leave
30 Octubre 2007, 16:51 PM
Hola...
Lo primero es que pueda que tenga protecciones anti-debuger y anti-OllyDBG.
Usa el OllyDBG con plugins para ocultarlo. Utiliza el OllyDBG de Shadow que está bastante oculto.
Si aún así sigue pasando lo mismo, prueba a ocultar el proceso. Hay un programa muy bueno que lo oculta y no es detectado ni siquiera por el Themida: HideToolz.

En la configuración del OllyDBG, ¿no tendrás puesto para que pare al cargar una librería o cualquier otra configuración distinta?

Si después de todo esto no consigues hacerlo funcionar correctamente, pon un link con el archivo que le echo un vistazo a ver qué pasa.

Un saludo
#1026
Ingeniería Inversa / Re: crackme 1 y 2
27 Octubre 2007, 20:40 PM
Después de echarles un vistazo, voy a añadir (aunque no sean del autor de este post), estos dos crackmes ya que son muy interesantes para Newbies:
-El crackme 1 porque del (1-10) tiene de dificultad 0.
-El crackme 2 es muy interesante ya que trabaja con variables de tipo Double, y  aunque es muy sencillo, utiliza los registros de la pila (hay 8, ST0-ST1-...-ST7) y puede despistar. Incluso hay una instrucción que hace referencia a un Qword = 8 bytes.
Todo esto de las operaciones con punto flotante es muy interesante... y difícil. Este crackme nos puede ayudar a comprender un poco todo este tema.

Hay un doc muy interesante sobre este tema del punto flotante. El enlace está en el post-it de "Links Interesantes".
#1027
Bien, hasta que no nos confirme tazzmk la autoría de los crackmes, no los añadiré a la lista.
#1028
Ingeniería Inversa / Re: CrackMe04 by x4uth
20 Octubre 2007, 12:47 PM
Me apunto yo también a solucionarlo...
Nombre: karmany
Serial: te lo envío por privado...

Un poco de ayuda: Aunque no es fácil, si se presta atención a su código y se examina la zona "caliente" con cuidado y con lógica, podemos encontrar un serial válido para nuestro nombre...
A ver si se apunta a solucionarlo alguno más, sino y con tiempo ya haré yo el tute..
#1029
09 de octubre de 2007 - Versión 2.0 OllyDBG PRE-ALPHA

Nuevos adelantos en nuestro querido Debugger.
Podemos descargar la versión OllyDBG 2.0 versión PRE-ALPHA, desde este enlace:
http://www.ollydbg.de/odbg200a.zip

Su página oficial con toda la información está aquí:
http://www.ollydbg.de/

Una traducción aproximada de esta versión Pre-alpha...
"El niño es bastante grande para mostrarlo al público, así que descargue
esto y échele un vistazo.
-¿Es esta una versión funcional? Sí.
-¿Es mejor que la v1.10? Definitivamente no.
-¿Es mejor que la v1.00? En algunos aspectos quizá, pero en general no.
-¿Puede usted utilizarlo para debuggear? Sí, pero echará en falta muchas, muchas características...
Por favor, no sea demasiado crítico y no me envíe ningún email - esta versión no es aún una alfa completa, y se cambiará radicalmente en las próximas semanas o meses..
Pero el caso es que este OllyDbg fallará y generará un archivo errorlog.txt, sea amable y envíeme este archivo. Lo necesitaré para la eliminación de fallos. ¡Y ahora, disfruten!"

Pues ya sabéis, es un OllyDBG que cuando falla genera un archivo llamado errorlog.txt. El autor pide que se le envíe ese archivo para ir solucionando bugs.






11 de octubre de 2007 - Primeros bugs enviados

Tras el lanzamiento público de la versión Pre-Alpha, unos pocos días después el autor en su página informa que hay bastantes bugs.
La traducción aproximada que hay en su página oficial en inglés es la siguiente:

"¡Qué vergüenza! ¡En sólo un día, he recibido 15 informes de bugs relacionados con el código v2.0 prealfa!.
La mayor parte de ellos, concentrados alrededor de la violación de protección en la dirección 477AC3 (un bug más o menos obvio), pero allí hay también otros fallos relatados.
¿Qué debería yo decir? ¡Gracias! Sin su ayuda estable, OllyDbg 1.10 nunca alcanzaría su calidad real. Esperamos que, en algún tiempo la segunda versión alcance al menos las mismas normas... De todos modos, en un par de semanas habrá una actualización aquí. ¡Y muchas gracias de nuevo! ¡Por favor siga este este camino!"


Esperaremos esa nueva actualización dentro de un par de semanas.






20 de octubre de 2007 - Versión de OllyDBG 2.0a disponible

Como afirmó el autor ya tenemos una nueva versión 2.0 actualizada, aunque el autor dice que para "trabajos serios" que no la utilicemos.
Esta es su traducción aproximada:
"La última versión disponible puede ser descargada desde aquí. No espere demasiado, use v1.10 para cualquier trabajo serio.

20 de octubre de 2007 --> Eliminados 5 bugs. Funcionalidad mejorada de las ventanas existentes. Reducido el número de falsas switches(condiciones?).
09 de octubre de 2007 --> Primer código buggy pre-alpha."







#1030
Ingeniería Inversa / Re: CraCKmE - Molesto
8 Octubre 2007, 23:35 PM
Enhorabuena x4uth por la resolución y el miniTutorial realizado.

Muchas gracias
Un saludo
karmany

PD. Hacía tiempo que no te veía por aquí...