Дизассамблерирование x86/Введение

Шаблон:Дизассамблерирование x86

О чем эта книга?

править

В этой книге рассказывается о разборке(дизассамблерировании) машинного кода x86 в человеко-понятный ассамблер, и декомпиляции ассамблерного кода x86 в код C или C++. Некоторые затронутые темы будут распространены для всех компьютерных архитектур, а не только для x86-совместимых машин.

О чем будет рассказываться в этой книге?

править

Эта книга позволяет изучить разборку(дизассамблерирование) и декомпиляцию машинного x86 и ассамблерного. Мы рассмотрим способ создания программ с использованием ассамблеров и компиляторов и рассмотрим способ создания кода сборки из исходного кода C или C ++. Используя эти знания, мы попытаемся изменить процесс. Изучая общие структуры, такие как данные и структуры управления, мы можем найти шаблоны, которые позволяют нам быстро и быстро декомпилировать программы.

Для кого эта книга?

править

Эта книга предназначена для читателей с опытом программирования в x86 Assembly и C или C++. Эта книга не предназначена для обучения программированию на ассамблере, программированию на C или C++ или теории компилятора / ассамблера.

Что нужно для понимания?

править

Читатель должен иметь понимание следующих книг x86 Ассамблер, Язык Си в примерах и, возможно, Си++. Эта книга призвана повысить понимание читателем взаимосвязи между машинным кодом x86, языком сборки x86 и языком программирования C. Если вы не слишком знакомы с этими темами, вы можете перечитать некоторые из вышеупомянутых книг, прежде чем продолжить.

Что такое дизассамблерирование?

править

Компьютерные программы написаны изначально в форме, пригодной для восприятия человеком, такой как язык ассамблера или язык более высокого уровня(C, C++). Затем эти программы компилируются в двоичный формат, называемый «машинным кодом». Этот двоичный формат не может быть легко читаемым или понятным людям. Многие программы, такие как вредоносное ПО, коммерческие коммерческие программы или очень старые устаревшие программы, могут не иметь исходного кода, доступного вам.

Программы часто выполняют задачи, которые необходимо дублировать, или их необходимо использовать для взаимодействия с другими программами. Без исходного кода и без соответствующей документации эти задачи могут быть сложными. В этой книге описываются инструменты и методы для попытки конвертировать исходный машинный код исполняемого файла в эквивалентный код на языке ассамблера и языках высокого уровня C и C ++. Благодаря высокоуровневому коду для выполнения конкретной задачи становится возможным несколько вещей:

  1. Программы могут быть перенесены на другие компьютерные платформы, путем компиляции исходного кода в другой среде.
  2. Алгоритм используемые программой может быть предопределен. Это позволяет другим программам использовать один и тот же алгоритм или обновленные версии программы, которые необходимо переписать, без необходимости отслеживать старые копии исходного кода. todo: Тут немного каша, ибо формулировка запутанная
  3. Защитные дыры и уязвимости могут быть идентифицированы и исправлены пользователями без необходимости доступа к исходному исходному коду.
  4. Новые интерфейсы могут быть реализованы для старых программ. Новые компоненты могут быть построены поверх старых компонентов, чтобы ускорить время разработки и сократить необходимость переписывать большие объемы кода.
  5. Мы можем понять, что делает вредоносное ПО. Мы надеемся, что это приведет нас к выяснению, как блокировать его вредные последствия. К сожалению, некоторые авторы вредоносных программ используют самомодифицирующие методы кода (полиморфный камуфляж, шифрование XOR, скремблирование)[1] что затрудняет даже обнаружение этого вредоносного ПО, уже не говоря о его разборке.

Эта книга имеет большое количество практических применений. Одним из положительных ее побочных эффектов является то, что читатель получит лучшее представление о связи между машинным кодом, языком ассемблера и языками высокого уровня. Хорошее знание этих тем поможет программистам писатьболее эффективный и безопасный код.