Autor: Karcrack
Nombre: #1 Crackme
Fecha: 27 de diciembre de 2008
Tamaño: 24,0 KB
Compilador y/o Packer: Visual Basic
Objetivos:Encontrar una clave valida
Dificultad: 2/3 (1-10)
Descarga del crackme:http://karcrack.funpic.de/1CrackMe.rar
Autor de Tutorial:UND3R
Noté que no había ningún tutorial, por eso decidí realizar uno
Descarga del tutorial en .doc: http://www.mediafire.com/?00a114mb1eagtti
-Colocamos el crackme en el la ruta:
Citar
C:/
-Cargamos el crackme con OllyDBG y buscamos referencias de texto:encontramos algunas interesantes, parecen PATH, comprobemos
Las PATH son variables de rutas o datos que posee windows como por ejemplo
Citar
windir=Carpeta del sistema operativo
programfiles=Carpeta archivo de programa
programfiles=Carpeta archivo de programa
Para ver las path de nuestro sistema operativo, nos vamos a Inicio->Ejecutar->CMD una vez cargada la consola de windows tecleamos el comandoSET y luego enter:
Si buscamos un poco podremos corroborar con set que son path:
Por lo que nos dirigimos a la string con doble click
y colocamos un BP en ella:
Si traceamos un poco llegaremos hasta 0040274C, si lo pasamos
EAX retornará el valor de HOMEDRIVE
Sigamoslo en el dump
Pasando:
0040275E . FFD7 CALL EDI
EAX=retornará el valor de HOMEPATH
Veamos el valor en el dump:
Si seguimos traceando llegaremos hasta esta API:
en donde concatenará (juntará) el valor del HOMEDRIVE con el HOMEPATH en EAX
Veamoslo en el dump:
Si seguimos traceando mucho más abajo llegaremos a la siguiente API que se encarga de Pasar a Mayúsculas las string's:
en este caso la concatenación
una vez ejecutada la API, podremos ver en el DUMP el HOMDRIVE+HOMEPATH en mayúsculas
Sigamos traceando aquí vemos la llamda de una API muy importante:
InStr (Función, Visual Basic)
Devuelve un entero que especifica la posición inicial de la primera aparición de una cadena dentro de otra.
Parámetros
Citar
Start
Opcional. Expresión numérica que establece la posición inicial para cada búsqueda. Si se omite, la búsqueda comienza en la primera posición del carácter. El índice de inicio está basado en 1.
String1
Requerido. Expresión String en la que se busca.
String2
Requerido. Expresión String que se busca.
Compare
Opcional. Especifica el tipo de comparación entre cadenas. Si se omite Compare, el valor Option Compare determinará el tipo de comparación.
fuente msdn.microsoft.com
Opcional. Expresión numérica que establece la posición inicial para cada búsqueda. Si se omite, la búsqueda comienza en la primera posición del carácter. El índice de inicio está basado en 1.
String1
Requerido. Expresión String en la que se busca.
String2
Requerido. Expresión String que se busca.
Compare
Opcional. Especifica el tipo de comparación entre cadenas. Si se omite Compare, el valor Option Compare determinará el tipo de comparación.
fuente msdn.microsoft.com
En este caso retornó 0 EAX
Luego toma valor obtenido en EAX y lo mueve a ESI:
Luego testea ESI, a través de la tabla AND:
1 AND 1= 1
1 AND 0= 0
0 AND 1= 0
0 AND 0= 0
Por lo que al ser TEST SI,SI existen una posibilidad que de 0 y es si SI=0
1 AND 1= 1
0 AND 0= 0
Si le damos F9 la primera condición no se dará debido a que cuando se llamó la API EAX=retorno 0
por lo que si ponemos el crackme en la ruta:
Citar
C:\Users\Victor\
de ahí en adelante, cuando se pasa por la API InStr esta devolverá lo siguiente:Ahora al momento de dar RUN la primera condición se cumple, ahora vamos por la otra
Si buscamos referencias, encontraremos otro PATH
vallamos hacia el y pongámosle un BP
Coloquemos un número en el serial:
Se dentendrá en USERNAME:
Si seguimos traceando llegaremos hasta la siguiente API:
en la que retornará el valor de USERNAME:
vayamos al dump:
Si seguimos traceando notaremos que compara la cantidad de caracter que se colocaron al serial con 6, cantidad de caracteres de mi USERNAME, algo sospechoso si este es mayor automáticamente la condición dos no se cumple
Si seguimos traceando llegaremos aquí:
Luego de pasar por esta API toma la primera letra de mi username V que en hexadecimal es 56 y le suma 1 transformándolo en F7 es decir en W
Pongamos un BP en tal API y demos RUN
Notaremos que vuelve a detenerse ahí y continúa haciendo lo mismo con los otros caracteres de mi USERNAME:
Probemos colocar mi USERNAME sumandole uno a cada string como mi serial:
Notaremos que lo hemos logrado, por lo que por conclusión:
1-Condición se debe tener el crackme dentro de C:\Users\Victor\ Puede ser cualquier subcarpeta, pero debe tener como base tal ruta
2-el serial correcto es el USERNAME (Nombre de nuestra cuenta) y sumarle 1 a cada string