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
    • Прочее
  • Послесловие
    • Вопросы?
  • Список принятых сокращений
  • Глоссарий
  • Предметный указатель
  • Библиография
    You May Also Like
    Also Available On
    Categories
    Curated Lists