Производитель антивирусного ПО Avast открыл исходные тексты декомпилятора машинного кода RetDec, на протяжении семи лет применяемого для анализа исполняемых файлов. Код открыт под лицензией MIT. Поддерживается сборка для Linux и Windows.
Среди областей применения можно отметить проведение обратного инжиниринга закрытого ПО и разбор поражённых вредоносным ПО приложений, с целью понять, что именно делает имеющийся машинный код без наличия исходных текстов и без запуска этого кода. Также декомпиляция может оказаться полезной для оценки различий между двумя разными сборками одной программы или для определения в предоставляемых сборках возможных скрытых подстановок кода, отсутствующих в заявленных исходных текстах.
Продукт позволяет выполнять декомпиляцию независимо от целевой платформы, операционной системы и формата исполняемого файла. В том числе RetDec предоставляет расширенные алгоритмы и эвристические механизмы для декодирования и реконструкции приложений, даже при применении техник запутывания кода и борьбы с декомпиляцией. Машинный код преобразуется в промежуточное представление LLVM, которое затем транслируется в высокоуровневые исходные тексты на псевдоязыках похожих на Си или Python.
Основные возможности RetDec:
- Поддержка форматов файлов ELF, PE, Mach-O, COFF, AR, Intel HEX или просто обработка произвольных кусков машинного кода;
- Поддержка архитектур (только 32-разрядные): Intel x86, ARM, MIPS, PIC32 и PowerPC;
- Статический анализ исполняемых файлов с выводом детальной информации;
- Определение компилятора и упаковщика, использованных для сборки рассматриваемого исполняемого файла;
- Декодирование машинных инструкций;
- Удаление статически связанного библиотечного кода, выявляемого по сигнатурам;
- Извлечение и применение отладочной информации в форматах DWARF и PDB;
- Реконструкция языковых идиом;
- Определение и реконструкция иерархии классов C++ (RTTI, vtable);
- Декодирование символьной информации из бинарных файлов, добавляемой компиляторами C++ (GCC, MSVC, Borland);
- Реконструирование функций, типов и высокоуровневых конструкций;
- Встроенный дизассемблер;
- Формирование вывода в виде читаемых высокоуровневнеых исходных текстов. Поддерживается генерация вывода в виде, похожем на C или Python;
- Генерация графа потока выполнения, графа вызовов и различной статистики;
- Наличие плагина для IDA, выполняющего декомпиляцию файлов непосредственно из дизассемблера.


