mi primer crackme

Iniciado por ny0x, 21 Mayo 2009, 00:12 AM

0 Miembros y 2 Visitantes están viendo este tema.

Arkangel_0x7C5

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

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?

Arkangel_0x7C5

#12
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

Red Mx

ya no lo pued descargar  deberias poner varios mirros.
Desarrollar Malware Es Causa De Cancer...

ny0x

#14
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

Arkangel_0x7C5

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.

ny0x

bueno como creo que nadie mas se va a animar, dejo el codigo fuente

Código (cpp) [Seleccionar]

#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

Amerikano|Cls

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




Mi blog:
http://amerikanocls.blogspot.com