Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4 лаба КА.doc
Скачиваний:
4
Добавлен:
07.07.2019
Размер:
79.36 Кб
Скачать

Отчет по лабораторной работе № 4

Название работы

Применение редактора кода Hiew совместно с отладчиком Turbo Debugger.

Цель

Познакомиться на практике с методами реализации обратного проектирования программ. Изучить возможности совместного применения отладчиков и редакторов кода. Исследовать предложенные программы при помощи редактора кода Hiew совместно с отладчиком Turbo Debugger.

Выполнил

Студент гр. № 4405

ФИО Мартьянов А.О.

Отчет

Исследование программы Act-1.com

  1. Программа ACT-1.COM выполняет следующие действия:

Программа просит ввести регистрационный код

  1. Дизассемблированный код программы:

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

  1. При изучении программы в текстовом режиме были обнаружены следующие текстовые строки:

ACT-1 by Dr. Animade 19-Feb-1998

Enter code:

Password failed!

ACT-1 CHALLENGE!

  1. Примерный адрес начала области данных: 00000060

  2. Адреса начала и окончания обнаруженных текстовых строк:

0000006C – 00000092

00000096 – 000000A0

000000A7 – 000000B6

000000EE – 000000FD

  1. Адрес окончания работы программы: 0000006B

  2. Приблизительный размер области кода программы: 00000000 – 000006B

Приблизительный размер области данных: 0000006C – 000000FF

  1. Группа команд по адресам 00000000-00000006 выполняет:

Mov ah, 09 – кидает в старшую половинку регистра ax значение 09

Mov dx, 0016C – кладет в регистр dx значеие 0016C

Int 21h – вызывает прерывание

  1. Сообщение, выводимое командами по адресам 00000000-00000006:

Enter code:

  1. Группа команд по адресам 00000007-0000000D выполняет:

Mov ah, 00A – кидает в старшую половинку регистра ax значение 00A

Mov dx, 001DC – кладет в регистр dx значеие 001DC

Int 021h (0A) - буферизированный ввод с клавиатуры (адрес буфера Ds:DX)

  1. Длина запрашиваемого пароля: 16 символов, потому что:

По адресу DS:DX в программе находится значение 000000DC: 1100 (Ранее вводилось значение 01DC в регистр dx). В 16-ричной с.с 11 = 17, т.е. длинна пароля 16 символов, 17-й на перевод строки

  1. Группа команд и их адреса, выводящие сообщение о неправильном вводе пароля:

0000004A: BAA401 mov dx,001A4 ; - сравнение

00000067: B409 mov ah,009 ;

00000069: CD21 int 021

Где-то тут вначале происходит сравнивание вводимого пароля, если не правильно, то переходим на адрес 00000067, и командой по адресу 00000069 выводится сообщение о неправильном введенном пароле.

  1. Реакция программы на изменение команды JMPS двумя командами NOP:

Не выводится сообщение о том, что пароль неверен, так как нет перехода на процедуры выводящие сообщение о некорректном вводе пароля. Выводит не расшифрованные данные.

  1. Это может быть объяснено тем, что:

Не происходит перехода по адресу в команде jmps, так как мы заменили его пустышками.

  1. Группа команд генерации пароля и их назначение:

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

  1. При выполнении команды, находящейся по адресу cs:011E, в регистр BX заносится значение: 000F

  2. Блок команд по адресам 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

  1. Строка «ACT-1 CHALLENGE!» служит для:

Расшифровывает на введенном нами ключе

  1. Назначение блока команд по адресам 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.

  1. Назначение блока команд по адресам 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