Hex-Rays Decompiler
Hex-Rays Decompiler — это коммерческое программное обеспечение, представляющее собой плагин для дизассемблера IDA Pro, предназначенный для автоматического восстановления исходного кода на языке высокого уровня (декомпиляция) из исполняемых машинных кодов. Разработанный компанией Hex-Rays (Бельгия), продукт позволяет аналитикам по безопасности, реверс-инженерам и исследователям вредоносного ПО получать псевдокод на C-подобном синтаксисе, что значительно упрощает анализ бинарных файлов по сравнению с работой с ассемблерным листингом. Декомпилятор поддерживает архитектуры x86, x86-64, ARM, ARM64, PowerPC, MIPS и другие.
История
Предпосылки создания
До появления Hex-Rays Decompiler реверс-инжиниринг бинарных файлов требовал глубоких знаний ассемблера и ручного анализа. Существовали экспериментальные декомпиляторы (например, Boomerang, REC), но они были нестабильны, не поддерживали современные компиляторы и не могли работать с защищённым кодом. IDA Pro, созданная Ильфаком Гильфановым (Ilfak Guilfanov) в 1990-х годах, стала стандартом для дизассемблирования, но её возможности по декомпиляции были ограничены.
Разработка и выпуск
Компания Hex-Rays была основана в 2005 году Ильфаком Гильфановым. Первая версия декомпилятора для архитектуры x86 была выпущена в 2007 году как плагин для IDA Pro 5.0. Она позволяла получать псевдокод на C, но страдала от ошибок в сложных конструкциях (например, оптимизированных циклах, виртуальных функциях). В 2008 году вышла версия 1.5, улучшившая поддержку структур и исключений.
Эволюция
В 2011 году Hex-Rays выпустила версию для ARM (ARM Decompiler), что расширило область применения на мобильные устройства и встраиваемые системы. В 2014 году добавлена поддержка x86-64. В 2016 году вышла версия 6.8 с улучшенным анализом виртуальных таблиц C++ и контекстно-зависимой декомпиляцией. В 2020 году, с выходом IDA 7.5, декомпилятор получил поддержку архитектуры PowerPC и MIPS, а также интеграцию с облачными сервисами Hex-Rays Cloud. В 2023 году версия 8.0 добавила поддержку ARM64 и улучшенную обработку обфусцированного кода, включая анализ с использованием машинного обучения.
Архитектура и принцип работы
Входные данные
Hex-Rays Decompiler работает с бинарными файлами, уже загруженными в IDA Pro. Он использует результаты дизассемблирования: граф потока управления (CFG), типы данных, распознанные функции и таблицы символов. Декомпилятор не требует исходного кода или отладочной информации.
Этапы декомпиляции
- Анализ потока управления — строится CFG, выделяются базовые блоки и циклы.
- Восстановление типов — определяются типы переменных (int, char, указатели) на основе контекста использования (арифметические операции, обращения к памяти).
- Локализация переменных — стековые и регистровые переменные отображаются в локальные переменные C-функции.
- Генерация псевдокода — создаётся C-подобный код с использованием операторов, циклов, условных переходов и вызовов функций.
- Оптимизация — удаляются избыточные операции, упрощаются выражения, восстанавливаются структуры данных (например, массивы, структуры, union).
Выходные данные
Результатом является псевдокод на C, который может быть отредактирован пользователем. Декомпилятор не восстанавливает точный исходный код (например, имена переменных, комментарии, стиль), но даёт функционально эквивалентное представление. Псевдокод может содержать пометки о неопределённых типах, подозрительных конструкциях (например, переполнении буфера) и ошибках анализа.
Классификация и версии
По архитектурам
- x86 (32-bit) — первая версия, поддерживает все основные компиляторы (MSVC, GCC, Intel C++).
- x86-64 (64-bit) — добавлена в 2014 году, поддерживает расширенные регистры и вызовы системных функций.
- ARM (32-bit) — выпущена в 2011 году, поддерживает Thumb/Thumb-2, NEON, VFP.
- ARM64 (AArch64) — добавлена в 2023 году, поддерживает вызовы ABI и векторные инструкции.
- PowerPC — добавлена в 2020 году, поддерживает 32- и 64-битные версии, включая встраиваемые системы.
- MIPS — добавлена в 2020 году, поддерживает big-endian и little-endian.
По лицензированию
- Hex-Rays Decompiler — платный плагин для IDA Pro. Лицензия приобретается отдельно от IDA Pro (стоимость на 2024 год — от 2000 до 5000 долларов США в зависимости от архитектуры и поддержки).
- Hex-Rays Cloud — облачная версия, выпущенная в 2020 году, позволяет декомпилировать файлы без установки IDA Pro, но с ограничениями по размеру и функциональности.
- Бесплатные альтернативы — существуют открытые декомпиляторы (например, Ghidra от NSA, RetDec), но они уступают Hex-Rays в точности, скорости и поддержке сложных конструкций.
Применение
Реверс-инжиниринг
Hex-Rays Decompiler используется для анализа закрытого программного обеспечения: драйверов, библиотек, прошивок, игр. Он позволяет понять алгоритмы, найти уязвимости (например, переполнение буфера, SQL-инъекции) и восстановить логику работы.
Анализ вредоносного ПО
Исследователи вредоносных программ (malware analysts) применяют декомпилятор для изучения троянов, шифровальщиков, бэкдоров. Псевдокод упрощает выявление командных серверов, алгоритмов шифрования и механизмов персистентности.
Патентный анализ
В судебных разбирательствах по патентам на программное обеспечение декомпилятор помогает восстановить функциональность запатентованного алгоритма, если доступен только бинарный файл.
Обучение
Hex-Rays Decompiler используется в университетских курсах по реверс-инжинирингу и кибербезопасности для демонстрации принципов декомпиляции и анализа бинарного кода.
Критика и ограничения
Точность
Декомпилятор не всегда корректно восстанавливает сложные оптимизации компилятора: инлайн-функции, векторизацию, развёртывание циклов. Псевдокод может содержать избыточные переменные, неверные типы или пропущенные вызовы.
Обработка обфускации
Hex-Rays Decompiler плохо справляется с кодом, защищённым обфускаторами (например, VMProtect, Themida). В таких случаях он может выдать нечитаемый или неполный псевдокод, требующий ручной доработки.
Зависимость от IDA Pro
Плагин работает только в составе IDA Pro, что делает его недоступным для пользователей других дизассемблеров (например, Ghidra, Binary Ninja). Это также увеличивает стоимость лицензии (IDA Pro стоит от 500 до 2000 долларов).
Юридические аспекты
Декомпиляция может нарушать лицензионные соглашения (EULA) и авторские права, если применяется к коммерческому ПО без разрешения. В России декомпиляция допускается только для целей совместимости или безопасности (ст. 1280 ГК РФ), но на практике это часто оспаривается.
Интересные факты
- Hex-Rays Decompiler был использован для анализа уязвимости Heartbleed (2014) в OpenSSL, что позволило быстро понять механизм атаки.
- В 2017 году компания Hex-Rays была приобретена фирмой Synopsys, но сохранила бренд и независимость разработки.
- Декомпилятор поддерживает декомпиляцию кода, написанного на C++, включая виртуальные функции, наследование и исключения, но не восстанавливает шаблоны (templates) и пространства имён.
- С 2022 года Hex-Rays предлагает бесплатную пробную версию на 30 дней для архитектур x86 и ARM.
Источники
- Guilfanov, I. «IDA Pro: The Ultimate Disassembler». Hex-Rays, 2007.
- Hex-Rays. «Hex-Rays Decompiler User Manual». Версия 8.0, 2023.
- Eilam, E. «Reversing: Secrets of Reverse Engineering». Wiley, 2005.
- «Hex-Rays Decompiler: A Technical Overview». Synopsys, 2020.
- Гражданский кодекс РФ, статья 1280.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →


