Чтение онлайн

на главную - закладки

Жанры

Техника сетевых атак
Шрифт:

·.text:0040101D; Вызов функции printf

·.text:00401022 add esp, 8

·.text:00401022; Выталкивание аргументов функции из стека

·.text:00401025 mov esp, ebp

·.text:00401025; Закрытие кадра стека

·.text:00401027 pop ebp

·.text:00401028 retn

·.text:00401028 main endp

Итак, содержимое стека на момент вызова функции printf такого (смотри комментарии к дизассемблированному

листингу) [315]:

· +8 off aXX (‘%x %x’) (строка спецификаторов)

· +4 var_4 (‘a’) (аргумент функции printf)

· 0 var_8 (‘b’) (локальная переменная)

· -4 var_4 (‘a’) (локальная переменная)

Но функция не знает, что ей передали всего один аргумент, - ведь строка спецификаторов требует вывести два (“%x %x). А поскольку аргументы в Си заносятся слева на право, самый левый аргумент расположен в стеке по наибольшему адресу. Спецификатор “%x” предписывает вывести машинное слово [316], переданное в стек по значению. Для сравнения - вот как выглядит стек на момент вызова функции “printf” в следующей программе (на диске, прилагаемом к книге, она расположена в файле “/SRC/printf.demo.c”):

· main

· {

· int a=0x666;

· int b=0x777;

· printf("%x %x\n",a,b);

·

·}

·

· +12 off aXX (‘%x %x’) (строка спецификаторов)

· +08 var_4 (‘a’) (аргумент функции printf)

· +04 var_8 (‘b’) (аргумент функции printf)

· 00 var_8 (‘b’) (локальная переменная)

· -04 var_4 (‘a’) (локальная переменная)

Дизассемблированный листинг в книге не приводится, поскольку он практически ни чем не отличается от предыдущего (на диске, прилагаемом к книге, он расположен в файле “/SRC/printf.demo.lst”). В стеке по относительному смещению [317] +4 расположен второй аргумент функции. Если же его не передать, то функция примет за аргумент любое значение, расположенное в этой ячейке.

Поэтому, несмотря на то, что функции была передана всего лишь одна переменная, она все равно ведет себя так, как будто бы ей передали полный набор аргументов (а что ей еще остается делать?):

· +8 off aXX (‘%x %x’) (строка спецификаторов)

· +4 var_4 (‘a’) (аргумент функции printf)

· 0 var_8 (‘b’) (локальная переменная)

· -4 var_4 (‘a’) (локальная

переменная)

Разумеется, в нужном месте стека переменная ‘b’ оказалась по чистой случайности. Но в любом случае - там были бы какие-то данные. Определенным количеством спецификаторов можно просмотреть весь стек - от верхушки до самого низа! Весьма велика вероятность того, что в нем окажется данные, интересные злоумышленнику. Например, пароли на вход в систему.

Теперь становится понятной ошибка, допущенная разработчиком buff.printf.c. Ниже приведен дизассемблированный листинг с подробными пояснениями (на диске, прилагаемом к книге, он находится в файле “/SRC/demo.printf.lst”):

·.text:00401000; --------------- S U B R O U T I N E ---------------------------------------

·.text:00401000

·.text:00401000; Attributes: bp-based frame

·.text:00401000

·.text:00401000 main proc near; CODE XREF: start+AFp

·.text:00401000

·.text:00401000 var_54 = byte ptr -54h

·.text:00401000 var_44 = byte ptr -44h

·.text:00401000 var_34 = byte ptr -34h

·.text:00401000 var_14 = dword ptr -14h

·.text:00401000 var_10 = byte ptr -10h

·.text:00401000

·.text:00401000 push ebp

·.text:00401001 mov ebp, esp

·.text:00401001 ; Открытие кадра стека

·.text:00401003 sub esp, 54h

·.text:00401003 ; Резервируется 0x54 байта для локальных переменных

·.text:00401006 push offset aPrintfBugDemo; "printf bug demo\n"

·.text:00401006 ; Занесение в стек строки “ printf bug demo"

·.text:0040100B call _printf

·.text:0040100B ; Вызов printf(“printf bug demo\n")

·.text:00401010 add esp, 4

·.text:00401010 ; Балансировка стека

·.text:00401013 push offset aR; "r"

·.text:00401013 ; Занесение в стек смещения строки “r”

·.text:00401018 push offset aBuff_psw; "buff.psw"

·.text:00401018; Занесение в стек смещения строки “buff.psw”

·.text:0040101D call _fopen

·.text:0040101D; Вызов fopen(“buff.psw”,”r”);

·.text:00401022 add esp, 8

·.text:00401022; Балансировка стека

·.text:00401025 mov [ebp+var_14], eax

·.text:00401025; Переменная var_14 представляет собой указатель файла psw

·.text:00401028 cmp [ebp+var_14], 0

·.text:00401028; Файл открыт успешно?

·.text:0040102C jnz short loc_0_401033

·.text:0040102C ; Файл открыт успешно! Продолжение выполнения программы

·.text:0040102E jmp loc_0_4010CD

Поделиться:
Популярные книги

Кодекс Крови. Книга II

Борзых М.
2. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга II

Газлайтер. Том 8

Володин Григорий
8. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 8

Черный Маг Императора 7 (CИ)

Герда Александр
7. Черный маг императора
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Черный Маг Императора 7 (CИ)

Отмороженный 9.0

Гарцевич Евгений Александрович
9. Отмороженный
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Отмороженный 9.0

Сумеречный Стрелок 10

Карелин Сергей Витальевич
10. Сумеречный стрелок
Фантастика:
рпг
аниме
фэнтези
5.00
рейтинг книги
Сумеречный Стрелок 10

Имя нам Легион. Том 3

Дорничев Дмитрий
3. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 3

Офицер империи

Земляной Андрей Борисович
2. Страж [Земляной]
Фантастика:
боевая фантастика
попаданцы
альтернативная история
6.50
рейтинг книги
Офицер империи

Скрываясь в тени

Мазуров Дмитрий
2. Теневой путь
Фантастика:
боевая фантастика
7.84
рейтинг книги
Скрываясь в тени

Моя (не) на одну ночь. Бесконтрактная любовь

Тоцка Тала
4. Шикарные Аверины
Любовные романы:
современные любовные романы
7.70
рейтинг книги
Моя (не) на одну ночь. Бесконтрактная любовь

Зауряд-врач

Дроздов Анатолий Федорович
1. Зауряд-врач
Фантастика:
альтернативная история
8.64
рейтинг книги
Зауряд-врач

Газлайтер. Том 3

Володин Григорий
3. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 3

Ты нас предал

Безрукова Елена
1. Измены. Кантемировы
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Ты нас предал

Калибр Личности 1

Голд Джон
1. Калибр Личности
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Калибр Личности 1

Темный Лекарь 3

Токсик Саша
3. Темный Лекарь
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Темный Лекарь 3