ok, como tip entonces,
el largo maximo que veo es de 8, de preferencia digitos,
el mensaje cuando se resuelve es
---------------------------
Good.
---------------------------
Well done!
---------------------------
Aceptar
---------------------------
esto es cuando compara los 2 parametros de esi y edi
el algoritmo a entender esta aqui
004016C0 |> 8B5424 14 /MOV EDX,DWORD PTR SS:[ESP+14]
004016C4 |. B9 1F000000 |MOV ECX,1F
004016C9 |. 2BCB |SUB ECX,EBX
004016CB |. D3EA |SHR EDX,CL
004016CD |. F6C2 01 |TEST DL,1
004016D0 |. 74 0E |JE SHORT The_back.004016E0
004016D2 |. 8B45 00 |MOV EAX,DWORD PTR SS:[EBP]
004016D5 |. 56 |PUSH ESI
004016D6 |. 50 |PUSH EAX
004016D7 |. 56 |PUSH ESI
004016D8 |. E8 03480000 |CALL The_back.00405EE0
004016DD |. 83C4 0C |ADD ESP,0C
004016E0 |> 43 |INC EBX
004016E1 |. 83C5 04 |ADD EBP,4
004016E4 |. 836C24 10 01 |SUB DWORD PTR SS:[ESP+10],1
004016E9 |.^75 D5 \JNZ SHORT The_back.004016C0
quien resuelve como funciona eso, y como compara los valores anteriores, creo que puede resolver.. igual no entiendo del todo , pero creo que si fuera por parchar se resuelve rapido..espero se animen
y el de crackmes:
http://crackmes.de/users/freesoul/backpack/pseudocodigo que hay que analizar
/* Procedure: 0x00401290 - 0x00401750
* Argument size: 4
* Local size: 156
* Save regs size: 0
* Called by:
* L0040111F()
*/
L00403120();
(save)"2DF12B91CE8EEA";
(save)eax;
L00405760();
(save)0;
L00403120();
(save)eax;
(save)0;
L00402FA0();
esp = esp + 0x18;
ebx = 0;
ebp = & Vc;
V0 = 0x20;
do {
ecx = 0x1f;
ecx = 0x1f;
edx = V4 >> 0x1f;
if(!(dl & 1)) {
L00405EE0(esi, *ebp, esi);
}
ebx = 1;
ebp = ebp + 4;
} while(V0 = V0 - 1);
eax = L00403CE0(edi, esi);
if(eax == 0) {
MessageBoxA(GetParent(V8), "Well done!", "Good.", eax);
}
L00406120();
L00406120(edi, esi);
L0041C9EA( & Vc, 4, 0x20, 0x401080);
(restore)edi;
(restore)ebp;
L0040173a:
(restore)esi;
(restore)ebx;
}
}
ecx = V98 ^ esp;
return L0041C965();
}