Tras mucho tiempo de no postear en este foro, me decidí hacer este pequeño y tonto crackme para el que tenga ganas de jugar con el... cabe aclarar que es demasiado simple como para parchearlo por lo que la idea es obtener un usuario y clave válido por lo menos (aunque un keygen no es muy complicado una vez entendido el algoritmo)... :P
Sin más preámbulo se los dejo: CrackMe if you can III (Reborn) (http://www.mediafire.com/?pa647pgyh3d8p25)
S2
demasiado simple parcharlo?
004017C3 837D EC 00 CMP DWORD PTR SS:[EBP-0x14],0x0
004017C7 74 07 JE SHORT crackme.004017D0 ;lugar vulnerable a ser parchado
004017C9 A1 08304000 MOV EAX,DWORD PTR DS:[0x403008]
004017CE EB 05 JMP SHORT crackme.004017D5
004017D0 A1 04304000 MOV EAX,DWORD PTR DS:[0x403004]
luego mostraría
Citar---------------------------
CrackMe If You Can III (Reborn)
---------------------------
Clave Correcta, Ahora Haz un Tutorial!
---------------------------
Aceptar
interesante tus rutinas, espero alguien se anime a intentar un usuario y serial.
largo del nombre
00401869 E8 1E030000 CALL <JMP.&KERNEL32.lstrlenA>
0040186E 83EC 04 SUB ESP,0x4
00401871 83F8 03 CMP EAX,0x3 ;comparacion con largo
00401874 7F 2E JG SHORT crackme.004018A4
largo del serial
004018AA E8 DD020000 CALL <JMP.&KERNEL32.lstrlenA>
004018AF 83EC 04 SUB ESP,0x4
004018B2 83F8 07 CMP EAX,0x7 ;comparacion con largo
004018B5 7F 2B JG SHORT crackme.004018E2
Ueeeee, mi primer crackme ajeno que consigo destripar :P (llevo 3 dias con este tema del craking)
Me ha gustado mucho, yo estoy terminando de programar un crackme sencillito, en breve lo subo para que probéis :D
PD: Solo he logrado parchear el exe, no he visto el serial por ninguna parte :(
Saludos! Gracias por el crackme, es fácil, aunque me llevó como una hora porque soy un poco inútil! La verdad no había visto una rutina como la tuya! será porque no le entendí un carajo jeje!
solución para mi: user tinco pass 0CA0B75F
éxitos
Cita de: tincopasan en 17 Enero 2013, 11:04 AMSaludos! Gracias por el crackme, es fácil, aunque me llevó como una hora porque soy un poco inútil! La verdad no había visto una rutina como la tuya! será porque no le entendí un carajo jeje!
solución para mi: user tinco pass 0CA0B75F
éxitos
sip, lo solucionaste!, ahora solo faltaría que explicaras como hiciste! :P
S2
Una pequeña explicación de lo que hice:
Aclaración: los que me conocen de otro lado saben que no sé que significa mov al,1 mi amigo solid me lo explicó hace como 4 años pero mi neurona no aprende.
Por lo tanto pido disculpas a los que realmente saben por mi atrevimiento.
Y al autor del crackme: dije que es fácil porque
en escala de 1 a 10
mis conocimientos de ensamblador = 1 (cmp,jmp,je)
uso del ollydbg = 3 mirar stack, F7 y F8
conocimientos de apis o funciones= 1 GetDlgItemTextA
Sin embargo lo resolvi!
1) no tiene protección extra.
2) al cargarlo en olly se ve en el dump
00403004 00404084 ASCII "Clave Correcta, Ahora Haz un Tutorial!"
00403008 004040AC ASCII "Clave Incorrecta, Sigue Intentando :P!"
3) en la ventana C busco la constante 403004
004017BE E8 01040000 CALL <JMP.&msvcrt.printf> ni idea!
004017C3 837D EC 00 CMP DWORD PTR SS:[EBP-14],0 compara con 0
004017C7 74 07 JE SHORT crackme.004017D0 si no salta... a llorar al campito
004017C9 A1 08304000 MOV EAX,DWORD PTR DS:[403008] chico malo
004017CE EB 05 JMP SHORT crackme.004017D5
004017D0 A1 04304000 MOV EAX,DWORD PTR DS:[403004] chico bueno!
004017D5 C9 LEAVE
004017D6 C3 RETN
4) como tiene que tomar el usuario y nombre bp en recuperadores de texto en este caso es:
00401836 E8 09030000 CALL <JMP.&USER32.GetDlgItemTextA> adquiere el usuario
0040185B E8 E4020000 CALL <JMP.&USER32.GetDlgItemTextA> adquiere el serial
00401869 E8 1E030000 CALL <JMP.&KERNEL32.lstrlenA> toma el nombre y saca el largo
00401871 83F8 03 CMP EAX,3
00401874 7F 2E JG SHORT crackme.004018A4 tiene que ser mayor a 3 caracteres
004018AA E8 DD020000 CALL <JMP.&KERNEL32.lstrlenA> toma el serial y saca el el largo
004018B2 83F8 07 CMP EAX,7
004018B5 7F 2B JG SHORT crackme.004018E2 tiene que ser mayor a 7 caracteres
5) 004018FE E8 C9020000 CALL <JMP.&msvcrt.strtoul> ni idea!
0040190B E8 C7010000 CALL crackme.00401AD7 ni idea!
00401910 895C24 04 MOV DWORD PTR SS:[ESP+4],EBX obvio que ni idea!
pero eax = 5DCAAB1C
6) 004017BE E8 01040000 CALL <JMP.&msvcrt.printf> ni idea!
en el stack...
0022F974 00404188 |format = "%X %X %X
"
0022F978 5DCAAB1C |<%X> = 5DCAAB1C conocido
0022F97C 12503760 |<%X> = 12503760 mi serial
0022F980 1A538001 \<%X> = 1A538001 ni idea!
7) 004017C3 837D EC 00 CMP DWORD PTR SS:[EBP-14],0
se ve: Stack SS:[0022F988]=1A538001 comparado con 0
8) por lo tanto solo hay que comprobar 3 cosas:
a) ¿se obtiene a partir del nombre? tinco = 5DCAAB1C
prueba: pepe = 16809A6A
tincopasan = 9066930C
o sea: ni idea que hace pero queda una cadena hexadecimal de 8 caracteres
b) ¿qué pasa si cambio el serial?
1250376T
stack
0022F978 5DCAAB1C |<%X> = 5DCAAB1C nombre
0022F97C 01250376 |<%X> = 1250376 ¿y la T?
0022F980 0D8C541B \<%X> = D8C541B ajá!!!! resultado
haciendo pruebas llegué a la conclusión que solo toma caracteres hexadecimales y que no hay que superar el
máximo valor porque sino queda FFFFFFFF
0022F974 00404188 |format = "%X %X %X
"
0022F978 5DCAAB1C |<%X> = 5DCAAB1C
0022F97C FFFFFFFF |<%X> = FFFFFFFF
0022F980 0CE358A0 \<%X> = CE358A0
c) ¿qué pasa si pongo como serial 5DCAAB1C?
0022F978 5DCAAB1C |<%X> = 5DCAAB1C
0022F97C 5DCAAB1C |<%X> = 5DCAAB1C
0022F980 5129F3BD \<%X> = 5129F3BD no da 0! :-(
¿y si modifico el serial cambia todo el resultado o solo 1 caracter?
0022F978 5DCAAB1C |<%X> = 5DCAAB1C
0022F97C 5DCAAB1F |<%X> = 5DCAAB1F serial nuevo, ya hay un 0
0022F980 AED60C40 \<%X> = AED60C40
ok 0022F978 5DCAAB1C |<%X> = 5DCAAB1C
0022F97C 5DCAAB5F |<%X> = 5DCAAB5F cambiando de a un caracter voy obteniendo los 0
0022F980 AED60C00 \<%X> = AED60C00
En resumen si pruebo de a un caracter (total son solo 16 por cada uno)
0022F974 00404188 |format = "%X %X %X
"
0022F978 5DCAAB1C |<%X> = 5DCAAB1C
0022F97C 0CA0B75F |<%X> = CA0B75F el serial es = 0CA0B75F
0022F980 00000000 \<%X> = 0 resultado buscado!!!
está bien, resolviste el algoritmo por fuerza bruta... es válido :P, faltaría que alguien haga un keygen (es muy simple viendo lo que encontró tincopasan)
S2