ThUnDeR_07, ¿te vale rapidshare?
http://rapidshare.com/files/296817429/Keygen_for_Thunder_s_Crackme__1_by_PeterPunk.zip.htmlAhora mismo no me apetece mucho escribir un tuto (tengo pendientes varios desde hace meses para crackmes.de, aunque igual ya están resueltos), pero aquí va un mini resumen:
- Desempaqué el .exe con el upx (parámetro -d)
- Ejecuté el crackme con el Olly y tras probarlo, busqué todas las cadenas.
- Había referencias a mi nick en 0x47D1A2 y al mostrarlo en el dump, sorpresa, cadena "REGISTRADO . . ." en 0x47D1C3.
- Marcamos la primera "R" de la cadena en el dump y buscamos las referencias a esta cadena (CTRL+R):
References in Crackme_:.text to 0047D1C3..0047D1C3, item 0
Address=00402FCE
Disassembly=CMP DL,[ECX+47D1C3]
- Estudiamos esa parte del código:
00402F84 |> /8B55 E4 /MOV EDX,[EBP-1C]
00402F87 |. |33C9 |XOR ECX,ECX ; (Initial CPU selection)
00402F89 |. |8A4C15 E8 |MOV CL,[EBP+EDX-18]
00402F8D |. |81C1 79FFFFFF |ADD ECX,-87
00402F93 |. |894D FC |MOV [EBP-4],ECX
00402F96 |. |330D 8CD14700 |XOR ECX,[47D18C]
00402F9C |. |894D FC |MOV [EBP-4],ECX
00402F9F |. |8A45 FC |MOV AL,[EBP-4]
00402FA2 |. |8B55 E4 |MOV EDX,[EBP-1C]
00402FA5 |. |8882 B2D14700 |MOV [EDX+47D1B2],AL
00402FAB |. |FF45 E4 |INC DWORD PTR [EBP-1C]
00402FAE |> |8D4D E8 LEA ECX,[EBP-18]
00402FB1 |. |51 |PUSH ECX
00402FB2 |. |E8 09B50500 |CALL 0045E4C0
00402FB7 |. |59 |POP ECX
00402FB8 |. |3B45 E4 |CMP EAX,[EBP-1C]
00402FBB |.^\77 C7 \JA SHORT 00402F84
00402FBD |. EB 03 JMP SHORT 00402FC2
00402FBF |> FF45 F8 /INC DWORD PTR [EBP-8]
00402FC2 |> 8B45 F8 MOV EAX,[EBP-8]
00402FC5 |. 8A90 B2D14700 |MOV DL,[EAX+47D1B2]
00402FCB |. 8B4D F8 |MOV ECX,[EBP-8]
00402FCE |. 3A91 C3D14700 |CMP DL,[ECX+47D1C3]
00402FD4 |.^ 74 E9 \JE SHORT 00402FBF
- Con una ojeada vemos que compara la cadena con otra que varía según un xor en la línea:
00402F96 |. 330D 8CD14700 |XOR ECX,[47D18C]
- Para que las dos cadenas sean iguales necesitamos un "xor ecx, 7"
- Buscamos las referencias a 0x47D18C:
References in Crackme_:.text to 0047D18C
Address Disassembly Comment
00401AB9 MOV [47D18C],EDX
00401B0F INC DWORD PTR [47D18C] DS:[0047D18C]=00000001
004020A5 INC DWORD PTR [47D18C] DS:[0047D18C]=00000001
0040252A INC DWORD PTR [47D18C] DS:[0047D18C]=00000001
0040281E INC DWORD PTR [47D18C] DS:[0047D18C]=00000001
004029C4 INC DWORD PTR [47D18C] DS:[0047D18C]=00000001
00402CC0 INC DWORD PTR [47D18C] DS:[0047D18C]=00000001
00402ED8 INC DWORD PTR [47D18C] DS:[0047D18C]=00000001
00402F96 XOR ECX,[47D18C] (Initial CPU selection)
- Estudiamos el código próximo a todas las referencias que hagan "INC DWORD PTR [47D18C]" y ahí encontraremos fácilmente las características del serial:
1 - El nombre introducido debe tener entre 5 y 15 caracteres
2 - La longitud del serial es de 21
3 - Los caracteres 3, 11y 19 del serial son guiones
4 - Hay más caracteres fijos: los dos primeros son "TH", los anteriores al segundo guion seon "UN", "D3" los anteriores al tercer guion y el último es una "R": TH-?????UN-?????D3-?R
5 - El penúltimo caracter es la longitud del nombre
6 - Los cinco primeros que faltan son suma_asciis_nombre + 0x1987 xor 0xBADD + 0xDEAD en hexadecimal
7 - Los restantes son suma_asciis_nombre + 0x2009 xor 0xDADD + 0xF00D en hexadecimal