Reverse Engineering для начинающих (LITE-версия!)
Free

Reverse Engineering для начинающих (LITE-версия!)

By Dennis Yurichev
Free
Book Description


У термина «reverse engineering» несколько популярных значений: 

1) исследование скомпилированных программ; 

2) ска- нирование трехмерной модели для последующего копирования; 

3) восстановление структуры СУБД. 

Настоящий сборник заметок связан с первым значением.

Рассмотренные темы

x86/x64, ARM/ARM64, MIPS, Java/JVM.

Затронутые темы

Oracle RDBMS , Itanium, донглы для защиты от копирования , LD_PRELOAD , переполнение стека, ELF9, формат файла PE в win32 , x86-64 , критические секции, системные вызовы , TLS10, адресно-независимый код, profile- guided optimization , C++ STL , OpenMP , SEH.

 


Внимание: это сокращенная LITE-версия!

Она примерно в 6 раз короче полной версии (~150 страниц) и предназначена для тех, кто хочет краткого введения в основы reverse engineering. Здесь нет ничего о

MIPS, ARM, OllyDBG, GCC, GDB, IDA, нет задач, примеров, и т.д.

 


Also in English.
Table of Contents
  • I Образцы кода
    • Краткое введение в CPU
    • Простейшая функция
      • x86
    • Hello, world!
      • x86
        • MSVC
      • x86-64
        • MSVC — x86-64
      • Вывод
    • Пролог и эпилог функций
      • Рекурсия
    • Стек
      • Почему стек растет в обратную сторону?
      • Для чего используется стек?
        • Сохранение адреса возврата управления
        • Передача параметров функции
        • Хранение локальных переменных
        • x86: Функция alloca()
        • (Windows) SEH
        • Защита от переполнений буфера
        • Автоматическое освобождение данных в стеке
      • Разметка типичного стека
    • printf() с несколькими аргументами
      • x86
        • x86: 3 аргумента
        • x64: 8 аргументов
      • Вывод
      • Кстати
    • scanf()
      • Простой пример
        • Об указателях
        • x86
        • x64
      • Глобальные переменные
        • MSVC: x86
        • MSVC: x64
      • Проверка результата scanf()
        • MSVC: x86
        • MSVC: x86 + Hiew
        • MSVC: x64
      • Упражнения
        • Упражнение #1
    • Доступ к переданным аргументам
      • x86
        • MSVC
      • x64
        • MSVC
    • Ещё о возвращаемых результатах
      • Попытка использовать результат функции возвращающей void
      • Что если не использовать результат функции?
    • Оператор GOTO
      • Мертвый код
    • Условные переходы
      • Простой пример
        • x86
      • Вычисление абсолютной величины
        • Оптимизирующий MSVC
      • Тернарный условный оператор
        • x86
        • Перепишем, используя обычный if/else
      • Поиск минимального и максимального значения
        • 32-bit
      • Вывод
        • x86
        • Без инструкций перехода
    • switch()/case/default
      • Если вариантов мало
        • x86
        • Вывод
      • И если много
        • x86
        • Вывод
      • Когда много case в одном блоке
        • MSVC
      • Fall-through
        • MSVC x86
    • Циклы
      • Простой пример
        • x86
        • Ещё кое-что
      • Функция копирования блоков памяти
        • Простейшая реализация
      • Вывод
    • Простая работа с Си-строками
      • strlen()
        • x86
    • Замена одних арифметических инструкций на другие
      • Умножение
        • Умножение при помощи сложения
        • Умножение при помощи сдвигов
        • Умножение при помощи сдвигов, сложений и вычитаний
      • Деление
        • Деление используя сдвиги
    • Массивы
      • Простой пример
        • x86
      • Переполнение буфера
        • Чтение за пределами массива
        • Запись за пределы массива
      • Еще немного о массивах
      • Массив указателей на строки
        • x64
      • Многомерные массивы
        • Пример с двумерным массивов
        • Работа с двухмерным массивом как с одномерным
        • Пример с трехмерным массивом
      • Вывод
    • Работа с отдельными битами
      • Проверка какого-либо бита
        • x86
      • Установка и сброс отдельного бита
        • x86
      • Сдвиги
      • Подсчет выставленных бит
        • x86
        • x64
      • Вывод
        • Проверка определенного бита (известного на стадии компиляции)
        • Проверка определенного бита (заданного во время исполнения)
        • Установка определенного бита (известного во время компиляции)
        • Установка определенного бита (заданного во время исполнения)
        • Сброс определенного бита (известного во время компиляции)
        • Сброс определенного бита (заданного во время исполнения)
    • Линейный конгруэнтный генератор
      • x86
      • x64
    • Структуры
      • MSVC: Пример SYSTEMTIME
        • Замена структуры массивом
      • Выделяем место для структуры через malloc()
      • Упаковка полей в структуре
        • x86
        • Еще кое-что
      • Вложенные структуры
      • Работа с битовыми полями в структуре
        • Пример CPUID
    • 64-битные значения в 32-битной среде
      • Возврат 64-битного значения
        • x86
      • Передача аргументов, сложение, вычитание
        • x86
      • Умножение, деление
        • x86
      • Сдвиг вправо
        • x86
      • Конвертирование 32-битного значения в 64-битное
        • x86
    • 64 бита
      • x86-64
  • II Важные фундаментальные вещи
    • Представление знака в числах
    • Память
  • III Поиск в коде того что нужно
    • Связь с внешним миром (win32)
      • Часто используемые функции Windows API
      • tracer: Перехват всех функций в отдельном модуле
    • Строки
      • Текстовые строки
        • Си/Си++
        • Borland Delphi
        • Unicode
        • Base64
      • Сообщения об ошибках и отладочные сообщения
      • Подозрительные магические строки
    • Вызовы assert()
    • Константы
      • Magic numbers
        • DHCP
      • Поиск констант
    • Поиск нужных инструкций
    • Подозрительные паттерны кода
      • Инструкции XOR
      • Вручную написанный код на ассемблере
    • Использование magic numbers для трассировки
    • Прочее
      • Общая идея
      • Некоторые паттерны в бинарных файлах
      • Сравнение "снимков" памяти
        • Реестр Windows
        • Блинк-компаратор
  • IV Инструменты
    • Дизассемблер
      • IDA
    • Отладчик
      • tracer
    • Декомпиляторы
    • Прочие инструменты
  • V Что стоит почитать
    • Книги
      • Windows
      • Си/Си++
      • x86 / x86-64
      • ARM
      • Криптография
    • Блоги
      • Windows
    • Прочее
  • Послесловие
    • Вопросы?
  • Список принятых сокращений
  • Глоссарий
  • Предметный указатель
  • Библиография
    No review for this book yet, be the first to review.
      No comment for this book yet, be the first to comment
      You May Also Like
      Also Available On
      Categories
      Curated Lists