Aqui les dejo un nuevo Crackme.
Dificultad: [3/10] ?
Objetivo: Encontrar el serial. Es un serial fijo ;).
[CRACKME] Ilustrados.exe (27 KB) (https://mega.co.nz/#!PIE3zQyS!HYpFJDHgVQ0SbCc9OD7sR0euJ4BE1spbRtR7qTDS2GM)
Hall of FameSa1uDoS
hola mr.blood si no es muncha molestia puedes subirlo a otro servidor es que yo navego con mi celular con opera mini y el opera no visualisa bien ese servidor o mandamelo por correo.
flamer.mateus@gmail.com
saludos flamer y perdona la molestia
A que servidor te vendria bien?
Sa1uDoS
El que me fasilita mas es ultrashare por que mediafire abeses me falla, pero en ultrashare tendrias que registrarte para que dure el enlace, es fasil y rapido el registro
ultrashare.net
saludos flamer y perdon por molestar
No hace falta que dure para siempre, con que lo bajes "rapido" sirve.
http://ultrashare.net/hosting/fl/60bb492105/_CRACKME__Ilustrados
Sa1uDoS
listo ahora mismo lo veo y te cuento como me fue
saludos
Si hago un tiempito este finde le pego una miradita a ver que tal...
Saludos!
00402000 55 push ebp
00402001 89e5 mov ebp,esp
00402003 31c0 xor eax,eax
00402005 31ff xor edi,edi
00402007 b914000000 mov ecx,14h
0040200c 8b7508 mov esi,dword ptr [ebp+8]
0040200f ac lods byte ptr [esi]
00402010 f6e1 mul al,cl
00402012 c0c002 rol al,2
00402015 6601c7 add di,ax
00402018 c1cf03 ror edi,3
0040201b 84c0 test al,al
0040201d e0f0 loopne image00400000+0x200f (0040200f)
0040201f 31c0 xor eax,eax
00402021 81ff0ecbd197 cmp edi,97D1CB0Eh
00402027 7405 je image00400000+0x202e (0040202e)
00402029 b801000000 mov eax,1
0040202e c9 leave
0040202f c3 ret
Cita de: x64Core en 18 Abril 2013, 22:19 PM
00402000 55 push ebp
00402001 89e5 mov ebp,esp
00402003 31c0 xor eax,eax
00402005 31ff xor edi,edi
00402007 b914000000 mov ecx,14h
0040200c 8b7508 mov esi,dword ptr [ebp+8]
0040200f ac lods byte ptr [esi]
00402010 f6e1 mul al,cl
00402012 c0c002 rol al,2
00402015 6601c7 add di,ax
00402018 c1cf03 ror edi,3
0040201b 84c0 test al,al
0040201d e0f0 loopne image00400000+0x200f (0040200f)
0040201f 31c0 xor eax,eax
00402021 81ff0ecbd197 cmp edi,97D1CB0Eh
00402027 7405 je image00400000+0x202e (0040202e)
00402029 b801000000 mov eax,1
0040202e c9 leave
0040202f c3 ret
Que quieres decirme con eso? Si tienes la Pass pasamela por MP ;).
Sa1uDoS
la veo muy dura no e podido sacar la password.
si la saca alguien no publiquen la clave.
mr.blood has una lista de ganadores
saludos flamer y dame mas tiempo
Bueno, hice un poco de tiempo y miré el reto.
Como ha puesto x64Core todo el queso está en 402000.
Basicamente se calcula un hash del string ingresado.
Si miramos la parte donde lee la pass vemos:
00401366 C70424 38404000 MOV DWORD PTR SS:[ESP],CRACKME_.00404038 ; ASCII "%7s"
0040136D E8 76080000 CALL <JMP.&msvcrt.scanf>
Con lo cual aceptará un string de hasta 7 chars, que no contenga espacios.
Ahora, la cosa es que hacer un bruteforce con todos los chars posibles tomaría mucho tiempo, PERO hay algo que tenemos a nuestro favor: las colisiones de los hashs (ver http://es.wikipedia.org/wiki/Colisión_(hash) (http://es.wikipedia.org/wiki/Colisi%C3%B3n_(hash)))
Gracias a ésto y usando un poco de lógica, sacamos una pass correcta con un mini-smart-bruteforcer... :P
Una pass válida es: a pedido de Flamer no la posteo pero la paso por MP a mr.blood
Cuando termine el reto pongo mi pseudo-análisis y el bruteforcer en asm.
Saludos!
Uufff ya la tengo password optenida por fuerza bruta y enviada por privado
saludos flamer y digan cuando finalisa el reto para revelar la pass
Editado el post principal con los que lo pasaron.
Doy hasta mañana de plazo, luego pueden publicar tutos, bruteforces y passwords. Gracias por esperar ;). Tambien publicare el codigo, aunque lo unico interesante es basicamente la rutina del hash (y esta escrita en FASM xD).
Sa1uDoS
Bueno, no voy a explicar porque la verdad no tengo el tiempo, pero dejo mis "ideas":
ROR 3 (bits)
7) 0001 1111 1111 1111 2220000000000000
6) 1111 1111 1111 1111 0000000000000000
5) 1111 1111 1111 1110 0000000000000001
4) 1111 1111 1111 0000 0000000000001111
3) 1111 1111 1000 0000 0000000001111111
2) 1111 1100 0000 0000 0000001111111111
1) 1110 0000 0000 0000 0001111111111111
0) 0000 0000 0000 0000 1111111111111111
usando 0FFFFh en DI
inicio : 0000FFFF
vuelta 1: E0001FFF
vuelta 2: FC0003FF
vuelta 3: FF80007F
vuelta 4: FFF0000F
Real
final: 97D1CB0E 1001 0111 1101 0001 1100101100001110
ROR EDI, 3 BE8E5874 1011 1110 1000 1110 0101100001110100
ADD DI,00 ==> 5874 = XXXX + YYZZ = XXXX + YY(ZZ) = XXXX + (char * 0Dh)
==> = 5874 + 0000 = 5874 + 00(00) = 5874 + (0h * 0Dh)
vuelta char 7: BE8E5874 1011 1110 1000 1110 0101100001110100
ROR EDI, 3 F472C3A5 1111 0100 0111 0010 1100001110100101
ADD DI,AX ==> C3A5 = XXXX + YYZZ = XXXX + YY(ZZ) = XXXX + (char * 0Eh)
==> = C??? + 0??? = C??? + 0?(??) = C??? + (??h * 0Eh)
vuelta char 6: F472C??? 1011 1110 1000 1110 1100????????????
ROR EDI, 3 F476???? 1111 0100 0111 0110 0????????????101
ADD DI,AX ==> ???? = XXXX + YYZZ = XXXX + YY(ZZ) = XXXX + (char * 0Fh)
==> = ???? + 0??? = ???? + 0?(??) = ???? + (??h * 0Fh)
vuelta char 5: F476???? 1111 0100 0111 0110 0???????????????
ROR EDI, 3 A3B0???? 1010 0011 1011 0000 ????????????????
ADD DI,AX ==> ???? = XXXX + YYZZ = XXXX + YY(ZZ) = XXXX + (char * 10h)
==> = ???? + 0??? = ???? + 0?(??) = ???? + (??h * 10h)
vuelta char 4: A3B0???? 1010 0011 1011 0000 ????????????????
ROR EDI, 3 1D80???? 0001 1101 1000 0000 ????????????????
ADD DI,AX ==> ???? = XXXX + YYZZ = XXXX + YY(ZZ) = XXXX + (char * 11h)
==> = ???? + ???? = ???? + ??(??) = ???? + (??h * 11h)
vuelta char 3: 1D80???? 0001 1101 1000 0000 ????????????????
ROR EDI, 3 EC00???? 1110 1100 0000 0000 ?????????????000
ADD DI,AX ==> ???N = XXXX + YYZZ = XXXX + YY(ZZ) = XXXX + (char * 12h) N = 0 o 8
==> = ???? + ???? = ???? + ??(??) = ???? + (??h * 12h)
vuelta char 2: EC00???? 1110 1100 0000 0000 ????????????????
ROR EDI, 3 6000???? 0110 0000 0000 0000 ?????????????111
ADD DI,AX ==> ???N = XXXX + YYZZ = XXXX + YY(ZZ) = XXXX + (char * 13h) N = 7 o F
==> = ???? + ???? = ???? + ??(??) = ???? + (??h * 13h)
vuelta char 1: 6000???? 0110 0000 0000 0000 ????????????????
ROR EDI, 3 0000???3 0000 0000 0000 0000 ????????????0011
ADD DI,AX ==> ???N = XXXX + YYZZ = XXXX + YY(ZZ) = XXXX + (char * 14h) N = 3
==> = 0000 + ???N = 0000 + ??(??) = 0000 + (??h * 14h) min 0294 / max 13D8
Maximos
final: AFA97B3E 1010 1111 1010 1001 0111101100111110
ROR EDI, 3 7D4BD9F5 0111 1101 0100 1011 1101100111110101
ADD DI,00 ==> D9F5 = XXXX + YYZZ = XXXX + YY(ZZ) = XXXX + (char * 0Dh)
==> = D9F5 + 0000 = D9F5 + 00(00) = D9F5 + (0h * 0Dh)
vuelta char 7: 7D4BD9F5 0111 1101 0100 1011 1101100111110101
ROR EDI, 3 EA5ECFAB 1110 1010 0101 1110 1100111110101011
ADD DI,AX ==> CFAB = XXXX + YYZZ = XXXX + YY(ZZ) = XXXX + (char * 0Eh)
==> = C218 + 0D93 = C218 + 0D(E4) = C218 + (FEh * 0Eh)
vuelta char 6: EA5EC218 1110 1010 0101 1110 1100001000011000
ROR EDI, 3 52F610C7 0101 0010 1111 0110 0001000011000111
ADD DI,AX ==> 10C7 = XXXX + YYZZ = XXXX + YY(ZZ) = XXXX + (char * 0Fh)
==> = 023C + 0E8B = 023C + 0E(E2) = 023C + (FEh * 0Fh)
vuelta char 5: 52F6023C 0101 0010 1111 0110 0000001000111100
ROR EDI, 3 97B011E2 1001 0111 1011 0000 0001000111100010
ADD DI,AX ==> 11E2 = XXXX + YYZZ = XXXX + YY(ZZ) = XXXX + (char * 10h)
==> = 025F + 0F83 = 025F + 0F(E0) = 025F + (FEh * 10h)
vuelta char 4: 97B0025F 1001 0111 1011 0000 0000001001011111
ROR EDI, 3 BD8012FC 1011 1101 1000 0000 0001001011111100
ADD DI,AX ==> 12FC = XXXX + YYZZ = XXXX + YY(ZZ) = XXXX + (char * 11h)
==> = 0281 + 107B = 0281 + 10(DE) = 0281 + (FEh * 11h)
vuelta char 3: BD800281 1011 1101 1000 0000 0000001010000001
ROR EDI, 3 EC00140D 1110 1100 0000 0000 0001010000001101
ADD DI,AX ==> 140D = XXXX + YYZZ = XXXX + YY(ZZ) = XXXX + (char * 12h)
==> = 029A + 1173 = 029A + 11(DC) = 029A + (FEh * 12h)
vuelta char 2: EC00029A 1110 1100 0000 0000 0000001010011010
ROR EDI, 3 600014D7 0110 0000 0000 0000 0001010011010111
ADD DI,AX ==> 14D7 = XXXX + YYZZ = XXXX + YY(ZZ) = XXXX + (char * 13h)
==> = 026C + 126B = 026C + 12(DA) = 026C + (FEh * 13h)
vuelta char 1: 6000026C 0110 0000 0000 0000 0000001001101100
ROR EDI, 3 00001363 0000 0000 0000 0000 0001001101100011
ADD DI,AX ==> 1363 = XXXX + YYZZ = XXXX + YY(ZZ) = XXXX + (char * 14h)
==> = 0000 + 1363 = 0000 + 13(D8) = 0000 + (FEh * 14h)
inicio: 00000000
El analisis final dió un semi-smart-bruteforcer (MASM)
.386
.MODEL flat,stdcall
OPTION CASEMAP:NONE
Include windows.inc
Include user32.inc
Include kernel32.inc
Include masm32.inc
IncludeLib user32.lib
IncludeLib kernel32.lib
Includelib masm32.lib
.DATA
lacad db "!!!!!!!",0
chars0 db 024h, 025h, 026h, 030h, 031h, 032h, 033h, 03Dh, 03Eh, 03Fh, 04Ah, 04Bh, 04Ch, 057h, 058h, 059h
db 064h, 065h, 066h, 070h, 071h, 072h, 073h, 07Dh, 07Eh, 07Fh, 0A4h, 0A5h, 0A6h, 0B0h, 0B1h, 0B2h
db 0B3h, 0BDh, 0BEh, 0BFh, 0CAh, 0CBh, 0CCh, 0D7h, 0D8h, 0D9h, 0E4h, 0E5h, 0E6h, 0F0h, 0F1h, 0F2h
db 0F3h, 0FDh, 0FEh
sep1 dd 0h
chars1 db 027h, 033h, 035h, 041h, 043h, 04Fh, 05Bh, 05Dh, 069h, 06Bh, 077h, 079h, 0A1h, 0ADh, 0AFh, 0BBh
db 0C7h, 0C9h, 0D5h, 0D7h, 0E3h, 0E5h, 0F1h, 0FDh, 021h, 02Dh, 02Fh, 03Bh, 047h, 049h, 055h, 057h
db 063h, 065h, 071h, 07Dh, 07Fh, 0A7h, 0B3h, 0B5h, 0C1h, 0C3h, 0CFh, 0DBh, 0DDh, 0E9h, 0EBh, 0F7h
db 0F9h, 026h, 028h, 034h, 040h, 042h, 04Eh, 050h, 05Ch, 05Eh, 06Ah, 076h, 078h, 0ACh, 0AEh, 0BAh
db 0BCh, 0C8h, 0CAh, 0D6h, 0E2h, 0E4h, 0F0h, 0F2h, 0FEh, 02Ch, 02Eh, 03Ah, 03Ch, 048h, 04Ah, 056h
db 062h, 064h, 070h, 072h, 07Eh, 0A6h, 0A8h, 0B4h, 0C0h, 0C2h, 0CEh, 0D0h, 0DCh, 0DEh, 0EAh, 0F6h
db 0F8h
sep2 dd 0h
fname db "sol.txt",0
.code
DllEntry proc hInstance:HINSTANCE, reason:DWORD, reserved1:DWORD
mov eax,TRUE
ret
DllEntry Endp
calcula proc uses ecx edi esi ptrcadena : DWORD
;
XOR EAX,EAX
XOR EDI,EDI
MOV ECX,14h
MOV ESI,ptrcadena
bucle:
LODS BYTE PTR DS:[ESI]
MUL CL
ROL AL,2
ADD DI,AX
ROR EDI,3
TEST AL,AL
LOOPNE bucle
MOV EAX,EDI
ret
calcula endp
;cmp eax, 097D1CB0Eh
brute proc uses ecx edx
;
local c1:DWORD
local c2:DWORD
local c0:DWORD
; init
mov c0, 0
mov c1, 0
mov c2, 0
mov eax, offset lacad
mov ecx, offset chars0
mov cl, byte ptr[ecx]
mov byte ptr [eax], cl
mov ecx, offset chars1
mov cl, byte ptr[ecx]
mov byte ptr [eax+1], cl
mov ecx, offset chars2
mov cl, byte ptr[ecx]
mov byte ptr [eax+2], cl
bucle:
invoke calcula, offset lacad
cmp eax, 097D1CB0Eh
je salida
mov eax, offset lacad
inc byte ptr [eax+6]
cmp byte ptr [eax+6],040h;07Eh
jbe bucle
mov byte ptr [eax+6],021h
inc byte ptr [eax+5]
cmp byte ptr [eax+5],040h;07Eh
jbe bucle
mov byte ptr [eax+5],021h
inc byte ptr [eax+4]
cmp byte ptr [eax+4],040h;07Eh
jbe bucle
mov byte ptr [eax+4],021h
inc byte ptr [eax+3]
cmp byte ptr [eax+3],040h;07Eh
jbe bucle
mov byte ptr [eax+3],021h
inc byte ptr [eax+2]
cmp byte ptr [eax+2],040h;07Eh
jbe bucle
mov byte ptr [eax+2],021h
inc c1
mov ecx, offset chars1
cmp c1,060h
jg s2
add ecx, c1
mov dl, byte ptr [ecx]
mov byte ptr [eax+1],dl
jmp bucle
s2:
mov c1, 0
mov dl, byte ptr [ecx]
mov byte ptr [eax+1],dl
inc c0
mov ecx, offset chars0
cmp c0,032h
jg s3
add ecx, c0
mov dl, byte ptr [ecx]
mov byte ptr [eax],dl
jmp bucle
s3:
mov byte ptr [eax],0FFh
mov byte ptr [eax+1],0FFh
mov byte ptr [eax+2],0FFh
mov byte ptr [eax+3],0FFh
mov byte ptr [eax+4],0FFh
mov byte ptr [eax+5],0FFh
mov byte ptr [eax+6],0FFh
salida:
invoke write_disk_file, offset fname, offset lacad, 7h
Ret
brute endp
Y una pass que hace colisión de hash es: $.!.-*8
Saludos!
La pass original es JUSTICE.
Mañana miro ese codigo ;).
Sa1uDoS
bueno yo hice un programa por fuerza bruta que compara letra por letra y la primer pass que en contre fue esta dure 20 minutos en encontrarla.
"dpk2ma6"
de seguro debe aver mas pero no segui corriendo mas el programa.
http://ultrashare.net/hosting/fl/b1dc1ab753
(http://ultrashare.net/hosting/fl/b1dc1ab753)
Saludos flamer y si falta algo me avisan
Buen trabajo a los 2. Hice el hash pequeño para que cualquier PC pudiera romperlo (pues yo tengo un PC viejo).
MckSys me gustaria ver un tuto, a ver si puedes hacer algo cuando tengas un rato ;).
Flamer buen trabajo.
Por si les interesa, aunque creo que se ve todo bien (nunca complico demasiado el codigo de los crackme) dejo el codigo.
Compilan primero con fasm crackme.asm y luego con gcc crackme.c crackme.obj
format coff
public function as '_function'
function:
push ebp
mov ebp, esp
xor eax, eax
xor edi, edi
mov ecx, 20
mov esi, [ebp+8]
do_hash:
lodsb ; ESI = addr clave
mul cl
rol al, 2
add di, ax
ror edi, 3
test al, al
loopne do_hash
xor eax, eax
cmp edi, 0x97D1CB0E
je bien
mov eax, 1
bien:
leave
ret
#include <stdio.h>
int function(char *cadena);
int main()
{
char cadena[8]="", retorno;
puts("Introduce la pass: ");
scanf("%7s", cadena);
retorno=function(cadena);
switch(retorno)
{
case 0:
puts("Bien!");
break;
case 1:
puts("Mal!");
break;
};
return 0;
}
Sa1uDoS
No hubieses puesto el pass original! Lo habia resuelto sin bruteforce y ahora no tiene gracia! Felicitaciones flamer y mcksys
Aun asi me encantaria saber como lo hiciste ;). (Creo que a todos)
Sa1uDoS