Bueno me estuve dando una vuelta por este subforo y me parecio interesante el tema de los crackmes, asi que aqui les dejo mi primer crackme en C. La respuesta es un poco obvia, pero nunca habia intentado hacer un programa de estos.
http://www.megaupload.com/?d=M51KHACB
me estare leyendo los tutos porque no pude resolver el de invisible y eso que todos dicen que esta facil. A ver si mis pocos conocimientos de asm me ayudan :P
espero les sirva aunque sea para distraerse un rato ;D
P.D un user incorrecto o pass incorrecta provocan una exepcion. La unica manera de que no pase es poner el verdadero user y pass
1.-Høl¥ primero ;-) ;-)
Arkangel_0x7C5 segundo ;-) ;-)
No se pudo iniciar la aplicación porque su configuración es incorrecta. :-\
Salu2!
dime la info de tu SO para ver, de todas maneras lo recompilo y lo vuelvo a subir
Xp Professional Ed. Sp2
listo ya lo lo recompile y lo volvi a subir, mando tambien el obj por si se necesita compilar, otra ves use el borland c++ 5.5, en windows xp sp3, el otro habia sido con VC 2008
Funciona correctamente ::)
jeje, estoy en la zona de comparacion.
Esto da mas vueltas que un molino jeje
ni intenten buscar el pass dentro del ejecutable por que no esta ::), mas bien es por un poco de razonamiento
Muy bueno el crackme , si señor ;D
En un principio no lo podia entender, este crackme no es como otros, no
hay que buscar por comparaciones si no solo mirar el codigo y por logica
se saca xD
La verdad es que es muy ingenioso el user y la pass, pero aquellos que no
sepan algo de programacion basica de windows dudo que lo resuelvan ^^
Te mande por PM el user / pass.
Que pasa? nadie se anima :-[, hasta ahorita nada mas Høl¥ lo ha logrado (no se cuantos lo hayan intentado :P ), vamos animense no esta para nada dificil, tomen en cuenta que es el primero que hago y no soy muy bueno progrmando
saludos
pos yo me canse de buscarlo jeje. Yo no me dedico mucho a esto de la ingeniería inversa
Voy a tener que cojer uno de esos manuales de Ingeniería Inversa jeje
Saludos
PD:muy bien conseguido mi amigo regx\ny0x
bueno veremos quien mas se anima, lo dejare una semana y si nadie se anima, pondre el codigo fuente y explicare (en lo posible :P ) como funciona. Mis felicitaciones a Høl¥ que lo resolvio ;-)
P.D El crackme no se trata de buscar el user y el pass en el ejecutable sino ver como funciona y deducir la respuesta, les deje una pista: la exepcion producida si te equivocas, ¿alguien se ha preguntado por que pasa?
Segun la msdn tienes 2 nombres de usuario y una contraseña. Pero no sale el mensaje jeje
PD:Se y no se la clave jeje
ya no lo pued descargar deberias poner varios mirros.
no me regañen ;D , ahorita lo vuelvo a subir inxe rapidshit, arkangel esta cerca de la respuesta
Edit:
ya esta el nuevo enlace de descarga, si da problemas avisen
Costo pero ya esta, Añade me de una .. vez
Saludos
PD:Es el primero y ya le tira fuerte jeje o que yo soy malo en esto.
bueno como creo que nadie mas se va a animar, dejo el codigo fuente
#include <windows.h>
#include <iostream>
using namespace std;
char* cr(char* cadena);
void parse(char *cadena,char *cad);
char* txt="üÿöóùóþûþÿé";
char* msg="èÿýâºþóùÿ ";
int main()
{
cout<<"Escribe el usuario: ";
char pass[1024], name[1024];
cin>>pass;
cout<<"Contraseña:";
cin>>name;
parse(pass,name);
}
char* cr(char* cadena)
{
int _size = lstrlen(cadena);
char* cade=new char[_size];
lstrcpy(cade,cadena);
char* vptr=cade;
for(int Ctr=0;Ctr<_size;Ctr++)
{
*vptr ^= 0x29A;
vptr++;
}
return cade;
}
void parse(char *cadena,char *cad)
{
char p[1024],p2[1024];
lstrcpy(p,cr(cadena));
lstrcpy(p2,cr(cad));
HMODULE h = LoadLibrary(cad);
typedef int (WINAPI* pt)(HWND,LPCSTR,LPCSTR,UINT);
pt exito = (pt)GetProcAddress(h,cadena);
exito(0,cr(txt),cr(msg),0);
}
Como pueden ver no es gran cosa, en resumen lo que hace es pedir la contraseña y el user que en realidad es el nombre de una dll y una funcion. El programa no comprueba que el resultado sea correcto para que no sea detectado con un simple analisis de cadenas. Entonces como se resuelve? pues buscando el sitio del crash (si introduces el nombre de una api o dll inexistente se produce un crash). Una vez encontrado solo hay que buscar analizar el codigo desensamblado un poco mas arriba y te daras cuenta de lo que es el user y el pass, ya que se usa LoadLibrary y GetProcAddress.
Ahora el segundo paso consiste en encontrar una api y una libreria que rellene el hueco para poner como user y pass, y como generalmente los crackmes te informan cuando acertaste. Uno puede deducir con un poco de paciencia que se trata de MessageBoxA.
Por lo tanto la respuesta es:
usuario: MessageBoxA
pass: user32.dll
El codigo es muy basico, se podria mejorar comprobando que LoadLibrary no devuelva un handle invalido para evitar el crash, y sea un poquito mas dificil encontrar el punto esencial.
Queria darle un mejor uso a la enciptacion barata pero bueh, por lo menos hizo un poco mas de bulto ;D.
Felicidades a los que lo resolvieron ;-) y gracias por su tiempo
saludos
Perdon a los mods por revivir este tema pero Hombre justo cuando estoy con tiempo libre y buscando crackmes para matar el tiempo veo que ya haz puesto el fuente mm, no es bueno porque sino la gente que mira los temas antiguos como yo no tendrian oportunidad de ver el crackme y entretenerse un rato, que por cierto esta interesante por lo que muestra el src, pero bueno a otra será jeje.
salu2