Можно ли использовать шестнадцатеричный редактор для редактирования инструкций в исполняемом двоичном файле?
Если у меня есть двоичный исполняемый файл, содержащий скомпилированный код C, могу ли я использовать шестнадцатеричный редактор для редактирования этого двоичного файла и изменения определенной инструкции в другую, такую как nop
или же jmp
? Как узнать смещение инструкции, которую я хочу изменить?
Да, это для образовательных целей.
2 ответа
ОБНОВЛЕНИЕ: Извините, пропустил тег Mach-O. Этот список действительно для стандартного x86, а не для Mach-O специально. Тем не менее, это хороший список для стандартного кода x86:)
Конечно, но лучше использовать такой инструмент, как OllyDbg, SoftICE или Immunity Debugger (вариант Olly, разработанный для реверс-инжиниринга). Изучение x86 asm на самом деле не так сложно, как это делают большинство людей. Вы можете узнать много о сборке Win32 с http://win32assembly.online.fr/
Вы можете получить список кодов операций по адресу http://ref.x86asm.net/ если вы действительно настроены на редактирование с помощью шестнадцатеричного редактора.
Больше отличных инструментов для такого рода вещей:
- PE Info (бесплатный редактор заголовков EXE)
- CFF Explorer (бесплатный редактор / перестройщик заголовков EXE. Больше возможностей, чем PE Info)
- PE Explorer (коммерческий EXE-заголовок и редактор ресурсов)
- TrID (идентификатор типа файла)
- PEID (идентификатор исполняемого файла / упаковщика)
- IDA Pro (статический анализ исполняемых файлов)
- procmon (анализ деятельности)
- procxp (как taskmgr, но лучше и глубже)
- ildasm (дизассемблер CIL)
- ilasm (CIL ассемблер)
- RedGate Reflector (инструмент обратного проектирования.NET)
- .NET Reflector (инструмент обратного проектирования.NET)
- XVI32 (шестнадцатеричный редактор)
- Hex Workshop (редактор Hex / редактор структуры)
Инструмент де-факто для выполнения этой и всех других форм бинарных манипуляций - Interactive Disassembler (более известный как IDA, поставляется с отличной бесплатной пробной версией!), Помните, что вам придется перебазировать оставшуюся часть бинарного файла, если вы измените размер инструкция + операнд (IE, изменяющий инструкцию x86 nop на инструкцию jmp с операндами в Mach-O, скорее всего, приведет к тому, что двоичный файл не будет работать, если вы не выполните перебазирование, для которого, конечно, в IDA есть удивительная утилита).
Шестнадцатеричный редактор не сможет сделать то же самое (по крайней мере, легко).