Bueno, empecemos.
NO, no es un crack de msdos, yo por lo menos le veo la cabecera PE al archivo, cosa que nos indica que es un ejecutable de 32 bits, los ejecutables de msdos son de 16, otra cosa es que sea de consola, cosa que no discuto, pero si no sabes, pregunta, o no hables.
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
00000000 4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00 MZ.........ÿÿ..
00000010 B8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 ¸.......@.......
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000030 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 ............€...
00000040 0E 1F BA 0E 00 B4 09 CD 21 B8 01 4C CD 21 54 68 ..º..´.Í!¸.LÍ!Th
00000050 69 73 20 70 72 6F 67 72 61 6D 20 63 61 6E 6E 6F is program canno
00000060 74 20 62 65 20 72 75 6E 20 69 6E 20 44 4F 53 20 t be run in DOS
00000070 6D 6F 64 65 2E 0D 0D 0A 24 00 00 00 00 00 00 00 mode....$.......
00000080 50 45 00 00 4C 01 05 00 1B 42 E5 3F 00 30 00 00 PE..L....Bå?.0..
00000090 4B 02 00 00 E0 00 07 02 0B 01 02 38 00 22 00 00 K...à......8."..
y lo de que tiene su punto.... en fin, sin comentarios aqui pego algunas partes del olly comentadas y tal
son 3 bucles iguales, lo unico que una "analiza" el serial, otro el pass y otro una cadena constante "wowowowowowowotras"
004015F4 |> 83EC 0C /SUB ESP,0C
004015F7 |. 8D45 D8 |LEA EAX,DWORD PTR SS:[EBP-28]
004015FA |. 50 |PUSH EAX ; /s
004015FB |. E8 A0180000 |CALL <JMP.&msvcrt.strlen> ; \strlen
00401600 |. 83C4 10 |ADD ESP,10
00401603 |. 3985 64FFFFFF |CMP DWORD PTR SS:[EBP-9C],EAX ; compara el valor en EBP-9c con EAX y cuando sea 0x0C saltara
00401609 |. 72 02 |JB SHORT crackme.0040160D
0040160B |. EB 21 |JMP SHORT crackme.0040162E
0040160D |> 8D45 F8 |LEA EAX,DWORD PTR SS:[EBP-8] ; var1 (contador ?)
00401610 |. 0385 64FFFFFF |ADD EAX,DWORD PTR SS:[EBP-9C]
00401616 |. 83E8 20 |SUB EAX,20 ; resta para posicionar el puntero a la cadena + contador
00401619 |. 0FBE10 |MOVSX EDX,BYTE PTR DS:[EAX] ; mete en edx un caracter del serial
0040161C |. 8D85 5CFFFFFF |LEA EAX,DWORD PTR SS:[EBP-A4] ; var2 (donde se guarda el resultado)
00401622 |. 0110 |ADD DWORD PTR DS:[EAX],EDX ; suma el caracter con los anteriores
00401624 |. 8D85 64FFFFFF |LEA EAX,DWORD PTR SS:[EBP-9C]
0040162A |. FF00 |INC DWORD PTR DS:[EAX]
0040162C |.^EB C6 \JMP SHORT crackme.004015F4
y al final lo que hace es unas comparaciones entre las sumas de los resultados
0040168B |. 89C2 MOV EDX,EAX ; mete la longitud de wowo... 18h (0x12h)
0040168D |. 0395 58FFFFFF ADD EDX,DWORD PTR SS:[EBP-A8] ; le suma el resultado de la suma de caracteres de wowo...
00401693 |. 8B85 5CFFFFFF MOV EAX,DWORD PTR SS:[EBP-A4] ; mete la suma de caracteres del serial
00401699 |. 0385 60FFFFFF ADD EAX,DWORD PTR SS:[EBP-A0] ; le suma la suma de caracteres del username
0040169F |. 39C2 CMP EDX,EAX ; mira si (longitud wo+suma wowo) = (suma serial + suma user )
004016A1 |. 74 31 JE SHORT crackme.004016D4 ; Salta si son iguales las sumas
Un serial comodo seria:
User: wotrss
Serial: wowowowowowo
pq si EDX siempre valdra 0x816 (0x12 + 0x804) que son los 18 caracteres de la cadena constante y 0x804 es la suma de los caracteres de esta cadena, y EAX es la suma de caracteres de una cadena que podriamos decir que esta compuesta por la union de la del user y la del serial, pues cojemos 12 caracteres de la cadena constante (mas no pq esta limitado y se chequea) y el resto lo metemos como user + 0x12 por eso cambiamos la a por una s ( "a"=0x61 + 0x12 = 0x73 "s" )