Архив задач

Exploit

Имеется программа на языке С:


void main()

{

char a[10];

printf("Введите строку:");

gets(a);

printf("Вы ввели %d символов", strlen(a));

}


При компиляции получился следующий программный код:


Адрес памяти

Байты в памяти

Их содержание

100D123D

C2 E2 E5 E4 E8 F2 E5 20 F1 F2 F0 EE EA F3 00

Строка «Введите строку» с нулевым байтом в конце

100D124C

C2 FB 20 E2 E2 E5 EB E8 20 25 64 20 F1 E8 EC E2 EE EB EE E2 00

Строка «Вы ввели %d символов» с нулевым байтом в конце

100D1261

00 00 00 00 00 00 00 00 00 00

массив a (10 элементов типа char)

100D126B

68 3D 12 0D 10

Машинная команда, передающая адрес строки «Введите строку» (100D123D) в подпрограмму printf как параметр

100D1270

FF 15 14 72 0D 10

Машинная команда, вызывающая подпрограмму printf, расположенную по адресу 100D7214

100D1276

83 C4 04

Вспомогательная машинная команда, выполняемая после возвращения из подпрограммы printf, имеющей один параметр

100D1279

68 61 12 0D 10

Машинная команда, передающая параметр a, расположенный по адресу 100D1261, в подпрограмму gets

100D127E

FF 15 10 72 0D 10

Машинная команда, вызывающая подпрограмму gets, расположенную по адресу 100D7210

100D1284

83 C4 04

Вспомогательная машинная команда, выполняемая после возвращения из подпрограммы gets, имеющей один параметр

100D1287

68 61 12 0D 10

Машинная команда, передающая параметр a, расположенный по адресу 100D1261, в подпрограмму strlen

100D128C

E8 D5 FD FF FF

Машинная команда, вызывающая подпрограмму strlen

100D1291

83 C4 04

Вспомогательная машинная команда, выполняемая после возвращения из подпрограммы strlen, имеющей один параметр

100D1294

50

Машинная команда, передающая возвращаемое значение функции strlen в подпрограмму printf как параметр

100D1295

68 4C 12 0D 10

Машинная команда, передающая адрес строки «Вы ввели %d символов» (100D124C) в подпрограмму printf как параметр

100D129A

FF 15 14 72 0D 10

Машинная команда, вызывающая подпрограмму printf, расположенную по адресу 100D7214

100D12A0

83 C4 08

Вспомогательная машинная команда, выполняемая после возвращения из подпрограммы printf, имеющей два параметра

100D12A3

C3

Машинная команда, завершающая программу


Применяемая реализация подпрограммы gets принимает на вход любые данные без ограничений, в том числе специальные и непечатаемые символы (нулевой байт, символ конца строки и т.п.). Окончанием входного потока считается комбинация байтов «0x0D0A».

Укажите входную последовательность байтов (в шестнадцатеричном формате), после ввода которой программа выведет строку «Я в полной безопасности».