关于RetDec
RetDec是一款功能强大的基于LLVM的可重定目标机器代码反编译器,该工具支持的反编译器不限于任何特定的目标体系结构、操作系统或可执行文件格式。
当前版本的RetDec支持下列文件格式:
ELF
PE
Mach-O
COFF
AR(文档)
Intel HEX
原始机器代码
当前版本的RetDec支持下列体系结构:
32位:Intel x86、ARM、MIPS、PIC32和PowerPC
64位:x86-64,ARM64(AArch64)
功能介绍
1、提供带有详细信息的可执行文件静态分析数据;
2、编译器和封装器检测;
3、加载和指令解码;
4、基于签名的静态链接库代码移除;
5、提取和利用调试信息(DWARF、PDB);
6、指令语法重构;
7、C++类层次结构(RTTI、vtables)的检测和重构;
8、从C++二进制文件(GCC、MSVC、Borland)中分离符号;
9、函数、类型和高级构造器重构;
10、整合反汇编工具;
11、以两种高级语言输出:C和类似Python的语言;
12、生成调用图、控制流图和各种统计信息;
工具安装
广大研究人员可以访问该项目的【Releases页面】下载预编译的RetDec稳定版。
当前版本的RetDec支持Windows 7+、Linux、macOS和FreeBSD操作系统,请预留大约5-6GB的磁盘空间。
工具使用
Windows
1、安装Microsoft Visual C++ Redistributable for Visual Studio 2017;
3、如需反编译名为text.exe的代码文件,可以运行下列命令:
$RETDEC_INSTALL_DIR\bin\retdec-decompiler.exe test.exe
Linux
2、如需反编译名为text.exe的代码文件,可以运行下列命令:
$RETDEC_INSTALL_DIR/bin/retdec-decompiler test.exe
使用RetDec代码库
我们还可以直接在自己项目(需要使用CMake构建)中使用RetDec库。RetDec安装时包含了所有需要的头文件、代码库和CMake脚本。
接下来,就可以通过下列方式来使用其组件了:
find_package(retdec 5.0 REQUIRED COMPONENTS <component> [...] ) target_link_libraries(your-project PUBLIC retdec::<component> [...] )
Docker中构建RetDec
构建镜像
在Docker中构建RetDec不需要在本地安装所需的依赖库,直接运行下列命令即可构建RetDec镜像:
docker build -t retdec - < Dockerfile
上述命令将从代码库的主分支构建镜像。
除此之外,我们也可以使用本地代码库拷贝来构建镜像,即使用开发版本的Dockerfile.dev:
git clone https://github.com/avast/retdec.git 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
许可证协议
项目地址
RetDec:【GitHub传送门】
参考资料
https://retdec.com/static/publications/retdec-slides-botconf-2017.pdf
https://www.youtube.com/watch?v=HHFvtt5b6yY
https://retdec.com/static/publications/retdec-slides-recon-2018.pdf