Отчет по лабораторной работе № 4
Название работы
Применение редактора кода Hiew совместно с отладчиком Turbo Debugger.
Цель
Познакомиться на практике с методами реализации обратного проектирования программ. Изучить возможности совместного применения отладчиков и редакторов кода. Исследовать предложенные программы при помощи редактора кода Hiew совместно с отладчиком Turbo Debugger.
Выполнил
Студент гр. № 4405
ФИО Мартьянов А.О.
Отчет
Исследование программы Act-1.com
Программа ACT-1.COM выполняет следующие действия:
Программа просит ввести регистрационный код
Дизассемблированный код программы:
00000000: B409 mov ah,009 ;"○"
00000002: BA6C01 mov dx,0016C ;"☺l"
00000005: CD21 int 021
00000007: B40A mov ah,00A ;"◙"
00000009: BADC01 mov dx,001DC ;"☺▄"
0000000C: CD21 int 021
0000000E: 33C0 xor ax,ax
00000010: B91000 mov cx,00010 ;" ►"
00000013: BEDD01 mov si,001DD ;"☺▌"
00000016: BFEE01 mov di,001EE ;"☺ю"
00000019: BA1000 mov dx,00010 ;" ►"
0000001C: 8BDA mov bx,dx
0000001E: 83E30F and bx,00F ;"☼"
00000021: 0301 add ax,[bx][di]
00000023: 3100 xor [bx][si],ax
00000025: 0300 add ax,[bx][si]
00000027: 13D1 adc dx,cx
00000029: 314101 xor [bx][di][01],ax
0000002C: 33D0 xor dx,ax
0000002E: 2BC2 sub ax,dx
00000030: 1BC1 sbb ax,cx
00000032: F7D0 not ax
00000034: 3106EE01 xor [01EE],ax
00000038: 4A dec dx
00000039: 75E1 jne 00000001C ---↑ (1)
0000003B: E2DC loop 000000019 ---↑ (2)
0000003D: B91000 mov cx,00010 ;" ►"
00000040: BECC01 mov si,001CC ;"☺╠"
00000043: BFDE01 mov di,001DE ;"☺▐"
00000046: F3A6 repe cmpsb
00000048: E305 jcxz 00000004F ---↓ (3)
0000004A: BAA401 mov dx,001A4 ;"☺д"
0000004D: EB18 jmps 000000067 ---↓ (4)
0000004F: B91400 mov cx,00014 ;" ¶"
00000052: BEEE01 mov si,001EE ;"☺ю"
00000055: BFB801 mov di,001B8 ;"☺╕"
00000058: 8BD9 mov bx,cx
0000005A: 83E30F and bx,00F ;"☼"
0000005D: 8A00 mov al,[bx][si]
0000005F: 3005 xor [di],al
00000061: 47 inc di
00000062: E2F4 loop 000000058 ---↑ (5)
00000064: BAB801 mov dx,001B8 ;"☺╕"
00000067: B409 mov ah,009 ;"○"
00000069: CD21 int 021
0000006B: C3 retn
При изучении программы в текстовом режиме были обнаружены следующие текстовые строки:
ACT-1 by Dr. Animade 19-Feb-1998
Enter code:
Password failed!
ACT-1 CHALLENGE!
Примерный адрес начала области данных: 00000060
Адреса начала и окончания обнаруженных текстовых строк:
0000006C – 00000092
00000096 – 000000A0
000000A7 – 000000B6
000000EE – 000000FD
Адрес окончания работы программы: 0000006B
Приблизительный размер области кода программы: 00000000 – 000006B
Приблизительный размер области данных: 0000006C – 000000FF
Группа команд по адресам 00000000-00000006 выполняет:
Mov ah, 09 – кидает в старшую половинку регистра ax значение 09
Mov dx, 0016C – кладет в регистр dx значеие 0016C
Int 21h – вызывает прерывание
Сообщение, выводимое командами по адресам 00000000-00000006:
Enter code:
Группа команд по адресам 00000007-0000000D выполняет:
Mov ah, 00A – кидает в старшую половинку регистра ax значение 00A
Mov dx, 001DC – кладет в регистр dx значеие 001DC
Int 021h (0A) - буферизированный ввод с клавиатуры (адрес буфера Ds:DX)
Длина запрашиваемого пароля: 16 символов, потому что:
По адресу DS:DX в программе находится значение 000000DC: 1100 (Ранее вводилось значение 01DC в регистр dx). В 16-ричной с.с 11 = 17, т.е. длинна пароля 16 символов, 17-й на перевод строки
Группа команд и их адреса, выводящие сообщение о неправильном вводе пароля:
0000004A: BAA401 mov dx,001A4 ; - сравнение
00000067: B409 mov ah,009 ;
00000069: CD21 int 021
Где-то тут вначале происходит сравнивание вводимого пароля, если не правильно, то переходим на адрес 00000067, и командой по адресу 00000069 выводится сообщение о неправильном введенном пароле.
Реакция программы на изменение команды JMPS двумя командами NOP:
Не выводится сообщение о том, что пароль неверен, так как нет перехода на процедуры выводящие сообщение о некорректном вводе пароля. Выводит не расшифрованные данные.
Это может быть объяснено тем, что:
Не происходит перехода по адресу в команде jmps, так как мы заменили его пустышками.
Группа команд генерации пароля и их назначение:
0000000E: 33C0 xor ax,ax
00000010: B91000 mov cx,00010 ;" "
00000013: BEDD01 mov si,001DD ;" ▌"
00000016: BFEE01 mov di,001EE ;" ε"
00000019: BA1000 mov dx,00010 ;" "
0000001C: 8BDA mov bx,dx
0000001E: 83E30F and bx,00F ;" "
00000021: 0301 add ax,[bx][di]
00000023: 3100 xor [bx][si],ax
00000025: 0300 add ax,[bx][si]
00000027: 13D1 adc dx,cx
00000029: 314101 xor [bx][di][01],ax
0000002C: 33D0 xor dx,ax
0000002E: 2BC2 sub ax,dx
00000030: 1BC1 sbb ax,cx
00000032: F7D0 not ax
00000034: 3106EE01 xor [01EE],ax
00000038: 4A dec dx
При выполнении команды, находящейся по адресу cs:011E, в регистр BX заносится значение: 000F
Блок команд по адресам 00000019-00000003B работает с данными, которые представляют собой:
00000019: BA1000 mov dx,00010 ;" "
0000001C: 8BDA mov bx,dx
0000001E: 83E30F and bx,00F ;" "
00000021: 0301 add ax,[bx][di]
00000023: 3100 xor [bx][si],ax
00000025: 0300 add ax,[bx][si]
00000027: 13D1 adc dx,cx
00000029: 314101 xor [bx][di][01],ax
0000002C: 33D0 xor dx,ax
0000002E: 2BC2 sub ax,dx
00000030: 1BC1 sbb ax,cx
00000032: F7D0 not ax
00000034: 3106EE01 xor [01EE],ax
00000038: 4A dec dx
00000039: 75E1 jne 00000001C --- (1)
0000003B: E2DC loop 000000019 --- (2)
Цикл проводится 16 раз, наш введенный пароль обрабатывается со строкой с адреса 000000DD
Строка «ACT-1 CHALLENGE!» служит для:
Расшифровывает на введенном нами ключе
Назначение блока команд по адресам 0000003D-00000048:
0000003D: B91000 mov cx,00010 ;" "
00000040: BECC01 mov si,001CC ;" ╠"
00000043: BFDE01 mov di,001DE ;" ▐"
00000046: F3A6 repe cmpsb
00000048: E305 jcxz 00000004F --- (3)
repe cmpsb сравнивает первые 16 байт si,001CC и di,001DE и если расшифровка была верна до этого, то переходим по адресу 00000004F.
Назначение блока команд по адресам 0000004F-00000062:
0000004F: B91400 mov cx,00014 ;
00000052: BEEE01 mov si,001EE ;
00000055: BFB801 mov di,001B8 ;
00000058: 8BD9 mov bx,cx
0000005A: 83E30F and bx,00F ;
0000005D: 8A00 mov al,[bx][si]
0000005F: 3005 xor [di],al
00000061: 47 inc di