кароч процедура проверки пароля:
Код:
seg000:0121 mov si, 0
seg000:0124 mov cx, 9
seg000:0127 loc_127:
seg000:0127 mov bl, [si+100h]
seg000:012B add [si+117h], bl
seg000:012F mov bh, [si+17Dh]
seg000:0133 xor [si+163h], bh
seg000:0137 add byte ptr [si+163h], 99h
seg000:013C inc si
seg000:013D loop loc_127
...
seg000:0140 lea si, byte_117
seg000:0144 lea di, 163h
...
seg000:014B repe cmpsb ; сравнить строки, равны - ОК
...
Тык. Если представить память по этим адресам массивами [1..9] of byte - получится вроде
hash - серия байт по смещению 117h, (шифрованный пароль)
keyA - серия байт по смещению 100h (просто кусок кода)
keyB - слово "password:" по смещению 163h
buff - введёный пароль
Алгоритм:
hash[i] := hash[i] + keyA[i];
keyB[i] := keyB[i] xor buff[i];
keyB[i] := keyB[i] + 99;
if hash = keyB then OK
KeyB[i] = (hash[i]-99h) xor Buff[i]
готово
ЗЫ оказывается не так уж и сложно)