
RetDec — это перенацеливаемый декомпилятор машинного кода на основе LLVM.
Предупреждение
Проект RetDec в настоящее время находится в режиме ограниченного обслуживания из-за нехватки ресурсов:
- Pull Request-ы приветствуются. Они рассматриваются в приоритетном порядке, если это возможно без задержек.
- На Issues реагируют с задержками до одного квартала. Issues активно не решаются, если только они не связаны с базовым обслуживанием проекта.
- Базовое обслуживание проекта продолжается.
- Ведется только очень ограниченная разработка.
RetDec — это перенацеливаемый декомпилятор машинного кода на основе LLVM.
Декомпилятор не ограничен какой-либо конкретной целевой архитектурой, операционной системой или форматом исполняемых файлов:
Возможности:
Для получения дополнительной информации ознакомьтесь с нашими:
Существует два способа получения и установки RetDec:
retdec/share/retdec/README.md после распаковки.В настоящее время мы поддерживаем Windows (7 или новее), Linux, macOS и (экспериментально) FreeBSD. Установленная версия RetDec требует примерно от 5 до 6 ГБ свободного дискового пространства.
Пожалуйста, убедитесь, что вы читаете инструкции, соответствующие используемой версии RetDec. Если сомневаетесь, обратитесь к файлу retdec/share/retdec/README.md в установке.
После установки RetDec установите Microsoft Visual C++ Redistributable для Visual Studio 2017.
Установите следующие программы:
Для декомпиляции бинарного файла с именем test.exe выполните:
$RETDEC_INSTALL_DIR\bin\retdec-decompiler.exe test.exe
Для получения дополнительной информации запустите retdec-decompiler.exe с ключом --help.
После установки RetDec установите следующие пакеты через менеджер пакетов вашего дистрибутива:
Для декомпиляции бинарного файла с именем test.exe выполните:
$RETDEC_INSTALL_DIR/bin/retdec-decompiler test.exe
Для получения дополнительной информации запустите retdec-decompiler с ключом --help.
После установки RetDec установите следующие пакеты:
Для декомпиляции бинарного файла с именем test.exe выполните:
$RETDEC_INSTALL_DIR/bin/retdec-decompiler test.exe
Для получения дополнительной информации запустите retdec-decompiler с ключом --help.
В настоящее время нет предварительно собранных пакетов "ports" для FreeBSD. Вам придется собрать и установить декомпилятор самостоятельно. Процесс описан ниже.
Для декомпиляции бинарного файла с именем test.exe выполните:
$RETDEC_INSTALL_DIR/bin/retdec-decompiler test.exe
Для получения дополнительной информации запустите retdec-decompiler с ключом --help.
Вы можете легко использовать различные библиотеки RetDec в своих проектах — если они собираются с помощью CMake. Установка RetDec содержит все необходимые заголовочные файлы, библиотеки и сценарии CMake.
Если вы установили RetDec в стандартное место установки вашей системы (например, /usr, /usr/local), все, что вам нужно сделать для использования его компонентов:```cmake
find_package(retdec 5.0 REQUIRED
COMPONENTS
[...]
)
target_link_libraries(your-project
PUBLIC
retdec::
[...]
)
Если вы не установили RetDec в место, где он может быть автоматически обнаружен, вам нужно помочь CMake найти его перед использованием `find_package()`. Обычно есть два способа сделать это (выберите и используйте только один):
1. Добавьте каталог установки RetDec в [`CMAKE_PREFIX_PATH`](https://cmake.org/cmake/help/latest/variable/CMAKE_PREFIX_PATH.html):
```cmake
list(APPEND CMAKE_PREFIX_PATH ${RETDEC_INSTALL_DIR})
```
2. Установите путь к установленным CMake-скриптам RetDec в `retdec_DIR`:
```cmake
set(retdec_DIR ${RETDEC_INSTALL_DIR}/share/retdec/cmake)
```
Смотрите страницу вики [Repository Overview](https://github.com/avast/retdec/wiki/Repository-Overview) для списка доступных компонентов RetDec, или [retdec-build-system-tests](https://github.com/avast/retdec-build-system-tests) для демонстраций по их использованию.
## Сборка и установка
В этом разделе описывается локальная сборка и установка RetDec. Инструкции для Docker приведены в следующем разделе.
### Требования
#### Linux
* Компилятор C++ и стандартная библиотека C++, поддерживающие C++17 (например, GCC >= 7)
* [CMake](https://cmake.org/) (версия >= 3.6)
* [Git](https://git-scm.com/)
* [OpenSSL](https://www.openssl.org/) (версия >= 1.1.1)
* [Python](https://www.python.org/) (версия >= 3.4)
* [autotools](https://en.wikipedia.org/wiki/GNU_Build_System) ([autoconf](https://www.gnu.org/software/autoconf/autoconf.html), [automake](https://www.gnu.org/software/automake/), и [libtool](https://www.gnu.org/software/libtool/))
* [pkg-config](https://www.freedesktop.org/wiki/Software/pkg-config/)
* [m4](https://www.gnu.org/software/m4/m4.html)
* [zlib](http://zlib.net/)
* Опционально: [Doxygen](http://www.stack.nl/~dimitri/doxygen/) и [Graphviz](http://www.graphviz.org/) для генерации документации API
В дистрибутивах на основе Debian (например, Ubuntu) необходимые пакеты можно установить с помощью `apt-get`:```sh
sudo apt-get install build-essential cmake git openssl libssl-dev python3 autoconf automake libtool pkg-config m4 zlib1g-dev upx doxygen graphviz
В дистрибутивах на основе RPM (например, Fedora), необходимые пакеты можно установить с помощью dnf:```sh
sudo dnf install gcc gcc-c++ cmake make git openssl openssl-devel python3 autoconf automake libtool pkg-config m4 zlib-devel upx doxygen graphviz
В Arch Linux необходимые пакеты можно установить с помощью `pacman`:```sh
sudo pacman --needed -S base-devel cmake git openssl python3 autoconf automake libtool pkg-config m4 zlib upx doxygen graphviz
Пакеты желательно устанавливать через Homebrew.
Пакеты должны устанавливаться через репозиторий предварительно скомпилированных пакетов FreeBSD с помощью команды pkg или собираться с нуля с использованием метода базы данных ports.
pkg: метод pkg из руководства
pkg install cmake python37 git autotools
ИЛИports: метод ports из руководства
portsnap fetchportsnap extractcmake нужно выполнить
whereis cmakecd /usr/ports/devel/cmakemake install cleanПримечание: Хотя RetDec теперь поддерживает системную установку (#94), если вы не используете пакетный менеджер вашего дистрибутива для его установки, мы рекомендуем устанавливать RetDec локально в выделенный каталог. Причина в том, что удаление будет проще — потребуется удалить только один каталог. Чтобы выполнить локальную установку, запустите cmake с параметром -DCMAKE_INSTALL_PREFIX=<путь>, где <путь> — это каталог, в который будет установлен RetDec (например, $HOME/projects/retdec-install в Linux и macOS, или C:\projects\retdec-install в Windows).
git clone https://github.com/avast/retdeccd retdecmkdir build && cd buildcmake .. -DCMAKE_INSTALL_PREFIX=<путь>make -jN (N — количество процессов для параллельной сборки; обычно количество ядер + 1 даёт наименьшее время компиляции)make installcmd.exe)cd retdecmkdir build && cd buildcmake .. -DCMAKE_INSTALL_PREFIX=<путь> -G<генератор>cmake --build . --config Release -- -mВы должны передать следующие параметры в cmake:
-DCMAKE_INSTALL_PREFIX=<путь> для установки пути установки в <путь>. Заключите путь в кавычки, если используете обратную косую черту в Windows (например, -DCMAKE_INSTALL_PREFIX="C:\retdec").-G<генератор>. Для 32-битной сборки с Visual Studio 2017 используйте -G"Visual Studio 15 2017", для 64-битной — -G"Visual Studio 15 2017 Win64". Можно использовать более поздние версии Visual Studio.Вы можете передать следующие дополнительные параметры в cmake:
-DRETDEC_DOC=ON для сборки с документацией API (требует Doxygen и Graphviz, отключено по умолчанию).-DRETDEC_TESTS=ON для сборки с тестами (отключено по умолчанию).-DRETDEC_DEV_TOOLS=ON для сборки с инструментами разработки (отключено по умолчанию).-DRETDEC_COMPILE_YARA=OFF для отключения компиляции правил YARA на этапе установки (включено по умолчанию).-DCMAKE_BUILD_TYPE=Debug для сборки с отладочной информацией, что полезно при разработке. По умолчанию проект собирается в режиме Release. В Windows это не действует, но того же можно добиться, запустив cmake --build . с параметром --config Debug.-D<зависимость>_LOCAL_DIR=<путь>, где <зависимость> — из {CAPSTONE, GOOGLETEST, KEYSTONE, LLVM, YARA, YARAMOD} (например, -DCAPSTONE_LOCAL_DIR=<путь>), чтобы использовать локальный клон репозитория по пути для зависимости RetDec вместо загрузки новой копии во время сборки. Можно использовать несколько таких параметров одновременно.Поддержка Docker осуществляется сообществом. Если что-то не работает или у вас есть предложения по улучшению, откройте вопрос или PR.
Сборка в Docker не требует установки необходимых библиотек локально. Это хороший вариант для ознакомления с RetDec без настройки всей цепочки инструментов сборки.
Чтобы создать образ Docker RetDec, выполните``` docker build -t retdec - < Dockerfile
Это собирает образ из ветки master данного репозитория.
Для сборки образа с использованием локальной копии репозитория используйте Dockerfile для разработки, `Dockerfile.dev`:```
docker build -t retdec:dev . -f Dockerfile.dev
Если ваш uid не равен 1000, убедитесь, что каталог, содержащий ваши входные бинарные файлы, доступен для RetDec:```
chmod 0777 /path/to/local/directory
Теперь вы можете запустить декомпилятор внутри контейнера:```
docker run --rm -v /path/to/local/directory:/destination retdec retdec-decompiler /destination/binary
Примечание: Не изменяйте часть /destination. Вам нужно изменить только /path/to/local/directory. Выходные файлы будут сгенерированы в /path/to/local/directory.
Мы генерируем актуальные пакеты RetDec из последнего коммита в ветке master двумя способами:
Сборки в основном предназначены для разработчиков RetDec, участников и других людей, экспериментирующих с продуктом (например, для проверки, существует ли проблема из официального релиза в текущей версии master).
Вы можете использовать их по своему усмотрению, но имейте в виду, что нет гарантии, что они будут работать в вашей системе (особенно версия для Linux), и возможны регрессии. Чтобы получить стабильную версию RetDec, загрузите последний официальный предварительно собранный пакет или соберите последний тег версии RetDec.
TeamCity
Github Actions
Вы можете найти сборки для macOS, Linux и Windows в последнем запуске рабочего процесса CI RetDec.
Ознакомьтесь с документацией проекта для получения актуальной справки по программному обеспечению, сгенерированной Doxygen и соответствующей последнему коммиту в ветке master.
.dsm).Copyright (c) 2017 Avast Software, лицензировано по лицензии MIT. Подробности см. в файле LICENSE.
RetDec включает модифицированную библиотеку PeLib. Новые модули, добавленные Avast Software, лицензируются по лицензии MIT. Исходные источники лицензированы по следующей лицензии:
LICENSE-PELIB.RetDec использует сторонние библиотеки или другие ресурсы, перечисленные вместе с их лицензиями в файле LICENSE-THIRD-PARTY.
См. рекомендации по участию в разработке RetDec.
Это программное обеспечение было поддержано исследовательским финансированием TACR (Technology Agency of the Czech Republic), программа ALFA № TA01010667.
cmake --build . --config Release --target installretdec.sln, сгенерированный cmake, в Visual Studio IDEcd retdecmkdir build && cd buildcmake .. -DCMAKE_INSTALL_PREFIX=<путь>make -jN (N — количество процессов для параллельной сборки; обычно количество ядер + 1 даёт наименьшее время компиляции)make installsudo pkg install git cmakegit clone https://github.com/avast/retdeccd retdecmkdir build && cd build# FreeBSD (и другие BSD) нуждаются в cmake, python3, git, autotools. OpenSSL предустановлен в ОС, но проверьте его версию.
# Более новые версии могут быть доступны для каждого из пакетов.
# Посмотрите, что установлено:
sudo pkg info cmake python37 autotools
# Установите/обновите их:
sudo pkg install cmake python37 autotools
cmake .. -DCMAKE_INSTALL_PREFIX=<путь>make -jN (N — количество процессов для параллельной сборки; обычно количество ядер + 1 даёт наименьшее время компиляции)make install<путь>-DRETDEC_ENABLE_<компонент>=ON для сборки только указанного(ых) компонента(ов) (можно использовать несколько таких параметров) и его (их) зависимостей. По умолчанию собираются все компоненты. Если хотя бы один компонент включён через этот механизм, все остальные компоненты, которые не были явно включены (и не нужны как зависимости включённых компонентов), не собираются. См. cmake/options.cmake для списка всех доступных опций компонентов.
-DRETDEC_ENABLE_ALL=ON можно использовать для (повторного) включения всех компонентов.-DRETDEC_ENABLE=<разделённый запятыми список компонентов> можно использовать вместо -DRETDEC_ENABLE_<компонент>=ON (например, -DRETDEC_ENABLE=fileformat,loader,ctypesparser эквивалентно -DRETDEC_ENABLE_FILEFORMAT=ON -DRETDEC_ENABLE_LOADER=ON -DRETDEC_ENABLE_CTYPESPARSER=ON).