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
      App store smallGoogle play small
      Categories
      Curated Lists
      • Pattern Recognition and Machine Learning (Information Science and Statistics)
        by Christopher M. Bishop
        Data mining
        by I. H. Witten
        The Elements of Statistical Learning: Data Mining, Inference, and Prediction
        by Various
        See more...
      • CK-12 Chemistry
        by Various
        Concept Development Studies in Chemistry
        by John Hutchinson
        An Introduction to Chemistry - Atoms First
        by Mark Bishop
        See more...
      • Microsoft Word - How to Use Advanced Algebra II.doc
        by Jonathan Emmons
        Advanced Algebra II: Activities and Homework
        by Kenny Felder
        de2de
        by
        See more...
      • The Sun Who Lost His Way
        by
        Tania is a Detective
        by Kanika G
        Firenze_s-Light
        by
        See more...
      • Java 3D Programming
        by Daniel Selman
        The Java EE 6 Tutorial
        by Oracle Corporation
        JavaKid811
        by
        See more...