Hola amigos pues aqui esta mi nuevo crackme el sexto ya
como los demas esta hecho en vb y no esta comprimido y trae dos retos uno fasil y otro difisil para que los nobatos y avanzados no queden afuera y partisipen
Link
http://www.mediafire.com/?z66utv48iv1xb5b
(http://foro.elhacker.net/?z66utv48iv1xb5b)
Reglas:
1-para nobatos vale parchar
2-para avanzados como Fly, Nox,apuromafo y otros que seme escapen por hay no vale parchar, solo encontrar contraseña y crear keygen para los dos retos
den gracias a tinkipinki por el pedido del crackme y a tincopasa por el codigo que me paso de la musica y como lograr un formulario asi
Lista De Logros
-----------------------------------------------------------------------------
| Lugar| Usuario | Logro |
-----------------------------------------------------------------------------
| 1 | Thunder | Keygen Reto1 y Serial Reto2 Mas bug |
-----------------------------------------------------------------------------
| 2 | Fly | Keygen Reto 2 |
-----------------------------------------------------------------------------
| 3 | apuromafo | Keygen Reto1 y Reto2 |
-----------------------------------------------------------------------------
| 4 | yako-_- | Serial Reto1 y parche Reto2 |
-----------------------------------------------------------------------------
| 5 | jEUDi17 | Serial Reto1 y parche Reto2 |
-----------------------------------------------------------------------------
| 6 | Tinkipinki | Parche Reto1 y Reto2 |
-----------------------------------------------------------------------------
saludos Flamer y gracias Por Su Partisipacion y Mis Respetos Crackers
....
Gracias por este nuevo reto..... ;-)
Saludos
Hola a todos:
Para el grupo de novatos en el cual me incluyo y por hacer un poco de ambiente, parcheado el primer reto.
(http://www.mediafire.com/conv/c5a4b95062633b6fd55011bec443ac1550840008182369dfec5aa9cb4d3238286g.jpg)
Saludos
Muchas gracias Flamer por tu colaboración. Lo he descargado y guardado.
A ver si algun@ más se anima...
Felisidades tinki parchar fueron mis pininos en el cracking poreso puse esa regla para los novatos para que se animen y aprendan.
Nota: aclaro me considero novato todavía
pondre una lista de los logros
Publicado por: karmany
Citar
Insertar Cita
Muchas gracias Flamer por tu colaboración. Lo he descargado y guardado.
A ver si algun@ más se anima...
de nada karmany con muncho gusto, a y yo me encargo de ponerlo en la lista
saludos flamer
Para los que no sepan por donde atacar el crackme, yo empece en poner un BP en la funcion rtcMsgBox para detectar de donde se llama la ventana de chico malo y a partir de ahi ir analizando codigo hacia atras.
Saludos
ta interesante tu programita:
primera comparacion de si es binariamente mayor al otro..(usuario serial) en la dificil trabajas denuevo con los FP... de formato o estilo
004095C8=KeygenMe.004095C8 (UNICODE "00101000000010001000")
obviamente eso no es valido ;)
0040A4D1 FF15 F0104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFpI2>>; msvbvm60.__vbaFpI2
Hola a todos:
Parcheado el segundo reto
(http://www.mediafire.com/conv/2ea75848b445061f33c4abdc024ce265a465fb65829319b5fa448b2ac8286f926g.jpg)
Se que no tiene mucha importancia el parchear un programa y que el reto esta realmente en generar los keygens correspondientes pero esto ya es harina de otro costal. Voy a probarlo pero aqui si que me voy a tomar mi tiempo en resolverlo y si consigo hacerlo ya nadie se va a acordar del crackme o sea que solo va a ser un reto personal y por cabezonaria de novato.
Saludos
Cita de: apuromafo en 5 Agosto 2012, 06:45 AM
ta interesante tu programita:
primera comparacion de si es binariamente mayor al otro..(usuario serial) en la dificil trabajas denuevo con los FP... de formato o estilo
004095C8=KeygenMe.004095C8 (UNICODE "00101000000010001000")
obviamente eso no es valido ;)
0040A4D1 FF15 F0104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFpI2>>; msvbvm60.__vbaFpI2
hola apuromafo leyendo rapidamente no te entendi eso que dises que eso no es valido; si te refieres aque no hay contraseña pues si la hay yo tengo una de ellas aguardada y sele puede hacer keygen
saludos flamer
que se le puede se puede, simplemente digo que esta interesante la rutina donde pongas un serial tipo y luego compara, realmente por tiempo a lo mas veo que son cadenas no tan cotidianas ^^
Keygen (en VB6)
Suponiendo que en un form hay un boton (Command1) y un textbox (Text1):
Function getForcedChar(testInt As Integer) As String
Dim hallado As Boolean
Dim car As Integer
Dim valor As Integer
hallado = False
Do While (Not hallado)
car = Int((91 * Rnd) + 32)
valor = ((((((car + &H6B - 4) * 5) / 2) * 3) Xor &H19C) And 1)
hallado = (valor = testInt)
Loop
getForcedChar = Chr(car)
End Function
Private Sub Command1_Click()
Dim serial As String
Dim i As Integer
For i = 1 To 20
serial = serial + getForcedChar(IIf((i = 3) Or (i = 5) Or (i = 13) Or (i = 17), 1, 0))
Next i
Text1.Text = serial
End Sub
Analisis:
len serial=20 chars
str((((((chr(serial) + 6Bh - 4) * 5) / 2) * 3) xor 19Ch) & 1) = "00101000000010001000"
Saludos!
Gracias MCKSys, con el codigo que has posteado se puede ver claramente como trabaja el algoritmo de calculo del serial a parte que nos brinda la oportunidad de adentrarnos un poco mas sobre la programacion en VB para los que no dominamos este entorno ;-)
Saludos
Balla fly eres buenisimo para esto felisidades
para la otra tela pondre mas difisil
saludos flamer ya te anote en la lista
Hola
Ya veo que MCKSys lo resolvio, felicidades amigo ;-)
Igual solo hare unos apuntes de mi parte.
Serial Facil
========
for(int i = 0; i < strlen(serial); i++)
{
val = serial[i] + 0xE0;
strcat(serialfinal, val);
}
Name: Thunder
Serial: 13414815514E144145152
Nota: En esta parte del crackme hay un bug(al no ser que se haya echo conscientemente), cada vez que insertas un serial incorrecto, se acumulan las cadenas del serial correcto una a continuacion de la otra, ej: Serial correcto para nuestro name: 123
Si ponemos 4 veces un serial incorrecto el serial correcto ya no seria 123, sino 123123123123123, por lo que creo que se ha olvidado de limpiar la variable en cada intento y de ahi el bug.
Serial Dificil
=========
length = 20
Bit = ((((serial + 0x67 * 5) / 2) * 3) xor 0x19C) and 1
Tomando solo numeros por flojera podemos crearnos una tabla:
Tabla de Bits
==========
1234567890
0010001000
Ahora solo ubicamos los numeros para lograr la serie de bits correctos
Bits correctos = 00101000000010001000
Serial: 12343668901234567890
PD: Una ultima acotacion, pal cuida el idioma si?, muchas faltas de ortografia en los textos...(critica constructiva :P). Por lo demas no ha estado mal, sigue por ese camino.
Un saludo a todos y...Tinkipinki te invito a que revises bien la parte facil para que veas que no era dificil sacar un serial valido para tu nick.
Hola Thunder si es error mio lo del bug orita biendo el codigo fuente me falto limpiar la variable pero en fin felisidades sebe que eres bueno como fly
boy a notarte en la lista
a mi ortografia no puedo mejorar, boy a tener que buscar una pagina de autocorrecion
saludos Flamer
Cita de: Flamer en 6 Agosto 2012, 21:38 PM
a mi ortografia no puedo mejorar, boy a tener que buscar una pagina de autocorrecion
SIEMPRE se puede mejorar. Es cuestión de perseverar... ;)
Saludos!
felicidades a thunder
bueno, a lo mas tengo un mini tiempo y comento:
mi kg para tu primera instancia de ejecución, aunque intente hacerlo mejor, siempre me crasheo..asi que adjunto lo unico que me resulto:
tu programa y mi kg para el primer nivel, hecho en c++
http://www.mediafire.com/?pvvx5vyu4b8odld
detalles normales_ que habia tenido para el 1, pero que a la hora por no ser buen coder obviamente no habia pensado en keygen
para usuario serial /nivel 1 tomas los valores:
DS:[0040102C]=7348B48B (msvbvm60.rtcAnsiValueBstr)
pero vemos una comprobacion
00409C53 . 83F8 04 CMP EAX,4
00409C56 . 0F9FC2 SETG DL
por ende el primer usuario debe ser igual o mayor a 4 carácteres
como hay un detenimiento no puede ser mayor a 15
mas adelante se ve (integrer) (smartcheck) el cual confirma los valores,
mientras revisaba hoy mi codigo vi que thunder posteó su solucion y descubrimiento del bug, eso me confirmo el tema ,
val = serial + 0xE0;
el + E0 viene de aqui
00409DF3 . 8D95 74FFFFFF LEA EDX,DWORD PTR SS:[EBP-8C]
00409DF9 . 66:81C1 E000 ADD CX,0E0
00409DFE . 8D45 B4 LEA EAX,DWORD PTR SS:[EBP-4C]
pero a diferencia de otros lenguajes, termina en 00 y este es descartado del serial (00+E0)
yo de primera preferia este el lugar para fishear con Bp condicional en ECX==0 y el valor a loguear CX
00409E09 . 66:890F MOV WORD PTR DS:[EDI],CX ; fish
Name:apuromafo
serial:14115015515214F14D14114614F
la concatenacion
00409E2E . FF15 B0104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaVarCa>; msvbvm60.__vbaVarCat
^^
ahora bien portando la idea en C
codigo keygen tipo en C++ codeblock mingw
el que use yo fue
http://prdownload.berlios.de/codeblocks/codeblocks-10.05mingw-setup.exe
#include <conio.h>
#include <iostream>
#include <windows.h>
#include <string>
#include <stdio.h>
using namespace std;
int main()
{
char palabra[20],c=' ';
printf(" Keygen Sakura by Apuromafo 06-8-12 \n");
printf(" Nivel user-serial nivel 1 de 2 niveles \n");
printf(" para Crackme 6 de Flamer \n");
printf(" OBS:serial valido solo para la primera ejecucion, x bug del bufer\n");
printf(" Uso:Ingresa usuario y te dira el serial (osea +0xE0) \n");
printf(" favor mas de 4 letras el nombre y menos de 15 \n\n ");
printf(" hecho solo por un mini tiempo libre \n\n ");
printf("Usuario = ");
scanf("%s",palabra);
printf("Serial = ");
int cont=0,mayor=0,tam=strlen(palabra);
for(int i=0;i<=tam;i++)
{
if(c!=palabra[i])
{
if(cont>mayor)
mayor=cont;
c=palabra[i];
cont=1;
}
else
cont++;
int opc1;
opc1 = (palabra[i] + 0xE0);
if(opc1!=0xE0)
printf("%X", opc1);
}
getch();
flamer, para que no te enojes, te edito el post anterior y te agrego el keygen del nivel 1 en c++
, obviamente por tema de tiempo no fixeo los tamaños de largo y porque mi nivel de programación es bajo en esos temas sobre todo porque siempre c++ me tiende a explotar los exes jiji
saludos Apuromafo
pd:
normalmente para la primera vez es
Nombre:apuromafo
serial:14115015515214F14D14114614F
para la segunda vez que ejecutas (es como si fuera apuromafoapuromafo)
usuario:apuromafo
serial:14115015515214F14D14114614F14115015515214F14D14114614F
esta considera apuromafoapuromafo para la validacion, pero uno simplemente coloco apuromafo en la 2da vez...esop, animo en todo
hola apuromafo no te molestes no me enojo esta bien solo que boy a tener que modificar la tabla de tus logros donde dise serial boy aponer keygen pero te informo te quedas en terser lugar
nose si queden conformes con los lugares que lesdi, pero aclaro todos son buenos Crackers;-) ;-) ;-)
saludos Flamer
no hay lio, igual fue un gran crackme para confirmar :D
, no tengo el tiempo como todos, pero apesar de estar oxidado algo se logra.-
respecto al numero 2 bajo la idea de los bytes por thunder:
mediante array los 20 numeros (en c++) y arrays
adjunto como keygen para el LV 2
http://www.mediafire.com/?fjnjjw0pxxgoin2
#include <iostream>
#include <algorithm>
#include<stdlib.h>
#include<iostream>
#include<time.h>
using namespace std;
int main(void)
{
int num,c;
srand(time(NULL)); //00101000000010001000
for(c=1;c<=2;c++) //XX101000000010001000
{
int array[] = { 1,2,4,5,6,8,9,0 };
srand( unsigned( time(NULL) ) );
random_shuffle(array, array+8);
for(int i=0; i<1; i++)
cout << array[i] <<"";// << endl;
// num=1+rand()%(11-1);
// cout<<num<<"";
}
int array[] = { 3,7 };
srand( unsigned( time(NULL) ) );
random_shuffle(array, array+1);
for(int i=0; i<1; i++)
cout << array[i]<<"";// << endl;
// cout<<"3"; //00X01000000010001000
for(c=4;c<=4;c++)//001x1000000010001000
{
// num=1+rand()%(11-1);
//cout<<num<<"";
int array[] = { 1,2,4,5,6,8,9,0 };
srand( unsigned( time(NULL) ) );
random_shuffle(array, array+7);
for(int i=0; i<1; i++)
cout << array[i]<<"";// << endl;
}
int Array1[] = { 3,7 };
srand( unsigned( time(NULL) ) );
random_shuffle(Array1, Array1+1);
for(int i=0; i<1; i++)
cout << array[i]<<"";// << endl;
// cout<<"3"; //0010X000000010001000
for(c=6;c<=12;c++) //00101X00000010001000
{
// num=1+rand()%(11-1);
//cout<<num<<"";
int array[] = { 1,2,4,5,6,8,9,0 };
srand( unsigned( time(NULL) ) );
random_shuffle(array, array+6);
for(int i=0; i<1; i++)
cout << array[i] <<"";// << endl;
}
// int Array1[] = { 3,7 };
srand( unsigned( time(NULL) ) );
random_shuffle(Array1, Array1+1);
for(int i=0; i<1; i++)
cout << array[i]<<"";// << endl;
// cout<<"3"; //0010X000000010001000
for(c=14;c<=16;c++) //00101X00000010001000
{
// num=1+rand()%(11-1);
//cout<<num<<"";
int array[] = { 1,2,4,5,6,8,9,0 };
srand( unsigned( time(NULL) ) );
random_shuffle(array, array+5);
for(int i=0; i<1; i++)
cout << array[i] <<"";// << endl;
}
// int Array1[] = { 3,7 };
srand( unsigned( time(NULL) ) );
random_shuffle(Array1, Array1+1);
for(int i=0; i<1; i++)
cout << array[i]<<"";// << endl;
// cout<<"3"; //0010X000000010001000
for(c=18;c<=20;c++) //00101X00000010001000
{
// num=1+rand()%(11-1);
//cout<<num<<"";
int array[] = { 1,2,4,5,6,8,9,0 };
srand( unsigned( time(NULL) ) );
random_shuffle(array, array+4);
for(int i=0; i<1; i++)
cout << array[i] <<"";// << endl;
}
cin.get();
}
Buenas!!
Yako-_-
15914114B14F10D13F10D
El facil. Sacado con un BP en vbaVarTsEq.
El dificil lo parche, pero bueno a ver si con un poco mas de tiempo le saco el serial, si no ando mal hace una comprobación de longitud del serial introducido EBX,13(aun tego que trastearlo un poco mas).
El tema del keygen es arina de otro costal (por ahora). Da envidia sana ver como la gente hace keygens.
Un saludo!!
PD: Gracias por este crackme esta entretenido.
Hola yako llegastes tarde
con los nuevas respuestas boy a tener que actualizar la lista apuromafo queda donde mismo solo tinkipinki baja al ultimo lugar y yako ocupa el lugar de tinkipinki
saludos Flamer
se agradece flamer, yo estas instancias siempre lo intento cuando hay tiempo, y clarmaente es lo que menos tengo, por otro lado buscaba hoy manejo y conversion a ascii o int, y encontre otra forma de hacerlo en c++ pero no pude jugar mas con las cadenas en char obvio que por falta de experiencia
esto dara el serial del nombre apuromafo (el ultimo byte es 00)
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
char szCadena[10] = "apuromafo";
int i;
for (i=0; i < 9; i++)
{
printf("%X", (int)szCadena[i]+0xE0) ;
}
cin.get();
// getch();
return 0;
}
el resultado en pantalla será de
14115015515214F14D14114614F
saludos Apuromafo
Hola Flamer, estuve analizando tu programa..
A mi el vb me cuesta bastante, pero digamos que logre hacer algo.
Reto 1 :
Consegui el serial :
Name : Jeudy
Key : 12A145155144159
Reto 2 :
No consegui el serial :
0012F428 |004095C8 UNICODE "00101000000010001000"
0012F29C 004095C8 UNICODE "00101000000010001000"
0012F2A0 02C4314C UNICODE "00000000000000000000000"
0012F2A4 0012F2C4
0012F2A8 75FDF8F7 OLEAUT32.75FDF8F7
0012F2AC 02C4314C UNICODE "00000000000000000000000"
0012F2B0 004095C8 UNICODE "00101000000010001000"
Lo unico que consegui pero no sirve para nada!
Ah, se me olvido aqui esta parcheado :P
(http://www.jb2.com.ar/forojb/chevereto/images/img01.jpg)
Saludos!
Felisidades jEUDi17 el reto 2 si sirve parchar si calificas para la lista.
lo que me entristese es tinkipinki no a conseguido el serial para el reto 1 solo logro parchar el 1 y 2
animo tinki tu puedes
actualisare la lista
saludos Flamer y cuando quieran otro reto les hago otro Crackme
Cita de: Flamer en 3 Septiembre 2012, 17:22 PM
Felisidades jEUDi17 el reto 2 si sirve parchar si calificas para la lista.
lo que me entristese es tinkipinki no a conseguido el serial para el reto 1 solo logro parchar el 1 y 2
animo tinki tu puedes
actualisare la lista
saludos Flamer y cuando quieran otro reto les hago otro Crackme
Vamos animate, otro CrackMe o KeygenMe :P si se puede!!
Claro que se puede ;-) ;-)
dame tiempo nomas para hacerlo>:D
y un trabajo que tengo que hacer aa estara hecho en vb6
Cita de: Flamer en 3 Septiembre 2012, 19:54 PM
Claro que se puede ;-) ;-)
dame tiempo nomas para hacerlo>:D
y un trabajo que tengo que hacer aa estara hecho en vb6
:) :) Gracias flamer
Apuromafo y los demas crackers Mostraron su gran trabajo.
Yo como no pude hacer un keygen solo lo comente. Para decirles lo que entendi de ese codigo.
Esto es lo que entendi de el algoritmo.
#include <windows.h>
#include <string>
#include <conio.h>
#include <conio2.h>
#include <stdio.h>
// Recuerda que si me criticas por esto, saber que soy c++ nivel 1.
// Todo lo que se , me lo enseño mi hermano que estudio esto. Estudia ingenieria civil.
/*************************************************
* Author : Apuromafo *
* Compilador : Dev-c++ (Apuromafo uso otro). *
* PD : Lo edito para decirles lo que entendi. *
************************************************/
int main()
{
SetConsoleTitle ("KEYGEN"); //Establece el titulo de la consola.
char szName [ 20 ], szSerial = ' '; // El nombre tiene que tener maxi 20 caracteres.
/* El espacio entre las comillas es para que el compilador no nos diga : "Empty character constant".
* Para que no nos de error. Agregamos ese espacio.*/
gotoxy (2, 2); printf(" Keygen Sakura by Apuromafo 06-8-12 \n");
gotoxy (2, 4); printf(" Nivel user-serial nivel 1 de 2 niveles \n");
gotoxy (2, 6); printf(" para Crackme 6 de Flamer \n");
gotoxy (2, 8); printf(" OBS:serial valido solo para la primera ejecucion, x bug del bufer\n\n");
gotoxy (2, 10);printf(" Uso:Ingresa usuario y te dira el serial (osea +0xE0)\n");
gotoxy (2, 12);printf(" favor mas de 4 letras el nombre y menos de 15.");
textcolor (WHITE);
gotoxy (2, 14); printf(" Ingrese su nombre : ");
scanf("%s", &szName); //Guarda lo maximo de caracteres en la variable szName.
// &szName -> Es para indicar que se va a guardar algo en esa variable.
system("CLS");
textcolor (LIGHTGRAY);
gotoxy (2, 2);
int i = 0, my = 0, ecx = 0, iLen = strlen(szName);
/* strlen (*CHAR) -> Sirve para contar la cantidad de caracteres de una variable. */
for (i = 0; i < iLen; i++) //Si i es igual a 0, i es menor que iLen . entonces i se aumentara.
{
if (szSerial != szName[i]) //szSerial tiene que ser diferente o igual a szName[i] -> en el vector "i".
{
if (ecx > my) // ecx tiene que ser mayor que "my" para q se cumpla la siguiente instruccion.
my = ecx; // "my" ahora tiene el valor de ecx.
szSerial = szName[i]; //szSerial va a ser igual a szName en el vector "i".
ecx = 1; // Si se cumple todo esto, entonces el contador "ecx" se aumentara a 1.
}else
ecx++; // ecx se aumenta.
int opc; //Una operacion.
opc = (szName[i] + 0xE0); // Generamos el serial.
if (opc != 0xE0)
printf("%X", opc); //Obtenemos nuestro serial.
}
getch(); // PAUSAMOS EL PROGRAMA.
return 0;
}
Descargar Keygen Compilado : http://www.2shared.com/file/7eKB_7u_/Apuromafo.html (http://www.2shared.com/file/7eKB_7u_/Apuromafo.html)
Felicitaciones ;-)
a pesar que pasa el tiempo, me alegro que los keygens o mini codigo hayan sido utiles
realmente nunca administro tanto tiempo para comentar los codigos, pero me ha parecido muy buenos
felicidades jEUDi17
y como no el autor del crackme
saludos Apuromafo