Касперски К., Рокко Е. - Искусство дизассемблирования (В подлиннике) [2008, PDF, RUS]

Страницы:  1
Ответить
 

Dodson

Top User 12

Стаж: 18 лет 5 месяцев

Сообщений: 487

Dodson · 01-Мар-25 01:11 (7 месяцев назад)

Искусство дизассемблирования
Крис Касперски, Ева Рокко
Год издания: 2008
Жанр или тематика: Обратная разработка / Хакинг / Безопасность
Издательство: БХВ-Петербург
ISBN: 978-5-9775-0082-1
Серия: В подлиннике
Язык: Русский
Формат: PDF
Качество: Издательский макет или текст (eBook)
Количество страниц: 888
Описание
Книга посвящена вопросам и методам дизассемблирования, знание которых позволит эффективно защитить свои программы и создать более оптимизированные программные коды. Объяснены способы идентификации конструкций языков высокого уровня таких, как С/C++ и Pascal, показаны различные подходы к реконструкции алгоритмов. Приводится обзор популярных хакерских инструментов для Windows, UNIX и Linux — отладчиков, дизассемблеров, шестнадцатеричных редакторов, API- и RPC-шпионов, эмуляторов. Рассматривается исследование дампов памяти, защитных механизмов, вредоносного программного кода — вирусов и эксплоитов. Уделено внимание противодействию антиотладочным приемам.
Примеры страниц (скриншоты)
Оглавление
Введение — 1
ЧАСТЬ I. ОБЗОР ХАКЕРСКИХ ПРОГРАММ — 3
Глава 1. Инструментарий хакера — 5
Отладчики — 5
Дизассемблеры — 10
Декомпиляторы — 12
Шестнадцатеричные редакторы — 13
Распаковщики — 16
Дамперы — 16
Редакторы ресурсов — 17
Шпионы — 18
Мониторы — 19
Модификаторы — 21
Копировщики защищенных дисков — 21
Глава 2. Эмулирующие отладчики и эмуляторы — 22
Вводная информация об эмуляторах — 22
Исторический обзор — 22
Области применения эмуляторов — 24
Аппаратная виртуализация — 29
Обзор популярных эмуляторов — 30
DOSBox — 30
Bochs и QEMU — 31
VMware — 33
Microsoft Virtual PC — 35
Xen — 37
Ближайшие конкуренты — 38
Выбор подходящего эмулятора — 39
Защищенность — 39
Расширяемость — 39
Доступность исходных текстов — 39
Качество эмуляции — 40
Встроенный отладчик — 40
Сводная таблица характеристик эмуляторов — 41
Глава 3. Хакерский инструментарий для UNIX и Linux — 42
Отладчики — 42
Дизассемблеры — 46
Шпионы — 47
Шестнадцатеричные редакторы — 48
Дамперы — 49
Скрытый потенциал ручных сборок — 49
Философская подготовка — 53
Пошаговая инструкция — 53
Приступаем к сборке — 56
Инсталляция — 62
Заключение — 62
Глава 4. Ассемблеры — 63
Философия ассемблера — 63
Объяснение ассемблера на примерах C — 65
Ассемблерные вставки как тестовый стенд — 66
Необходимый инструментарий — 67
Сравнение ассемблерных трансляторов — 67
Основополагающие критерии — 68
MASM — 71
TASM — 73
FASM — 73
NASM — 75
YASM — 76
Программирование на ассемблере для UNIX и Linux — 77
Заключение — 82
Ссылки на упомянутые продукты — 83
ЧАСТЬ II. БАЗОВЫЕ ТЕХНИКИ ХАКЕРСТВА — 85
Глава 5. Введение в защитные механизмы — 87
Классификация защит по роду секретного ключа — 89
Надежность защиты — 91
Недостатки готовых "коробочных" решений — 92
Распространенные ошибки реализации защитных механизмов — 93
Защита от несанкционированного копирования и распространения серийных номеров — 93
Защита испытательным сроком и ее слабые места — 94
Реконструкция алгоритма — 98
Общие рекомендации — 101
Защита от модификации на диске и в памяти — 102
Противодействие дизассемблеру — 102
Антиотладочные приемы — 103
Антимониторы — 103
Противодействие дамперам — 103
Мелкие промахи, ведущие к серьезным последствиям — 104
Глава 6. Разминка — 107
Создаем защиту и пытаемся ее взломать — 107
Знакомство с дизассемблером — 109
Пакетные дизассемблеры и интерактивные дизассемблеры — 110
Использование пакетных дизассемблеров — 111
От EXE до CRK — 113
Практический пример взлома — 125
Подавление NAG-screen — 126
Принудительная регистрация — 129
Чистый взлом или укрощение окна About — 132
Заключение — 135
Глава 7. Знакомство с отладкой — 136
Введение в отладку — 137
Дизассемблер и отладчик в одной упряжке — 137
Точки останова на функции API — 139
Точки останова на сообщения — 141
Точки останова на данные — 142
Раскрутка стека — 143
Отладка DLL — 145
Заключение — 146
Глава 8. Особенности отладки в UNIX и Linux — 147
Ptrace — фундамент для GDB — 149
Библиотека Ptrace и ее команды — 150
Поддержка многопоточности в GDB — 151
Краткое руководство по GDB — 152
Трассировка системных вызовов — 156
Отладка двоичных файлов в GDB — 157
Подготовка к отладке — 157
Приступаем к трассировке — 162
Погружение в технику и философию GDB — 164
Заключение — 173
Глава 9. Особенности термоядерной отладки с Linice — 174
Системные требования — 175
Компиляция и конфигурирование Linice — 176
Загрузка системы и запуск отладчика — 177
Основы работы с Linice — 180
Заключение — 184
Глава 10. Расширенное обсуждение вопросов отладки — 185
Использование SoftICE в качестве логгера — 185
Легкая разминка — 186
Более сложные фильтры — 189
Анимированная трассировка в SoftICE — 192
Отладчик WinDbg как API- и RPC-шпион — 193
Первое знакомство с WinDbg — 194
Техника API-шпионажа — 197
Техника RPC-шпионажа — 203
Хакерские трюки с произвольными точками останова — 204
Секреты пошаговой трассировки — 204
Взлом через покрытие — 213
Руководящая идея — 213
Выбор инструментария — 213
Алгоритмы определения покрытия — 215
Выбор подхода — 216
Пример взлома — 218
Заключение — 222
ЧАСТЬ III. ИДЕНТИФИКАЦИЯ КЛЮЧЕВЫХ СТРУКТУР
ЯЗЫКОВ ВЫСОКОГО УРОВНЯ — 223
Глава 11. Идентификация функций — 225
Методы распознавания функций — 225
Перекрестные ссылки — 226
Автоматическая идентификация функций посредством IDA Pro — 231
Пролог — 232
Эпилог — 232
"Голые" (naked) функции — 234
Идентификация встраиваемых (inline) функций — 234
Модели памяти и 16-разрядные компиляторы — 237
Глава 12. Идентификация стартовых функций — 238
Идентификация функции WinMain — 238
Идентификация функции DllMain — 239
Идентификация функции main консольных Windows-приложений — 240
Глава 13. Идентификация виртуальных функций — 242
Идентификация чистой виртуальной функции — 247
Совместное использование виртуальной таблицы несколькими экземплярами объекта — 249
Копии виртуальных таблиц — 251
Связный список — 251
Вызов через шлюз — 252
Сложный пример, когда невиртуальные функции попадают в виртуальные таблицы — 252
Cтатическое связывание — 257
Идентификация производных функций — 261
Идентификация виртуальных таблиц — 263
Глава 14. Идентификация конструктора и деструктора — 266
Объекты в автоматической памяти — ситуация, когда конструктор/деструктор идентифицировать невозможно — 270
Идентификация конструктора/деструктора в глобальных объектах — 271
Виртуальный деструктор — 273
Виртуальный конструктор — 273
Конструктор раз, конструктор два… — 274
Пустой конструктор — 274
Глава 15. Идентификация объектов, структур и массивов — 275
Идентификация структур — 275
Идентификация объектов — 282
Объекты и экземпляры — 286
Мой адрес — не дом и не улица — 286
Глава 16. Идентификация this — 288
Глава 17. Идентификация new и delete — 289
Идентификация new — 289
Идентификация delete — 291
Подходы к реализации кучи — 291
Глава 18. Идентификация библиотечных функций — 292
Глава 19. Идентификация аргументов функций — 297
Соглашения о передаче параметров — 297
Цели и задачи — 298
Определение количества и типа передачи аргументов — 299
Адресация аргументов в стеке — 304
Стандартное соглашение — stdcall — 308
Соглашение cdecl — 310
Соглашение Pascal — 312
Соглашения о быстрых вызовах — fastcall — 323
Соглашения о вызовах thiscall и соглашения о вызове по умолчанию — 352
Аргументы по умолчанию — 354
Техника исследования механизма передачи аргументов неизвестным компилятором — 355
Глава 20. Идентификация значения, возвращаемого функцией — 356
Возврат значения оператором return — 357
Возврат вещественных значений — 371
Возвращение значений встроенными ассемблерными функциями — 375
Возврат значений через аргументы, переданные по ссылке — 377
Возврат значений через динамическую память (кучу) — 383
Возврат значений через глобальные переменные — 386
Возврат значений через флаги процессора — 391
Глава 21. Идентификация локальных стековых переменных — 393
Адресация локальных переменных — 394
Детали технической реализации — 395
Идентификация механизма выделения памяти — 395
Инициализация локальных переменных — 396
Размещение массивов и структур — 396
Выравнивание в стеке — 397
Как IDA Pro идентифицирует локальные переменные — 397
Исключение указателя на фрейм — 404
Глава 22. Идентификация регистровых и временных переменных — 408
Регистровые переменные — 409
Временные переменные — 413
Создание временных переменных при пересылках данных и вычислении выражений — 414
Создание временных переменных для сохранения значения, возращенного функцией, и результатов вычисления выражений — 416
Область видимости временных переменных — 417
Глава 23. Идентификация глобальных переменных — 418
Техника восстановления перекрестных ссылок — 418
Отслеживание обращений к глобальным переменным контекстным поиском их смещения в сегменте кода [данных] — 418
Отличия констант от указателей — 419
Косвенная адресация глобальных переменных — 420
Статические переменные — 423
Глава 24. Идентификация констант и смещений — 424
Определение типа непосредственного операнда — 426
Сложные случаи адресации или математические операции с указателями — 429
Порядок индексов и указателей — 433
Использование LEA для сложения констант — 433
"Визуальная" идентификация констант и указателей — 434
Глава 25. Идентификация литералов и строк — 435
Типы строк — 437
C-строки — 437
DOS-строки — 438
Pascal-строки — 438
Комбинированные типы — 439
Определение типа строк — 439
Turbo-инициализация строковых переменных — 445
Глава 26. Идентификация конструкций IF — THEN — ELSE — 449
Типы условий — 451
Наглядное представление сложных условий в виде дерева — 453
Исследование конкретных реализаций — 456
Сравнение целочисленных значений — 456
Сравнение вещественных чисел — 457
Условные команды булевой установки — 460
Прочие условные команды — 461
Булевские сравнения — 462
Идентификация условного оператора "(условие)?do_it:continue" — 462
Особенности команд условного перехода в 16-разрядном режиме — 466
Практические примеры — 468
Оптимизация ветвлений — 478
Глава 27. Идентификация конструкций SWITCH — CASE — BREAK — 482
Идентификация операторов множественного выбора — 482
Отличия switch от оператора case языка Pascal — 490
Обрезка (балансировка) длинных деревьев — 492
Сложные случаи балансировки или оптимизирующая балансировка — 495
Ветвления в case-обработчиках — 495
Глава 28. Идентификация циклов — 496
Циклы с предусловием — 497
Циклы с постусловием — 497
Циклы со счетчиком — 498
Циклы с условием в середине — 500
Циклы с множественными условиями выхода — 500
Циклы с несколькими счетчиками — 501
Идентификация continue — 501
Сложные условия — 502
Вложенные циклы — 502
Дизассемблерные листинги примеров — 503
Глава 29. Идентификация математических операторов — 527
Идентификация оператора + — 527
Идентификация оператора – — 530
Идентификация оператора / — 532
Идентификация оператора % — 536
Идентификация оператора * — 538
Комплексные операторы — 543
ЧАСТЬ IV. ПРОДВИНУТЫЕ МЕТОДЫ ДИЗАССЕМБЛИРОВАНИЯ — 545
Глава 30. Дизассемблирование 32-разрядных PE-файлов — 547
Особенности структуры PE-файлов в конкретных реализациях — 547
Общие концепции и требования, предъявляемые к PE-файлам — 548
Структура PE-файла — 549
Техника внедрения и удаления кода из PE-файлов — 552
Понятие X-кода и другие условные обозначения — 552
Цели и задачи X-кода — 553
Требования, предъявляемые к X-коду — 555
Внедрение X-кода — 555
Предотвращение повторного внедрения — 556
Классификация механизмов внедрения — 557
Категория A: внедрение в свободное пространство файла — 558
Категория A: внедрение путем сжатия части файла — 570
Категория A: создание нового NTFS-потока внутри файла — 571
Категория B: раздвижка заголовка — 573
Категория B: сброс части секции в оверлей — 575
Категория B: создание собственного оверлея — 578
Категория C: расширение последней секции файла — 578
Категория C: создание собственной секции — 581
Категория C: расширение серединных секций файла — 582
Категория Z: внедрение через автозагружаемые dll — 584
Глава 31. Дизассемблирование ELF-файлов под Linux и BSD — 585
Необходимый инструментарий — 585
Структура ELF-файлов — 587
Внедрение чужеродного кода в ELF-файл — 590
Заражение посредством поглощения файла — 590
Заражение посредством расширения последней секции файла — 592
Сжатие части оригинального файла — 595
Заражение посредством расширения кодовой секции файла — 600
Сдвиг кодовой секции вниз — 603
Создание собственной секции — 604
Внедрение между файлом и заголовком — 605
Практический пример внедрения чужеродного кода в ELF-файл — 606
Особенности дизассемблирования под Linux на примере tiny-crackme — 612
Исследование головоломки tiny-crackme — 613
Заключение — 624
Глава 32. Архитектура x86-64 под скальпелем ассемблерщика — 625
Введение — 625
Необходимый инструментарий — 626
Обзор архитектуры x86-64 — 629
Переход в 64-разрядный режим — 631
Программа "Hello, world" для x86-64 — 633
Глава 33. Исследования ядра Linux — 639
Вне ядра — 639
Штурм ядра — 640
Внутри ядра — 642
Где гнездятся ошибки — 646
Секреты кернел-хакинга — 647
Меняем логотип Linux — 647
Глава 34. Современные методы патчинга — 652
Секреты онлайнового патчинга — 652
Простейший on-line patcher — 653
Гонки на опережение — 655
Перехват API-функций как сигнальная система — 656
Аппаратные точки останова — 658
Малоизвестные способы взлома клиентских программ — 660
Обзор способов взлома — 660
Модификация без изменения байт — 661
Хак ядра Windows NT/2000/XP — 669
Структура ядра — 669
Типы ядер — 670
Методы модификации ядра — 673
Модификация загрузочного логотипа — 680
Есть ли жизнь после BSOD? — 682
Преодоление BSOD с помощью SoftICE — 683
Автоматическое восстановление — 687
Насколько безопасна утилита Anti-BSOD? — 691
Заключение — 691
Глава 35. Дизассемблирование файлов других форматов — 692
Дизассемблирование файлов PDF — 692
Что Adobe Acrobat обещает нонконформистам — 693
Модификация Adobe Acrobat — 697
Взлом с помощью PrintScreen — 697
Становитесь полиглотами — 697
Структура файла PDF — 698
Генерация ключа шифрования — 702
Атака на U-пароль — 704
Практический взлом паролей PDF — 705
Интересные ресурсы — 708
ЧАСТЬ V. ПРАКТИЧЕСКОЕ КОДОКОПАТЕЛЬСТВО — 709
Глава 36. Антиотладочные приемы и игра в прятки под Windows и Linux — 711
Старые антиотладочные приемы под Windows на новый лад — 712
Самотрассирующаяся программа — 713
Антиотладочные примеры, основанные на доступе к физической памяти — 718
Как работает Win2K/XP SDT Restore — 722
Stealth-технологии в мире Windows — 722
Синяя пилюля и красная пилюля — Windows вязнет в Матрице — 723
Синяя пилюля — 723
Красная пилюля — 728
Stealth-технологии в мире Linux — 730
Модуль раз, модуль два — 731
Исключение процесса из списка задач — 734
Перехват системных вызовов — 737
Перехват запросов к файловой системе — 739
Когда модули недоступны — 740
Прочие методы борьбы — 742
Интересные ссылки по теме стелсирования — 743
Захватываем ring 0 в Linux — 743
Честные способы взлома — 744
Дырка в голубом зубе или Linux Kernel Bluetooth Local Root Exploit — 744
Эльфы падают в дамп — 745
Проблемы многопоточности — 746
Получаем root на многопроцессорных машинах — 747
Глава 37. Переполнение буфера в системах с неисполняемым стеком — 750
Конфигурирование DEP — 753
Проблемы совместимости — 755
Атака на DEP — 756
В лагере UNIX — 761
BufferShield или PaX на Windows — 763
Интересные ресурсы — 764
Глава 38. Борьба с паковщиками — 765
Предварительный анализ — 765
Распаковка и ее альтернативы — 768
Алгоритм распаковки — 768
В поисках OEP — 769
Дамп живой программы — 769
Поиск стартового кода по сигнатурам в памяти — 771
Пара популярных, но неудачных способов: GetModuleHandleA и gs:0 — 772
Побочные эффекты упаковщиков или почему не работает VirtualProtect — 776
Универсальный метод поиска OEP, основанный на балансе стека — 779
Техника снятия дампа с защищенных приложений — 784
Простые случаи снятия дампа — 785
В поисках самого себя — 789
Дамп извне — 790
Механизмы динамической расшифровки — 791
Дамп изнутри — 792
Грязные трюки — 794
Полезные ссылки — 796
Упаковщики исполняемых файлов в LINUX/BSD и борьба с ними — 796
Упаковщики и производительность — 797
ELF-Crypt — 798
UPX — 805
Burneye — 807
Shiva — 809
Сравнение упаковщиков — 811
Глава 39. Обфускация и ее преодоление — 813
Как работает обфускатор — 814
Как это ломается — 819
Распутывание кода — 820
Черный ящик — 822
Застенки виртуальной машины — 824
Будущее обфускации — 824
Глава 40. Обнаружение, отладка и дизассемблирование зловредных программ — 826
Время тоже оставляет отпечатки — 826
Дерево процессов — 828
Допрос потоков — 830
Восстановление SST — 836
Аудит и дизассемблирование эксплоитов — 840
Как препарируют эксплоиты — 841
Анализ эксплоита на практическом примере — 842
Как запустить shell-код под отладчиком — 854
Заключение — 854
Интересные ссылки — 855
Глава 41. Атака на эмуляторы — 856
Атака через виртуальную сеть — 857
Атака через folder.htt — 858
Атака через backdoor-интерфейс — 859
Новейшие эксплоиты для виртуальных машин — 862
VMware: удаленное исполнение произвольного кода I — 862
VMware: удаленное исполнение произвольного кода II — 864
VMware: перезапись произвольного файла — 865
Подрыв виртуальных машин изнутри — 865
Описание компакт-диска — 873
Предметный указатель — 875

Касперски К., Рокко Е. - Искусство дизассемблирования. Наиболее полное руководство (В подлиннике) [2008, DjVu, RUS] + Code
Download
Rutracker.org не распространяет и не хранит электронные версии произведений, а лишь предоставляет доступ к создаваемому пользователями каталогу ссылок на торрент-файлы, которые содержат только списки хеш-сумм
Как скачивать? (для скачивания .torrent файлов необходима регистрация)
[Профиль]  [ЛС] 
 
Ответить
Loading...
Error