При изучении программы в текстовом режиме были обнаружены следующие текстовые строки:
║; ш0 ║` ╕ ═!║N f╕NETSf ╢ b f┴└ 2р ┴тЎf=ш"'╓t ║W ш ├┤ ═!├Type yer attempt: $
Right!$ Wrong!$
Примерный адрес начала области данных: 0000003E.
Адреса начала и окончания обнаруженных текстовых строк:
0000003E-0000005F.
Адрес окончания работы программы: 00000061.
Приблизительный размер области кода программы: 41.
Приблизительный размер области данных: 25.
Процедура по адресу 00000036 выполняет:
Заносит значение 009 в старший регистр AX - ah.
Команды, относящиеся к этой процедуре:
mov ah, 009
int 21
retn
Группа команд по адресам 00000006-0000000D:
mov dx,00160 ;" `"
mov ax,00A00 ;" "
int 021
выполняет:
ввод символа с клавиатуры,
Данные, вводимые пользователем, заносится по адресу: dx.
Длина вводимых данных равна: 1, потому что:
используется 21-ое прерывание
Группа команд, выводящая сообщение о ложном пароле:
and al,00A ;" "
or ax,07257 ;"rW"
outsw
outsb
Группа команд, выводящая сообщение о правильном пароле:
and al,00A ;" "
or ax,06952 ;"iR"
push 02174 ;"!t"
Группа команд, относящихся к процедуре проверке пароля:
cmp eax,0D62722E8
Назначение регистра ECX в процедуре проверки пароля:
хранит введенное значение пароля.
Цикл процедуры проверки пароля выполнятся 6 раз.
Начальное значение регистра EAX: 05354454E.
Для того чтобы пароль оказался верным, регистр EAX должен принять значение, равное: 0D62722E8.
Назначение пароля в алгоритме проверки:
складывается побайтно со значением введенного символа.
Алгоритм атаки на пароль
по адресу 0000002D: 7403 замена je на jne.