Шестнадцатеричная сборка редактора команд?
Я играю с реверс-инжинирингом программного обеспечения. У меня есть базовый опыт программирования, но только с языками верхнего уровня, такими как Java и Python.
Я разобрал некоторые exe-файлы с IDA pro, чтобы поэкспериментировать со структурой потока, и использую Hex Workshop для редактирования шестнадцатеричного кода и перекомпиляции. Итак, я отключил всю эту механику и могу успешно создать отредактированный exe-файл.
Есть ли хорошие руководства для того, что команды и как они работают? Я не мог найти что-нибудь с моим Google-фу. Я даже не уверен, как они называются. Это настолько отличается от того кодирования, к которому я привык, что я действительно пытаюсь разобрать его в своей голове.
Я говорю о jz, jnz, eax, lea, mov, cmp и так далее. Я могу найти несколько разбросанных ссылок на отдельные команды, которые несколько полезны, но недостаточны для выполнения полезных задач. Я ищу хороший учебник по всей теме. Что-то, что я могу вспахать и дать общее представление о том, что они делают, и как изменить их, чтобы они делали то, что я хочу.
Благодарю.
2 ответа
jz
, mov
и т. д. Это так называемые инструкции, а не команды (кроме eax
, который является регистром).
Байты, которые вы редактируете, называются кодами операций, и это то, что процессор извлекает из памяти и декодирует в инструкции.
Пример: когда вы видите
.text:00428E4A 8B F0 mov esi, eax
Правильный способ описать эту строку будет следующим: По адресу 0x00428E4A находятся коды операций 8B F0. Эти коды операций декодируются в mov
инструкция с исходным операндом, являющимся eax
регистр и целевой операнд, являющийся esi
регистр.
Неизбежным источником точной информации здесь являются Руководства для разработчиков программного обеспечения для архитектуры Intel® 64 и IA-32. В частности, вы хотите Том 2, Справочник по набору инструкций, AZ.
Вам нужно определить процессор, для которого был скомпилирован EXE. Тогда вы гуглите на языке ассемблера этого процессора. В маловероятном случае, если вы не найдете его, вы ищете таблицы данных процессора.