Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Реверсивный инжиниринг приложений под Windows

Покупка
Новинка
Артикул: 856477.01.99
Доступ онлайн
1 699 ₽
В корзину
Реверсивный инжиниринг считается одним из наиболее сложных направлений в информационной безопасности (ИБ). В книге автор предлагает приоткрыть завесу тайны над этой темой и с помощью практических примеров рассмотреть, как работают приложения под ОС Windows, а также разобраться в том, как эксплуатировать уязвимости переполнения буфера, размещать свой код в выполняемых файлах, находить полезную информацию в дампах памяти и многое другое. Книга предназначена как для начинающих специалистов, желающих разобраться в реверс-инжиниринге, так и для опытных специалистов по информационной безопасности, интересующихся данной темой.
Бирюков, А. А. Реверсивный инжиниринг приложений под Windows : практическое руководство / А. А. Бирюков. – Москва : ДМК Пресс, 2024. - 376 с. – ISBN 978-5-93700-292-1. - Текст : электронный. - URL: https://znanium.ru/catalog/product/2205075 (дата обращения: 17.04.2025). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов
Реверсивный инжиниринг 
приложений под Windows
А. А. Бирюков
Москва, 2024


УДК 004.056
ББК 32.973
	
Б64
 
Бирюков А. А.
Б64	
Реверсивный инжиниринг приложений под Windows-. – М.: ДМК Пресс, 
2024. – 376 с.: ил. 
	
ISBN 978-5-93700-292-1
Реверсивный инжиниринг считается одним из наиболее сложных направлений в информационной безопасности (ИБ). В книге автор предлагает приоткрыть завесу тайны над этой темой и с помощью практических примеров 
рассмотреть, как работают приложения под ОС Windows, а также разобраться 
в том, как эксплуатировать уязвимости переполнения буфера, размещать свой 
код в выполнимых файлах, находить полезную информацию в дампах памяти 
и многое другое.
Книга предназначена как для начинающих специалистов, желающих разобраться в реверс-инжиниринге, так и для опытных специалистов по ИБ, интересующихся данной темой.
УДК  004.056
ББК  32.973
Все права защищены. Ни одна из частей этого документа не может быть воспроизведена, опубликована, сохранена в электронной базе данных или передана в любой форме 
или любыми средствами, такими как электронные, механические, записывающие или 
иначе, для любой цели без предварительного письменного разрешения владельца права.
Все торговые марки и названия программ являются собственностью их владельцев.
Материал, изложенный в данной книге, многократно проверен. Но, поскольку вероятность технических ошибок все равно существует, издательство не может гарантировать 
абсолютную точность и правильность приводимых сведений. По этой причине издательство не несет ответственности за возможные ошибки, связанные с использованием книги.
	
 	
       © Бирюков А. А., 2024
ISBN 978-5-93700-292-1	
	
       © Оформление, издание, ДМК Пресс, 2024


ОГЛАВЛЕНИЕ
0x0cf11 Вступление......................................................................................8
О пользе реверсинга...............................................................................................8
Зачем нужен реверсинг...........................................................................................9
О чем эта книга.....................................................................................................10
Заключение к вступлению....................................................................................11
Глава 1. 0x00f13 О коде, инструментах и крякмиксах.........................12
Основы реверсинга...............................................................................................12
Регистры и стек.....................................................................................................12
Флаги......................................................................................................................15
Инструкции............................................................................................................17
Режимы адресации................................................................................................19
Реальный режим....................................................................................................20
Защищенный режим.............................................................................................20
Многосегментная модель памяти........................................................................20
Длительный режим (Long Mode)..........................................................................21
О реверсинге .........................................................................................................21
Ассемблер и компиляторы...................................................................................21
Отладчики и дизассемблеры................................................................................23
Только виртуализация...........................................................................................25
Основы реверсинга, начинаем ломать................................................................25
О патчинге.............................................................................................................25
Подведем промежуточные итоги.........................................................................29
Пишем кейген........................................................................................................30
Виды механизмов защиты...................................................................................30
Разбор крякми ......................................................................................................31
Пишем кейген........................................................................................................34
Заключение............................................................................................................40


Глава 2. 0x06f16 Переполняем и эксплуатируем..................................41
Переполнение буфера...........................................................................................41
Суть проблемы.......................................................................................................42
Подопытный код...................................................................................................43
Методы поиска уязвимостей................................................................................44
Метод белого ящика.........................................................................................44
Метод серого ящика ........................................................................................45
Метод черного ящика......................................................................................47
Фаззинг..............................................................................................................47
Подключаем отладчик...........................................................................................48
Готовый шелл-код.................................................................................................58
Прямой и обратный шелл.....................................................................................59
Генерируем прямой шелл................................................................................61
Генерируем обратный шелл............................................................................63
Заключение............................................................................................................68
Глава 3. 0x05f1b Забираемся в чужие EXE’шники................................69
Инъекции кода в выполнимые файлы................................................................69
Не только расширение..........................................................................................70
MZ и другие............................................................................................................71
Сигнатура...............................................................................................................71
Структура...............................................................................................................71
Таблица импорта...................................................................................................72
Таблица экспорта..................................................................................................72
Таблица перемещений..........................................................................................72
Следы компиляторов............................................................................................74
Прячемся в «пещере кода» ..................................................................................83
Заключение............................................................................................................98
Глава 4. 0x04704 Свой код среди чужого..............................................99
Инъекции процессов в Windows .........................................................................99
Байты плохие и очень плохие............................................................................100
Пишем инжектор.................................................................................................101
Эксплуатируем.....................................................................................................103
DLL-инъекция кода ............................................................................................105
Динамические библиотеки............................................................................105
Создаем свою DLL..........................................................................................105
Отражающая DLL-инъекция .........................................................................108
Учимся отражать............................................................................................109
Эксплуатируем................................................................................................110
4
Оглавление


Инжектируем..................................................................................................111
Заглянем под капот........................................................................................113
Mimikatz: инъекции для взрослых................................................................114
Препарируем Mimikatz..................................................................................120
Заключение..........................................................................................................127
Глава 5. 0x04b35 Мешаем отладке....................................................... 128
Защищаемся от реверсинга................................................................................128
Антиотладка.........................................................................................................129
IsDebuggerPresent...........................................................................................129
Полный PEB....................................................................................................136
Код смерти......................................................................................................140
Атака на отладчик..........................................................................................144
Родительский процесс...................................................................................146
Подключение к процессу...............................................................................149
Родительский процесс...................................................................................151
Отладочные регистры....................................................................................153
Скрываемся из TEB........................................................................................160
Плагины для отладчика x64dbg.....................................................................161
Плагины для сокрытия IDA Pro.....................................................................164
Заключение..........................................................................................................164
Глава 6. 0x04d56 Прячемся в дебрях ОС............................................ 165
Прячемся в автозагрузку....................................................................................165
Работа с реестром................................................................................................166
Функции для работы с реестром...................................................................166
Раздел Startup......................................................................................................170
Ветка Run........................................................................................................171
Сервисы...........................................................................................................174
Установка сервиса..........................................................................................181
Другой путь.....................................................................................................190
И снова реестр................................................................................................191
Скрытый отладчик.........................................................................................195
Запуск через обновления...............................................................................198
Переселяем папки..........................................................................................200
Планировщик задач............................................................................................201
Инъекция DLL в уже запущенный процесс..................................................202
…И просто ярлыки.........................................................................................210
Заключение..........................................................................................................211
Глава 7. 0x04e97 Оконный реверсинг без ассемблера..................... 212
Платформа .NET...................................................................................................212
Необходимые инструменты...............................................................................217
5
Оглавление


Пример обфускации............................................................................................237
Заключение..........................................................................................................242
Глава 8. 0x04e98 Разбираем упаковку................................................. 243
Упаковка и обфускация.......................................................................................243
Разбор обфусцированного крякми....................................................................248
Заключение..........................................................................................................258
Глава 9. 0x04d59 Исследуем вредоносы............................................. 259
Анализ вредоносов..............................................................................................259
Виды вредоносов.................................................................................................259
Об инструментах.................................................................................................262
Препарируем блокировщик................................................................................263
Препарируем шифровальщик............................................................................272
Заключение..........................................................................................................281
Глава 10. 0x04b3a ROP: видишь код? А он есть!................................ 282
Код без кода.........................................................................................................282
String-oriented programming...............................................................................286
Sig return-oriented programming.........................................................................288
Blind Return Oriented Programming....................................................................289
Аналогичные атаки.............................................................................................289
Эксплуатируем ROP.............................................................................................290
Заключение..........................................................................................................298
Глава 11. 0x0470b Кукушка против вредоносов................................ 299
Песочницы...........................................................................................................299
Cuckoo Sandbox....................................................................................................300
Заключение..........................................................................................................321
Глава 12. 0x05f04 Копаемся в памяти с помощью Volatility........... 322
Форензика............................................................................................................322
Статический анализ.......................................................................................323
Динамический анализ...................................................................................323
Заключение..........................................................................................................330
Глава 13. 0x06f01 Полезный инструментарий Remnux.................... 331
Дистрибутив REMnux..........................................................................................332
Установка REMnux...............................................................................................332
Вариант из контейнера..................................................................................333
6
Оглавление


Общие действия по анализу подозрительного файла.....................................334
Начинаем анализ.................................................................................................334
Стереть нельзя отправить...................................................................................338
Cutter....................................................................................................................343
Заключение..........................................................................................................360
Глава 14. 0x00f00 Заключение.............................................................. 361
Глава 15. 0x0cf00 Приложения.............................................................. 365
Приложение № 1. Инструкции языка ассемблера............................................365
Приложение № 2. Горячие клавиши x64dbg.....................................................371
Приложение № 3. Горячие клавиши IDA Pro....................................................373
Глава 16. 0x14f00 Библиография.......................................................... 375
7
Оглавление


«Ален ноби, ностра алис!  
Что означает: если один человек построил,  
другой завсегда разобрать может!» 
Х/ф «Формула любви»
О пользе реверсинга
Реверсивный инжиниринг, или обратная разработка, появился задолго до создания компьютеров. Техническим специалистам всегда было интересно, как 
работает то или иное устройство или агрегат. А государства и промышленники 
хотели заполучить готовые технологии без затрат на разработку собственных 
аналогов или покупку лицензий. 
Традиционно двигателем технологий являются военные конфликты, и здесь 
обратная разработка пришлась как нельзя кстати, ведь, захватив трофейную 
0X0CF11  
ВСТУПЛЕНИЕ


технику, инженеры сразу же начинали изучать принципы ее работы, для того 
чтобы, с одной стороны, выявить слабые места вражеского вооружения, а с другой – понять, какие решения у противника лучше своих, дабы затем применить 
эти решения уже на своей технике. Кстати, не стоит думать, что реверсивный 
инжиниринг – это «тупое» копирование чужого готового решения. 
Казалось бы, просто разобрал готовое устройство, измерил детали, перенес 
на чертежи – и готово, можешь делать свое такое же. Однако на практике это 
далеко не так. Возьмем, к примеру, реверсинг самолета. Прежде всего отметим, 
что такое сложное устройство состоит из тысяч деталей, собираемых вместе 
в определенной последовательности, поэтому инженерам сначала придется 
немало потрудиться, чтобы его разобрать и понять принципы взаимодействия 
различных узлов. А затем мы можем столкнуться с неожиданными проблемами. 
Так, при изучении американских самолетов и другой техники, поставлявшейся 
в СССР по ленд-лизу, инженерам пришлось переводить все размеры деталей из 
дюймов в метрическую систему. А так как это соотношение является иррациональным числом, то задача «копирования» становится совсем нетривиальной.
Таким образом, обратная разработка является одним из инструментов технологического развития экономики и государства в целом.
Зачем нужен реверсинг
Но вернемся к компьютерам. Возможно, у многих читателей возник вопрос, 
почему книга посвящена реверсингу приложений под Windows, хотя всем известно, что в свете последних геополитических событий в России взят курс 
на замещение иностранного ПО российскими аналогами. Однако во многих 
отраслях на сегодняшний день есть проприетарные приложения, работающие 
только под Windows. Так, например, на многих объектах критической инфраструктуры, прежде всего на промышленных предприятиях, для управления 
технологическим оборудованием используются ОС Windows и проприетарные 
SCADA-системы. Для того чтобы заменить данные решения на отечественные 
разработки, необходимо понимать, как функционирует та или иная SCADAсистема, как работают протоколы обмена данными и драйверы оборудования. 
Таким образом, реверсинг может быть востребован при решении задач по замене проприетарного программного обеспечения на собственные разработки.
Кроме того, противостояние может вестись в том числе и в виртуальном 
пространстве, и противники могут использовать различное вредоносное программное обеспечение для достижения своих целей. Соответственно, реверсинг может помочь как тем, кто защищается от вражеских атак (например, 
вирусным аналитикам и специалистам по тестированию на проникновение), 
так и тем, кто выполняет противоположные задачи.
Код практически любого приложения может содержать ошибки. Самый простой способ исправить эти ошибки – это найти в исходном коде проблемную 
команду или функцию и внести соответствующие исправления в код. Но что 
делать, когда по тем или иным причинам исходный код нам не доступен, как 
в случае с проприетарным ПО? Если у нас имеется только откомпилированный 
выполнимый файл – артефакт. Например, для выявления уязвимостей, недокументированных возможностей и т. д. В таком случае нам тоже потребуется 
9
0x0cf11 Вступление


обратная разработка. Результатом обратной разработки является построение детального алгоритма работы программы, а также выявление уязвимостей и других интересующих исследователя аспектов работы программного обеспечения. 
Таким образом, обратная разработка нужна тем, кто занимается поиском 
уязвимостей с целью улучшения защищенности программного обеспечения, – 
багхантерам. 
Также реверсивный инжиниринг требуется программистам, работающим 
с низкоуровневыми языками программирования (например, разработчикам 
драйверов), где без знания ассемблера не обойтись. 
Не стоит забывать, что вредоносный код – это тоже программное обеспечение, и его тоже необходимо реверсить для выявления принципов заражения 
и для того, чтобы понять, как от них можно защититься. Этими задачами занимаются вирусные аналитики.
Ну что ж, надеюсь, мне удалось наглядно обосновать необходимость реверсивного инжиниринга для решения задач ИТ и ИБ, и теперь мы можем перейти 
непосредственно к описанию разделов этой книги.
О чем эта книга
Реверсинг приложений традиционно считается одним из самых сложных направлений в информационных технологиях. Многих пугает необходимость 
изучать язык ассемблера, необходимый для работы с дизассемблерами и отладчиками. Также программистам, работавшим только с языками высокого 
уровня, не всегда понятны принципы работы со стеком, обратная запись байтов в памяти и манипуляции с регистрами.
Опыт автора по созданию и сопровождению курса по реверсивному инжинирингу в Академии Кодебай и проведению занятий в других учебных центрах 
по данной тематике лег в основу этой книги.
В своей книге я постарался как можно больше внимания уделить практической части процесса обратной разработки, поэтому здесь большое количество 
иллюстраций, в которых я постарался зафиксировать все выполняемые на 
практике действия.
В начале книги мы уделим внимание основам языка ассемблера, поговорим 
об основных инструкциях, регистрах и организации памяти. Но потом сразу же 
начнем решать Crack Me (крякмиксы, задачки «взломай меня»). Это маленькие 
приложения, в которых необходимо ввести определенный пароль или выполнить 
иное действие, для того чтобы получить сообщение об успешном решении. Решение крякмиксов позволяет быстрее понять основные принципы реверсинга.
Далее мы поговорим о переполнении буфера – одной из самых распространенных ошибок программистов. Мы откомпилируем уязвимое приложение 
на С и затем напишем к нему эксплойт. Эта тема будет наиболее интересна 
специалистам по анализу защищенности приложений.
Потом обсудим инъекцию своего кода в выполнимые файлы. В частности, 
рассмотрим формат PE, следы, которые оставляют компиляторы в файлах, 
понятие code cave и многое другое. Эта тема будет полезна прежде всего вирусным аналитикам и специалистам по анализу защищенности.
Следующая глава будет посвящена тоже инъекциям, но уже процессов. Материал будет полезен вирусным аналитикам.
10
0x0cf11 Вступление


Похожие

Доступ онлайн
1 699 ₽
В корзину