Реверс инжиниринг: Декомпиляция и дизассемблирование
• Я вспомнил, что у меня есть начатый цикл постов про реверсинг, и решил понемногу его возрождать, сегодня поговорим о таких понятиях как декомпиляция и дизассемблирование.
• Декомпиляция и дизассемблирование — это процессы, связанные с анализом и преобразованием низкоуровневого машинного кода или байт-кода в более высокоуровневое представление, которое может быть понятно человеку.
• Дизассемблирование — это процесс преобразования машинного кода (бинарного исполняемого файла) в ассемблерный код.
• Дизассемблер загружает файл и анализирует его структуру, после чего интерпретирует последовательность байт в машинные инструкции на ассемблере (mov, jmp. rax).
• К примеру из этого:
B8 01 00 00 00
BB 02 00 00 00
01 D8
• Получается это:
mov eax, 1
mov ebx, 2
add eax, ebx
• Инструменты: IDA Pro, Ghidra, Radare2.
• Декомпиляция — это процесс преобразования машинного кода или байт-кода обратно в высокоуровневый исходный код (например, на C, C++ или Java). Декомпиляция сложнее дизассемблирования, так как требует восстановления структуры программы, типов данных, логики и других высокоуровневых конструкций.
• Не всегда полная декомпиляция возможна из-за, к примеру, оптимизаций компилятора или обфускации разработчика.
• Инструменты: Ghidra, IDA Pro, RetDec, Jadx (для Java), dnSpy (для .NET).
• Как-нибудь потом снова вернусь к этому циклу. Удачи!
#Реверсинг
• Поддержать автора монеткой: @v_meshke
