Introducción
Aquí tenemos un CrackMe diferente a lo que estamos acostumbrados, ya que en vez del típico número de serie asociado a un nombre la comprobación se realiza mediante checkboxes con una matriz de 7×3. El CrackMe está realizado en Visual C++ lo que facilita en parte encontrar rápidamente la rutina de comprobación.
Comprobación
004013C5 > /8B7424 10 MOV ESI,[DWORD SS:ESP+10] ; 004013C9 . |33FF XOR EDI,EDI 004013CB > |8B86 74304000 MOV EAX,[DWORD DS:ESI+403074] ; 004013D1 . |8BCB MOV ECX,EBX 004013D3 . |50 PUSH EAX 004013D4 . |E8 6F020000 CALL <JMP.&MFC42.#3092_CWnd::GetDlgItem> ; Lee el estado del checkbox 004013D9 . |8B48 20 MOV ECX,[DWORD DS:EAX+20] 004013DC . |6A 00 PUSH 0 004013DE . |6A 00 PUSH 0 004013E0 . |68 F0000000 PUSH 0F0 004013E5 . |51 PUSH ECX ; 004013E6 . |FFD5 CALL NEAR EBP 004013E8 . |3B86 20304000 CMP EAX,[DWORD DS:ESI+403020] ; Comprueba el estado del checkbox (1 activado 0 desactivado) 004013EE . |75 20 JNZ SHORT Matrix_C.00401410 ; Salto a chico malo 004013F0 . |47 INC EDI ; Incrementa contador 004013F1 . |83C6 04 ADD ESI,4 004013F4 . |83FF 07 CMP EDI,7 ; ¿Hemos terminado de leer las columnas? ¿contador = 7? 004013F7 .^|7C D2 JL SHORT Matrix_C.004013CB ; si terminan las columnas deja pasar 004013F9 . |8B4424 10 MOV EAX,[DWORD SS:ESP+10] 004013FD . |83C0 1C ADD EAX,1C ; contador de filas 00401400 . |83F8 54 CMP EAX,54 ; 3 filas = 1C+1C+1C=54 00401403 . |894424 10 MOV [DWORD SS:ESP+10],EAX 00401407 .^\7C BC JL SHORT Matrix_C.004013C5 ; ¿Hemos terminado de leer la fila? ¿contador = 54? 00401409 . 68 D8304000 PUSH Matrix_C.004030D8 ; ASCII "Registration successful!" 0040140E . EB 05 JMP SHORT Matrix_C.00401415 00401410 > 68 C8304000 PUSH Matrix_C.004030C8 ; ASCII "Not registered!"
En la rutina de comprobación se ve fácil un CMP EDI,7 por lo que podemos deducir que si el creador no se ha molestado mucho la comprobación se realiza de izquierda a derecha y de arriba hacia abajo.
Tal es así que si ponemos un breakpoint en 4013E8, podemos ir sacando el estado correcto de los checkboxes sin mucha molestia.