elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Ingeniería Inversa (Moderadores: karmany, .:UND3R:., MCKSys Argentina)
| | |-+  [TUTORIAL]Crackme edu
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [TUTORIAL]Crackme edu  (Leído 8,435 veces)
.:UND3R:.
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.118


Ingeniería inversa / MASM


Ver Perfil WWW
[TUTORIAL]Crackme edu
« en: 20 Octubre 2011, 06:21 am »

Tutorial Crackme edu

Nombre:Crackme edu
Dificultad:1-2
Compilador:Visual Basic
Autor del crack:$Edu$

Cargamos el crackme desde OllyDBG, Notamos claramente que es un Visual Basic 6.0:


Veamos las API'S que utiliza el crackme (Ctrl+N):


Notaremos dos API'S muy interesantes coloquemos BP'S en ellas:




La primera se encarga de comparar string's y la segunda se encarga de obtener el número de caracteres de una string, las veremos más detalladamente a continuación mientras vayamos desarrollando el tutorial

Iniciamos el crackme (F9) e introducimos ID,SERIAL y luego verificar:


Vemos que se detiene en la API __vbaStrCmp:




Llegamos hasta la call __vbaStrComp, si nos fijamos en el stack podremos ver la comparación que se va a realizar (arg2 con arg3) notaremos que comprueba el serial falso con 0, por lo que lo más probable es que esté comprobando que si es que NO introdujimos algún valor.(para ver los datos que compara debemos hacer click derecho en alguno de los dos argumentos y seleccionar follow in dump):



Pasando la call __vbaStrComp y estando detenidos en RETN 8 veremos que EAX=1 por lo que deducimos que la API __vbaStrCmp retornará 1 si es que los string comparados no son iguales:



Luego mueve el valor de EAX a EDX y luego de algunas operaciones toma el EDX(1)y lo mueve dentro de [EBP-E4]  :


Ahora realizará los mismos pasos pero con la string ID:




Compara 0 con la ID que introdujimos esto devolverá 1 al retornar de la CALL:


una vez realizada las mismas operaciones mueve respectivamente ambos valores obtenidos de las llamadas a __vbaStrCmp (Ambos retornaron 1) a EAX y ECX:



realizando un TEST EAX,ECX:

Sabemos que la única forma de que no se active el flag Z (para que salte) es que EAX y ECX sean 1 con lo cual contamos de manera correcta

Si no se cumpliera nos mostrará un mensaje diciendo que debemos ingresar los datos


Si continuamos traceando el programa hará un llamado a la API __vbaLenBstr:


retornando la call EAX contiene el número de caracteres del serial que en este caso son 4 (serial falso:1234):


Continuando se llamará nuevamente a la API:

en esta nos retornará el valor 5 ya que UND3R contiene 5 caracteres

Luego se realiza una comparación entre EAX y ECX en donde EAX es el largo de la ID y ECX el largo del serial, notaremos que si no se realiza el salto obtendremos como resultado que el serial es incorrecto, para que pueda saltar el serial no puede ser mayor(más largo) que el ID en este caso cumplimos con el requisito:


Luego de esto no creo que se utilice nuevamente la API __vbaLenBstr debido a que ya se ha calculado el largo que hemos ingresado tanto del serial y del ID por lo que lo borraremos:


Ahora si damos nuevamente F9 se detiene en la API __vbaStrCmp:


si pusheamos hasta el call __vbaStrComp y miramos el stack notaremos que se está comparando 1 con Z, siendo 1 el primer digito que introdujimos en el serial falso:






Retornando de la API EAX toma el valor de FFFFFFFF y este es movido a ESI para luego pasar por un TEST SI,SI


:
en donde la única forma de que no salte es que ESI=0, por lo que podemos colocar un BP en el salto JNZ e introducir como serial Z234 o modificar el flag Z para que no salte ya que si salta notaremos se dirigirá a la string "Serial incorrecto"

Si seguimos traceando llegaremos a la siguiente address:

previamente vemos una comparación que es 1 con 3 en donde saltará si lo que está en DI sea mayor a 3, si vemos hacia donde salta notaremos que es hacia el cartel de que el serial es correcto, aquí veo un posible pequeño bug en la programación del crackme ya lo comentaré

[EBP-D0]:


Si seguimos traceando sin alterar el salto que nos dirige al cartel de serial correcto llegaremos hasta la siguiente address:


Si bajamos un poco notaremos un salto que anteriormente habíamos pasado por el, lo más probable es que tengamos a continuación la manera de como el crackme obtuvo la letra Z como respuesta correcta para el primer carácter del serial. obviamente en este caso obtendremos el valor del segundo carácter correcto:


Lleguemos hasta la siguiente address:


Aquí notamos algo muy interesante si miramos el registro y el OP-Code del address en donde estamos detenidos:


Sabemos que ECX apunta a nuestro ID, aquí moverá a DX el valor de ECX+2 por lo que moverá el segundo carácter a DX que en este caso es una N:




Quedando EDX con de la siguiente manera:


luego a EDX le suma 5, una vez sumado mueve a EAX el valor de DX y lo pushea para la API __vbaStrCmp:


luego llega nuevamente a una comprobación que es la misma en la que nos detuvimos cuando se comparó 1 con Z:


si vemos en el stack notaremos la comparación entre nuestro segundo caracter del serial con S:






Por lo que ya contamos con la fórmula y de alguna manera el entendimiento de como trabaja el crackme

Resumimos:
-verifica que ambas cajas de textos no estén vacías
-luego verifica que el SERIAL introducido no sea mayor a la ID
-luego toma el primer carácter del serial y le suma 5
-compara el resultado del primer carácter+5 con el primer carácter del serial
-luego continua sucesivamente con un contador que es hasta el tercer carácter
-Cumpliéndose los 3 primeros caracteres obtendremos el cartel de serial correcto

Aquí el problema de $Edu$, quizás es intencional pero la comprobación es solo hasta el tercer carácter por lo que podríamos colocar tan solo 3 caracteres este sería el pequeño bug del crackme

UND3R
U=55+5=Z
N=4e+5=S
D=44+5=I
3=3+5=8
R=52+5=W


Otra forma de crackearlo es nopear el salto que viene a continuación de la comparación del serial ya que si recordamos $Edu$ colocó un contador que si se pasa por el por tercera vez es considerado el serial como correcto:





Saludos a $Edu$

EDIT:
Adjunto el keygen hecho en OllyScript:


Código
  1. VAR CONT
  2. VAR VMEMORY
  3. VAR SIZE
  4. VAR AUX
  5. VAR RESP
  6. PREG:
  7. ASK "Introduzca su ID"
  8. MOV RESP,$RESULT
  9. LEN RESP
  10. MOV SIZE,$RESULT
  11. ALLOC 100
  12. MOV VMEMORY,$RESULT
  13. MOV VMEMORY2,VMEMORY
  14. CMP VMEMORY,0
  15. JE ERROR1
  16. MOV [VMEMORY],RESP
  17. OPERACION:
  18. CMP CONT,SIZE
  19. JE EXIT
  20. MOV AUX,[VMEMORY],1
  21. ADD AUX,5
  22. MOV [VMEMORY],AUX,1
  23. INC VMEMORY
  24. INC CONT
  25. JMP OPERACION
  26. ERROR:
  27. MSG "Debe ingresar un serial"
  28. JMP PREG
  29. ERROR1:
  30. MSG "Error inesperado"
  31. RET
  32. EXIT:
  33. MOV AUX,[VMEMORY2], SIZE
  34. BUF AUX
  35. STR AUX
  36. EVAL "ID:{RESP} SERIAL:{AUX}"
  37. MSG $RESULT
  38. FREE VMEMORY2
  39. RET
« Última modificación: 21 Octubre 2011, 19:07 pm por .:UND3R:. » En línea


Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)
.:UND3R:.
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.118


Ingeniería inversa / MASM


Ver Perfil WWW
Re: [TUTORIAL]Crackme edu
« Respuesta #1 en: 20 Octubre 2011, 06:37 am »

EDIT:Link reparado

Adjunto un .doc

http://www.mediafire.com/?tlj5u42r5zys5zk

Saludos
« Última modificación: 21 Octubre 2011, 15:13 pm por .:UND3R:. » En línea


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

Desconectado Desconectado

Mensajes: 242



Ver Perfil
Re: [TUTORIAL]Crackme edu
« Respuesta #2 en: 20 Octubre 2011, 10:47 am »

Como siempre... ;-)

Saludos
En línea

.:UND3R:.
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.118


Ingeniería inversa / MASM


Ver Perfil WWW
Re: [TUTORIAL]Crackme edu
« Respuesta #3 en: 20 Octubre 2011, 15:22 pm »

Como siempre... ;-)

Saludos

Gracias Tinkipinki, espero un tutorial tuyo sería genial
En línea


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


Desconectado Desconectado

Mensajes: 1.842



Ver Perfil
Re: [TUTORIAL]Crackme edu
« Respuesta #4 en: 20 Octubre 2011, 16:15 pm »

Buenaaa! muchas gracias!! lo volvere a leer otra vez y ya comprendere, se ve que yo tenia problemas con ponerle BP a esa api, pero vi un tema que le paso a Trinkipinki y espero la respuesta de algun otro ahi ;)

Y como es eso de decirme mal programador? muy mal lo tuyo xD
El error que cometi, ya que lo hice rapido no es lo que comentas ya que si con tu ID pones: ZSI8W da correcto si, pero tu dices que si pones id: UND3R y serial: ZSIXX por ejemplo daria correcto y no es asi.

Lo que si hice mal es que hago un bucle con el serial que ingresa, por lo que para id: UND3R el serial correcto puede ser solamente: Z y listo jaja, pero eso lo cambio en vez de hacer la comparacion de si es menor al ID, hacer que sea si o si 1 menos por ejemplo, ahi si tendria que ser el serial de 4 caracteres en tu caso.
En línea

.:UND3R:.
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.118


Ingeniería inversa / MASM


Ver Perfil WWW
Re: [TUTORIAL]Crackme edu
« Respuesta #5 en: 20 Octubre 2011, 18:05 pm »

Buenaaa! muchas gracias!! lo volvere a leer otra vez y ya comprendere, se ve que yo tenia problemas con ponerle BP a esa api, pero vi un tema que le paso a Trinkipinki y espero la respuesta de algun otro ahi ;)

Y como es eso de decirme mal programador? muy mal lo tuyo xD
El error que cometi, ya que lo hice rapido no es lo que comentas ya que si con tu ID pones: ZSI8W da correcto si, pero tu dices que si pones id: UND3R y serial: ZSIXX por ejemplo daria correcto y no es asi.

Lo que si hice mal es que hago un bucle con el serial que ingresa, por lo que para id: UND3R el serial correcto puede ser solamente: Z y listo jaja, pero eso lo cambio en vez de hacer la comparacion de si es menor al ID, hacer que sea si o si 1 menos por ejemplo, ahi si tendria que ser el serial de 4 caracteres en tu caso.

Gracias por la corrección, en ningún momento dije que eras mal programador jajaja xD solo dije que te habías equivocado, pero de todas forma excelente crackme esperamos el segundo, Saludos $Edu$
En línea


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


Desconectado Desconectado

Mensajes: 1.842



Ver Perfil
Re: [TUTORIAL]Crackme edu
« Respuesta #6 en: 21 Octubre 2011, 00:09 am »

Tendria que seguir leyendo la introduccion para saber que otros tipos de crackmes se pueden hacer, pero tengo una idea en mente especialmente para vos que te dejara una leccion si funciona bien :P Pero luego por msn hablamos ;) Gracias de nuevo :P
En línea

.:UND3R:.
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.118


Ingeniería inversa / MASM


Ver Perfil WWW
Re: [TUTORIAL]Crackme edu
« Respuesta #7 en: 21 Octubre 2011, 02:21 am »

Tendria que seguir leyendo la introduccion para saber que otros tipos de crackmes se pueden hacer, pero tengo una idea en mente especialmente para vos que te dejara una leccion si funciona bien :P Pero luego por msn hablamos ;) Gracias de nuevo :P

Excelente, adjunto un keygen en el post que realicé con ollyscript, pruébalo
En línea


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

Mensajes: 1.615


Sueñas que sueñas


Ver Perfil WWW
Re: [TUTORIAL]Crackme edu
« Respuesta #8 en: 21 Octubre 2011, 11:38 am »

Excelente tutorial, lo voy a guardar ahora mismo...
Saludos

No se puede descargar el doc.

PD. .:UND3R:. pon una dificultad de 1 a 10, que es la que anotaré en crackmes y tutoriales.
« Última modificación: 21 Octubre 2011, 11:56 am por karmany » En línea

.:UND3R:.
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.118


Ingeniería inversa / MASM


Ver Perfil WWW
Re: [TUTORIAL]Crackme edu
« Respuesta #9 en: 21 Octubre 2011, 15:14 pm »

Excelente tutorial, lo voy a guardar ahora mismo...
Saludos

No se puede descargar el doc.

PD. .:UND3R:. pon una dificultad de 1 a 10, que es la que anotaré en crackmes y tutoriales.

Reparado el link y la dificultad Saludos
En línea


Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Tutorial] Crackme de ESET para Ekoparty 2011 « 1 2 »
Ingeniería Inversa
PeterPunk77 12 8,852 Último mensaje 28 Noviembre 2011, 00:28 am
por Shamaroot
[Tutorial] SelfKeygen Crackme 58DD2D69 C.L.S.
Ingeniería Inversa
cibergolen 3 3,743 Último mensaje 25 Diciembre 2011, 05:17 am
por Иōҳ
[Tutorial] Russian Dolls crackme « 1 2 »
Ingeniería Inversa
.:UND3R:. 13 9,473 Último mensaje 7 Enero 2012, 17:04 pm
por .:UND3R:.
tutorial crackme.exe
Ingeniería Inversa
mario86 4 13,329 Último mensaje 28 Diciembre 2016, 13:01 pm
por apuromafo CLS
Tutorial acerca del crackme de SkaPunky
Ingeniería Inversa
jJPHyES 3 3,407 Último mensaje 11 Mayo 2018, 15:57 pm
por jJPHyES
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines