Категория: Assembler / Reverse engineering

Язык Assembler (ассемблера) является самым старым языком программирования из всех существующих. Он наиболее близок к машинному языку — родному для компьютеров. Он обеспечивает прямой доступ к компьютерному оборудованию, требуя от вас глубинного понимания архитектуры и принципов работы вашего компьютера и системы. Reverse-engineering (обратная разработка) — процесс восстановления исходного кода из бинарных данных и возможно его последующий анализ с целью понять принципы работы программы. В некоторых случаях это является нарушением авторского права. Даже если обратная разработка выполняется только с целью найти недокументированные возможности исследуемого кода, или поиска в нем ошибок.

Язык Ассемблер

Assembler— язык низкого уровня, как правило, специфичный для конкретной архитектуры процессора. К данной категории мы относим статьи, содержащие исходный код с инструкциями на Ассемблере, описывающие низкоуровневое устройство компонентов системы или относящиеся к области обратной разработки (reverse engineering). Предполагается, что читатель обладает базовыми знаниями в области программирования с использованием команд процессора.

Построение

В большинстве случаев речь идет об инструкциях процессоров семейства x86. Если к статье прилагается исходный код, его можно построить, используя masm 6.15.

Исправление ошибки в поддержке асинхронного COM при запуске приложения

В статье Асинхронный COM под Windows Vista и Windows 7 была описана ошибка, которая появилась при выходе указанных операционных систем. Для разрабатываемого (а на тот момент уже и продававшегося) программного обеспечения надежная работа асинхронного COM была очень важна. Обращения в Microsoft с просьбой внести исправления ничем не закончились. Оставался только один вариант — самостоятельное исправление

Перехват вызова функций заменой байтов заголовка инструкциями JMP или CALL

В одной из предыдущих статей я описывал метод перехвата функций, используя таблицу импорта. Данный метод более универсален, так как дает возможность осуществлять перехват вызова функций, если известен только их адрес в памяти (ограничения приведены ниже). Однако он и более сложен, поскольку, как дальше будет показано, требует от кода модифицирования заголовка функции навыков дизассемблирования. Суть метода в

Установка хука на вызов функции через таблицу импорта

При написании крупных проектов случаются ситуации, когда необходимо подправить работу одного или более компонентов сторонних производителей (например, библиотек в составе приложения). В этих случаях исходный код редко бывает доступен и приходится использовать подходы из арсенала хакера. В данной статье я собираюсь рассмотреть один из наиболее простых подходов в реализации перехвата вызова функций — перехват вызовов

Динамическая модификация кода — самомодифицирующиеся программы

Вероятно, многие считают, что самомодифицирующийся код (динамическая модификация кода программы) нужен только вирусам и троянам для того, чтобы затруднить распознавание антивирусными программами. Однако это далеко не так, и, как показывает практика, вынуждает нас этим заниматься сама великая и могучая корпорация — Microsoft. Почему? — спросите Вы. Да очень просто. Каждая новая операционная система делает доступным