Итак, как я понял алго такой. Пароль читается из окошка. По таблице составляется строка. Эта строка пишется в поле пароля. Дальше опять читается пароль, который прога составила из прошлого, обрабатывает по таблице и получает ещё один новый пароль. И так n-число раз. После видимо в поле должно появиться наше имя, ибо там видно strcmp. Обратно считать алго влом. Нету времени. Может позже сделаю киген.
ЗЫ: если что не так поправь
[ADDED]
хм, значит пасс должен быть кратен четырём. причём после каждой итерации. если хоть после одного преобразования там не кратное четырём число - в поле пишется пустота. основное условие для проверки - чтобы после всех преобразований там был текст. копаю дальше.
ЗЫ: это больше напоминает брутфорс. для крякми достаточно было и штук 3 итераций, а не 10. от этого суть защиты не меняется
[ADDED]
Вобщем это очень сильно напоминает хэширование по таблице. Причём хэшируем результат предыдущего хэширования. Вобщем мне совсем не хочется разбираться с этим гавналго. Есть подозрение что вообще есть только одна комбинация имя-пароль. Если что неправильно понял поправь.
Код:
00451932 |. 8A5411 FF |MOV DL,BYTE PTR DS:[ECX+EDX-1]
00451936 |. E8 5D28FBFF |CALL <dmp_.@System@@LStrFromChar$qqrr17System@AnsiStringc (REF 0>
байт из ключа приводим к строке.
Код:
0045193E |. 50 |PUSH EAX ; |dest
0045193F |. 8D45 F4 |LEA EAX,DWORD PTR SS:[EBP-C] ; |
00451942 |. 8B15 D44D4500 |MOV EDX,DWORD PTR DS:[454DD4] ; |dmp_.004518B8
00451948 |. E8 5B28FBFF |CALL <dmp_._strcpy> ; \_strcpy
копируем таблицу
Код:
00451950 |. 58 |POP EAX ; адрес символа
00451951 |. E8 5E2CFBFF |CALL <dmp_.@System@@LStrPos$qqrv>
; ищем этот символ в таблицеъ
ищем байт имени
Код:
00451956 |. 85C0 |TEST EAX,EAX
00451958 |. 74 46 |JE SHORT dmp_.004519A0
есть такой символ или нет
если нет то пропускаем хэширование как таковое
поскипано, ибо то же что и было выше
Код:
00451988 |. 48 |DEC EAX
00451989 |. 0FB7C0 |MOVZX EAX,AX
0045198C |. 33D2 |XOR EDX,EDX
0045198E |. 8AD3 |MOV DL,BL
00451990 |. B9 04000000 |MOV ECX,4
00451995 |. 2BCA |SUB ECX,EDX
00451997 |. 03C9 |ADD ECX,ECX
00451999 |. 8D0C49 |LEA ECX,DWORD PTR DS:[ECX+ECX*2]
0045199C |. D3E0 |SHL EAX,CL
0045199E |. 03F8 |ADD EDI,EAX
004519A0 |> 43 |INC EBX
004519A1 |. 80FB 05 |CMP BL,5
вот собсно хэшь. в eax положение байта в таблице. в edx счётчик цикла. вычитаем. получаем 3, 2, 1, 0. Умножаем ecx на 2. потом ещё на 2. и складываем. eax сдвинем на это число. число как можно понять зависит только от edx, то есть от счётчика цикла. eax сдвинули.
Код:
004519AA |. 8AC3 |MOV AL,BL
004519AC |. BA 03000000 |MOV EDX,3
004519B1 |. 2BD0 |SUB EDX,EAX
004519B3 |. 8BCA |MOV ECX,EDX
004519B5 |. C1E1 03 |SHL ECX,3
Опять что то с мутится со счётчкиом.
Код:
004519B8 |. 8BD7 |MOV EDX,EDI
004519BA |. D3EA |SHR EDX,CL
004519BC |. 81E2 FF000000 |AND EDX,0FF
вedi был хэш. значит опять чтото делаем и сохраняем младший байт. он и станет новой буквой в новом пароле.
Так как число иетраций 3, значит на каждой четвёрке теряем один байт. Чтобы записалось кратное четырём нужно задать первый пасс длиной кратной шестандцати.
ЗЫ: почти сплю, поэтому вероятны ошибки.
ЗЫЗЫ: хз, можно ли алго обратить, возможно и можно. Но терять время реально влом.