Введение

об авторе
условные обозначения
благодарности
от издательства
часть I. о деньгах,
вирусах, программировании
и смысле жизни
глава 1. программирование денег
лопатой
куда податься
чем заняться
коммерческая природа некоммерческого
Open Source
глава 2. на чем писать, как
писать, с кем писать
на чем писать
как писать
слой сопряжения со
средой
вычислительная часть
пользовательский
интерфейс 
с кем писать
глава 3. неуловимые мстители
возвращаются
часть II. локальные
вирусы
о формате PE-файла,
способах внедрения в него и немного обо всем остальном
глава 4. техника выживания в
мутной воде,
или как обхитрить антивирус
наши герои
немного теории, или под
капотом антивируса
плохие идеи, или чего не
надо делать
генеральный план
наступления, или как мы будем действовать
криптография на пеньке
глава 5. формат PE-файлов
общие концепции и
требования, предъявляемые к PE-файлам
структура PE-файла
что можно и чего нельзя
делать с PE-файлом
описание основных полей
PE-файла
[old-exe]
e_magic
[old-exe]
e_cparhdr
[old-exe]
e_lfanew
[IMAGE_FILE_HEADER]
Machine
[IMAGE_FILE_HEADER]
NumberOfSections
[image_file_header]
PointerToSymbolTable/NumberOfSymbols
[image_file_header]
SizeOfOptionalHeader
[image_file_header]
Characteristics
[image_optional_header]
Magic
[image_optional_header]
SizeOfCode/SizeOfInitializedData/SizeOfUninitializedData
[image_optional_header]
BaseOfCode/BaseOfData
[image_optional_header]
AddressOfEntryPoint
[image_optional_header]
Image Base
[image_optional_header]
FileAlignment/SectionAlignment
[image_optional_header]
SizeOfImage
[image_optional_header]
SizeOfHeaders
[image_optional_header]
CheckSum
[image_optional_header]
Subsystem
[image_optional_header]
DllCharacteristics
[image_optional_header]
SizeOfStackReserve/SizeOfStackCommit, SizeOfHeapReserve/SizeOfHeapCommit
[image_optional_header]
NumberOfRvaAndSizes
DATA
DIRECTORY
таблица секций
экспорт
импорт
перемещаемые
элементы
глава 6. техника внедрения
и удаления
кода ИЗ PE-файлОВ
цели
и задачи х-кода
требования,
предъявляемые к X-коду
техника
внедрения
глава 7. вирусы в мире
UNIX
язык
разработки
средства
анализа, отладки и плагиата
кривое
зеркало, или как антивирусы стали плохой идеей
структура
ELF-файлов
методы
заражения
общая
структура и стратегия вируса
перехват
управления путем модификации таблицы импорта
ссылки
по теме
глас
народа
глава 8. основы самомодификации

знакомство
с самомодифицирующимся кодом
принципы построения
самомодифицирующегося кода
матрица
проблемы обновления кода
через интернет
глас народа
глава 9. найти
и уничтожить, или пособие по борьбе
с вирусами и троянами
если вдруг открылся люк…
новые процессы
потоки и память
контроль целостности
файлов
ненормальная сетевая
активность
сокрытие файлов,
процессов и сетевых соединений в LINUX
модуль раз, модуль два…
исключение процесса из
списка задач
перехват системных
вызовов
перехват запросов
к файловой системе
когда модули недоступны…
прочие методы борьбы
глас народа
что читать
часть III. войны
юрского периода II —
черви возвращаются
глава 10. внутри
пищеварительного тракта червя
явление червя народу
конструктивные
особенности червя
долг перед видом, или
рожденный, чтобы умереть
тактика и стратегия
инфицирования
глава 11. переполнение буферов
как средство
борьбы с мегакорпорациями
что такое
переполняющиеся буфера
что нам потребуется
зоопарк переполняющихся
буферов — переулок монстров
три континента: стек,
данные и куча
о технике поиска
замолвите слово
практический пример
переполнения
пара общих соображений
напоследок
глава 12. Ultimate adventure,
или Поиск дыр
в двоичном коде
прежде чем начать
необходимый
инструментарий
ошибки переполнения
глас народа
глава 13. спецификаторы под
арестом,
или дерни printf за хвост
функции, поддерживающие
форматированный вывод
патч cfingerd’a
источники угрозы
навязывание собственных
спецификаторов
дисбаланс спецификаторов
переполнение
буфера-приемника
глава 14. SEH на службе
контрреволюции
кратко
о структурных исключениях
перехват управления
подавление аварийного
завершения приложения
глава 15. Техника написания
переносимого shell-кода
требования,
предъявляемые к переносимому shell-коду
пути достижения
мобильности
саксь и маст дай
жесткой привязки
артобстрел прямого
поиска в памяти
огонь прямой
наводкой — PEB
раскрутка стека
структурных исключений
native API, или портрет
в стиле «ню»
системные вызовы UNIX
глава 16. секс с IFRAME,
или как размножаются
черви в Internet Explorer’e
технические подробности
эксплоит
реанимация эксплоита
составление собственного
shell-кода
с презервативом или без
убить Билла
глава 17. обход брандмауэров
снаружи и изнутри
от чего защищает
и не защищает брандмауэр
обнаружение
и идентификация брандмауэра
сканирование
и трассировка через брандмауэр
проникновение через
брандмауэр
побег из-за брандмауэра
ссылки по теме
глас народа
глава 18. honeypot’ы, или хакеры
любят мед
внутри горшка
подготовка к атаке
срывая вуаль тьмы
артобстрел отвлекающих
маневров
атака на honeypot
утонувшие в меду
когда весь мед съеден…
глава 19. Рыбная ловля
в локальной сети — sniffering
цели и методы атаки
хабы и ухабы
пассивный перехват
трафика
обнаружение пассивного
перехвата
активный перехват, или arp-spoofing
обнаружение активного
перехвата
клонирование карты
обнаружение клонирования
и противостояние ему
перехват трафика на Dial-Up’e
когда сниффер бесполезен
stealth-сниффинг
ссылки
глава 20. даза банных под
прицелом
нестойкость шифрования
паролей
перехват пароля
вскрытие скрипта
навязывание запроса, или
SQL-injecting
определить наличие SQL
противодействие
вторжению
секреты командного
интерпретатора
командный интерпретатор
на службе у хакера
защита от вторжения
команды хакерского
багажа
часть IV. зиккурат
защитных сооружений,
или как противостоять вирусам,
хакерам и другим порождениям тьмы
глава 21. как защищают
программное обеспечение
джинн из бутылки, или
недостатки решений из коробки
от чего защищаться
защита от копирования,
распространения серийного номера
защита испытательным
сроком
защита от реконструкции
алгоритма
защита от модификации на
диске и в памяти
от кого защищаться
антидизассемблер
антиотладка
антимонитор
антидамп
как защищаться
глава 22. методология защиты
в мире UNIX
разведка перед боем, или
в хакерском лагере у костра
отладчики
дизассемблеры
шпионы
шестнадцатеричные
редакторы
дамперы
автоматизированные
средства защиты
антиотладочные приемы
паразитные файловые
дескрипторы
аргументы
командной строки и окружение
дерево
процессов
сигналы,
дампы и исключения
распознавание
программных точек останова
мы
трассируем, нас трассируют…
прямой
поиск отладчика в памяти
глава 23. особенности
национальной отладки в UNIX
отладка
в исторической перспективе
ptrace —
фундамент для GDB
ptrace
и ее команды
поддержка
многопоточности в GDB
краткое
руководство по GDB
трассировка
системных функций
Windows
против UNIX
интересные ссылки
глава 24. брачные игры лазерных
дисков
стратегия
борьбы
дела
софтверные, или эйфория от атрофии
дела
железячные, или не все приводы одинаковы
регламент
работ, или с чего начать и чем закончить
копирование
дисков
интересные
ссылки
глава 25. тестирование
программного обеспечения
тестирование на микроуровне
регистрация ошибок
бета-тестирование
вывод диагностической
информации
а мы по шпалам…
верификаторы кода языков
Си/С++
демонстрация ошибок
накопления
часто встречающиеся
ошибки I
часто встречающиеся
ошибки II
трудовые будни
программиста (источник неизвестен)
глас народа
часть V. операционные
системы, эмуляторы
и компиляторы
глава 26. эмулирующие отладчики
и эмуляторы
minimal
system request
выбирай
эмулятор себе по руке!
защищенность

расширяемость
открытость
исходных текстов
качество
эмуляции
встроенный
отладчик
глава 27. обзор эмуляторов
DOS-BOX
Bochs
Microsoft
Virtual PC
VM Ware
основные
характеристики наиболее популярных эмуляторов
разные
мелочи
глава 28. области применения
эмуляторов
пользователям
администраторам
разработчикам
хакерам
экзотические
эмуляторы
глава 29. ядерно-нуклонная
смесь,
или чем отличается XP от 9х
переносимость,
или мертвее всех живых
16,
32, 64 и 128, или минусы широкой разрядности
полнота
поддержки win32 API, или свой среди чужих
многопроцессорность,
или на хрена козе баян
поддержка
оборудования, или сапер, ошибшийся дважды
планировка
потоков извне и изнутри
защищенность,
или добровольный заключенный
сравнительная
характеристика ядер Windows 9x и Windows NT
глава 30. разгон
и торможение Windows NT
структура
ядра
типы
ядер
почему
непригодны тестовые пакеты
обсуждение
методик тестирования
разность
таймеров
синхронизация
ACPI
и IRQ
переключение
контекста
длительность
квантов
обсуждение
полученных результатов
глава 31. win32 завоевывает
UNIX, или портили,
портили и спортили
слои абстрагирования,
или ба! знакомые все лица!
перенос приложений,
созданных в Microsoft Visual Studio
соответствие основных
классов
DELPHI + BUILDER +
LINUX = KYLIX
ручной перенос, или один
на один сам с собою
интересные ссылки
глава 32. гонки на вымирание,
девяносто
пятые выживают
два лагеря —
пользователи и программисты
вавилонская башня языка
Си/С++
качество оптимизации,
или мегагерцы, спрессованные
в стрелу времени
линус и компиляторы
чем народ компилирует
ядро
еще тесты
заключение
глава 33. техника оптимизации
под Линукс
общие соображения по
оптимизации
константы
свертка констант
объединение констант
константная подстановка
в функциях
код и переменные
удаление мертвого кода
удаление неиспользуемых
функций
удаление неиспользуемых
переменных
удаление неиспользуемых
выражений 500
удаление лишних
обращений к памяти
удаление копий переменных
размножение переменных
распределение переменных
по регистрам
регистровые
ре-ассоциации
* выражения
упрощение выражений
упрощение алгоритма
использование
подвыражений
оптимизация ветвлений/branch
оптимизация switch
сводная таблица
выводы
советы
трансляция коротких
условных переходов
заключение