Тонкости дизассемблирования :: Kaspersky Kris
Страница:
19 из 21
Этот вывод мы делаем, только исходя из смыслового значения регистров, полностью игнорируя код команды. К сожалению, этого нельзя сказать о следующем байте — 0ACh. Это код операции LODSB , и его придется просто запомнить.
0x02 — это код ADD , а следующий за ним байт — это AH , AL (не буду больше повторять, как это было получено).
0xE2 — это код операции LOOP , а следующий за ним байт — это знаковое относительное смещение перехода.
Чтобы превратить его в знаковое целое, необходимо дополнить его до нуля, (операция NEG , которую большинство калькуляторов не поддерживают). Тот же самый результат мы получим, если отнимем от 0100h указанное значение (в том случае, если разговор идет о байте). В нашем примере это равно пяти. Отсчитаем пять байт влево от начала следующей команды . Если все сделать правильно, то вычисленный переход должен указывать на байт 0ACh (команда LODSB ), впрочем, последнее было ясно и без вычислений, ибо других вариантов, по-видимому, не существует.
Почему? Да просто данная процедура подсчета контрольной суммы (или точнее хеш-суммы) очень типична. Впрочем, не стоит всегда полагаться на свою интуицию и «угадывать» код, хотя это все же сильно ускоряет анализ.
С другой стороны, хакер без интуиции — это не хакер. Давайте применим нашу интуицию, чтобы «вычислить», что представляет собой код следующей команды. Вспомним, что 0B4h (10110100b) — это MOV AH , imm 8 .
0BEh очень близко к этому значению, следовательно, это операция MOV. Осталось определить регистр-приемник.
|< Пред. 17 18 19 20 21 След. >|