Reverse Engineering для начинающих (LITE-версия!)
Dennis Yurichev
Computers & Technology
Reverse Engineering для начинающих (LITE-версия!)
Free
Description
Contents
Reviews


У термина «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.
Language
English
ISBN
4365786172
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
Прочее
Послесловие
Вопросы?
Список принятых сокращений
Глоссарий
Предметный указатель
Библиография
The book hasn't received reviews yet.