Занопить

eXeL@B DVD

Материал из Справочник исследователя программ

Перейти к: навигация, поиск

Транслитерационное произношение инструкции NOP образует корень глагола, обозначающего эту операцию.

Для удаления кода в уже откомпилированной программе применяется замена последовательности инструкций на серию инструкций NOP.

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

Байт - минимальный размер ячейки памяти имеющей адрес. В PC инструкция может иметь размер от 1 до 15 байт.

Инструкция NOP(сокращение от no operand) ничего не делает (так и написано в официальной документации: "This is a do nothing instruction") и имеет размер 1 байт, что позволяет построить фрагмент ничего не делающего кода любой длины.

Следовательно, чтоб "занопить" фрагмент кода необходимо определить его начальный адрес и длину, после чего записать туда серию инструкций NOP той-же длинны.


Всмысле необходимое количество команд nop? Почему просто не заменить одну ненужную команду, одной командой nop?

Команда, которую вам нужно отключить, в машинных кодах может занимать более одного байта (обычно так и бывает). А команда nop в машинном коде выглядит как один байт - 90h. Если заменить команду, машинный код которой занимает больше чем 1 байт, на 1 команду nop, то после команды nop (байта 90h) считаются следующие байты для обработки и выполнения, но эти байты будут просто остатками от заменяемой команды, поэтому их выполнение приведет к ошибке в программе. Поэтому, если нужно сделать так, чтобы какая-то команда не выполнялась, то ее надо заменить на столько команд nop, сколько байтов занимает эта команда. Например команда call 00450000 занимает 5 байтов, соответсвенно ее надо будет заменить на последовательность из 5 команд nop.