Тонкости дизассемблирования   ::   Kaspersky Kris

Страница: 20 из 21

Рассмотрим обе команды в двоичном виде:

Как уже говорилось выше, младшие три бита — это код регистра. Однако, его невозможно однозначно определить без утончения размера операнда. Обратим внимание на третий (считая от нуля) бит. Он равен нулю для AH и единице в нашем случае. Рискнем предположить, что это и есть бит размера операнда, хотя этого явно и не уточняет Intel, но вытекает из самой архитектуры команд и устройства декодера микропроцессора.

Обратим внимание, что это, строго говоря, частный случай, и все могло оказаться иначе. Так, например, четвертый справа бит по аналогии должен быть флагом направления или знакового расширения, но увы — таковым в данном случае не является. Четыре левые бита это код операции ' mov reg , imm '. Запомнить его легко — это «13» в восьмеричном представлении.

Итак, 0BEh 03Bh 001h — это MOV SI ,013 Bh . Скорее всего, 013bh — это смещение, и за этой командой последует расшифровщик очередного фрагмента кода. А может быть и нет — это действительно смелое предположение. Однако, байты 030h 024h это подтверждают. Хакеры обычно так часто сталкиваются с функций xor , что чисто механически запоминают значение ее кода.

Не трудно будет установить, что эта последовательность дизассемблируется как XOR [ SI ], AH . Следующий байт 046h уже нетрудно «угадать» — INC SI . Кстати, посмотрим, что же интересного в этом коде:

Третий бит равен нулю! Выходит команда должна выглядеть как INC AH ! (Что кстати, выглядит непротиворечиво смысле дешифровщика). Однако, все же это INC SI .

|< Пред. 17 18 19 20 21 След. >|

Java книги

Контакты: [email protected]