警告
RetDec 项目目前由于资源不足处于有限维护模式:
- 欢迎提交 Pull Requests。它们会被优先审查,尽可能不延迟。
- 对问题的响应可能会有最多一个季度的延迟。除非与基本项目维护相关,否则不会积极解决问题。
- 基本项目维护仍在继续。
- 仅进行非常有限的开发。
RetDec 是一个基于 LLVM 的可重定向机器码反编译器。
反编译器不限于任何特定的目标架构、操作系统或可执行文件格式:
特性:
更多信息,请查看我们的
有两种获取和安装 RetDec 的方式:
retdec/share/retdec/README.md 文件中的"使用"部分的说明进行操作。我们目前支持 Windows(7 或更高版本)、Linux、macOS 和(实验性)FreeBSD。安装后的 RetDec 版本大约需要 5 到 6 GB 的可用磁盘空间。
请确保您阅读的说明与所使用的 RetDec 版本相对应。如果不确定,请参考安装目录中的 retdec/share/retdec/README.md 文件。
在安装 RetDec 后,安装 Microsoft Visual C++ Redistributable for Visual Studio 2017。
安装以下程序:
要反编译名为 test.exe 的二进制文件,运行:
$RETDEC_INSTALL_DIR\bin\retdec-decompiler.exe test.exe
更多信息,请使用 --help 参数运行 retdec-decompiler.exe。
在安装 RetDec 后,通过您的发行版的包管理器安装以下软件包:
要反编译名为 test.exe 的二进制文件,运行:
$RETDEC_INSTALL_DIR/bin/retdec-decompiler test.exe
更多信息,请使用 --help 参数运行 retdec-decompiler。
在安装 RetDec 后,安装以下软件包:
要反编译名为 test.exe 的二进制文件,运行:
$RETDEC_INSTALL_DIR/bin/retdec-decompiler test.exe
更多信息,请使用 --help 参数运行 retdec-decompiler。
目前 FreeBSD 没有预构建的“ports”软件包。您需要自行构建和安装反编译器。过程如下所述。
要反编译名为 test.exe 的二进制文件,运行:
$RETDEC_INSTALL_DIR/bin/retdec-decompiler test.exe
更多信息,请使用 --help 参数运行 retdec-decompiler。
您可以轻松地在项目中使用各种 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()` 之前帮助 CMake 找到它。通常有两种方法(请选择并使用其中一种):
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. 将已安装 RetDec CMake 脚本的路径设置为 `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++17 的 C++ 编译器和标准 C++ 库(例如 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 install cmake python37 git autotools
或者portsnap fetchportsnap extractcmake 的安装方式如下
whereis cmakecd /usr/ports/devel/cmakemake install clean注意:虽然 RetDec 现在支持系统级安装(#94),但除非你使用发行版的包管理器进行安装,否则我们建议将 RetDec 安装在本地指定目录中。原因是卸载时只需删除一个目录更加方便。要进行本地安装,请在运行 cmake 时使用 -DCMAKE_INSTALL_PREFIX=<path> 参数,其中 <path> 是 RetDec 将安装到的目录(例如 Linux 和 macOS 上的 $HOME/projects/retdec-install,Windows 上的 C:\projects\retdec-install)。
git clone https://github.com/avast/retdeccd retdecmkdir build && cd buildcmake .. -DCMAKE_INSTALL_PREFIX=<path>make -jN(N 是用于并行构建的进程数,通常是核心数 + 1 可获得最快的编译时间)make installcmd.exe)cd retdecmkdir build && cd buildcmake .. -DCMAKE_INSTALL_PREFIX=<path> -G<generator>cmake --build . --config Release -- -m你必须向 cmake 传递以下参数:
-DCMAKE_INSTALL_PREFIX=<path> 用于将安装路径设置为 <path>。如果你在 Windows 上使用反斜杠,请对路径进行引号处理(例如 -DCMAKE_INSTALL_PREFIX="C:\retdec")。-G<generator> 为 -G"Visual Studio 15 2017" 用于使用 Visual Studio 2017 进行 32 位构建,或 -G"Visual Studio 15 2017 Win64" 用于 64 位构建。可以使用更高版本的 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 上无效,但可以通过运行带有 --config Debug 参数的 cmake --build . 实现相同效果。-D<dep>_LOCAL_DIR=<path> 其中 <dep> 是 {CAPSTONE, GOOGLETEST, KEYSTONE, LLVM, YARA, YARAMOD}(例如 -DCAPSTONE_LOCAL_DIR=<path>),用于使用指定路径 <path> 下的本地仓库克隆作为 RetDec 的依赖项,而不是在构建时下载新的副本。可以同时使用多个此类选项。Docker 支持由社区维护。如果遇到问题或有改进建议,请提交 issue 或 PR。
在 Docker 中构建无需在本地安装所需的库。这是在不搭建完整构建工具链的情况下尝试 RetDec 的不错选择。
要构建 RetDec Docker 镜像,请运行``` docker build -t retdec - < Dockerfile
这将从该仓库的主分支构建镜像。
要使用仓库的本地副本构建镜像,请使用开发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。
我们从 master 分支的最新提交生成最新版本的 RetDec 包,采用两种方式:
这些构建主要用于 RetDec 开发者、贡献者以及其他尝试该产品的人员(例如,测试官方发布版本中的问题是否仍然存在于当前的 master 中)。
您可以随意使用它们,但请注意,我们不保证它们能在您的系统上正常工作(尤其是 Linux 版本),并且可能存在回归问题。要获取稳定的 RetDec 版本,请下载最新的官方预构建包或构建最新的 RetDec 版本标签。
TeamCity
Github Actions
您可以在最新的 RetDec CI 工作流运行中找到 macOS、Linux 和 Windows 的构建。
请参阅项目文档以获取与 master 分支最新提交对应的最新 Doxygen 生成的软件参考。
.dsm 文件)的 Vim 语法高亮文件。版权所有 (c) 2017 Avast Software,遵循 MIT 许可证。详情请参阅 LICENSE 文件。
RetDec 包含一个修改过的 PeLib 库。由 Avast Software 添加的新模块遵循 MIT 许可证。原始源码遵循以下许可证:
LICENSE-PELIB 文件。RetDec 使用的第三方库或其他资源及其许可证列在 LICENSE-THIRD-PARTY 文件中。
请参阅 RetDec 贡献指南。
本软件得到了研究资助 TACR(捷克共和国技术局)ALFA 计划 No. TA01010667 的支持。
cmake --build . --config Release --target installcmake 生成的 retdec.slncd retdecmkdir build && cd buildcmake .. -DCMAKE_INSTALL_PREFIX=<path>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=<path>make -jN(N 是用于并行构建的进程数,通常是核心数 + 1 可获得最快的编译时间)make install-DRETDEC_ENABLE_<component>=ON 用于仅构建指定的组件(可以同时使用多个此类选项)及其依赖项。默认情况下,所有组件都会被构建。如果通过此机制启用了至少一个组件,则所有未显式启用(且不是已启用组件的依赖项)的组件将不会被构建。请参见 cmake/options.cmake 获取所有可用组件选项。
-DRETDEC_ENABLE_ALL=ON 来(重新)启用所有组件。-DRETDEC_ENABLE=<逗号分隔的组件列表> 代替 -DRETDEC_ENABLE_<component>=ON(例如 -DRETDEC_ENABLE=fileformat,loader,ctypesparser 等效于 -DRETDEC_ENABLE_FILEFORMAT=ON -DRETDEC_ENABLE_LOADER=ON -DRETDEC_ENABLE_CTYPESPARSER=ON)。