
RetDec는 LLVM 기반의 재대상 지정 가능한 기계어 역컴파일러입니다.
경고
RetDec 프로젝트는 현재 자원 부족으로 제한된 유지보수 모드에 있습니다:
- 풀 리퀘스트는 환영합니다. 가능하면 지연 없이 우선적으로 검토됩니다.
- 이슈는 최대 한 분기까지 지연되어 처리됩니다. 기본 프로젝트 유지보수와 관련되지 않은 이슈는 적극적으로 해결되지 않습니다.
- 기본 프로젝트 유지보수는 계속됩니다.
- 매우 제한된 개발만 진행됩니다.
RetDec는 LLVM 기반의 재타겟 가능한 기계어 디컴파일러입니다.
디컴파일러는 특정 대상 아키텍처, 운영 체제 또는 실행 파일 형식에 국한되지 않습니다:
기능:
더 자세한 정보는 다음을 참조하세요:
RetDec을 얻고 설치하는 두 가지 방법이 있습니다:
retdec/share/retdec/README.md 파일의 사용 섹션에 있는 지침을 따릅니다.현재 Windows (7 이상), Linux, macOS 및 (실험적으로) FreeBSD를 지원합니다. 설치된 RetDec 버전은 약 5~6GB의 여유 디스크 공간이 필요합니다.
사용 중인 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
자세한 내용은 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를 실행하십시오.
현재 FreeBSD용 사전 빌드된 "ports" 패키지는 없습니다. 디컴파일러를 직접 빌드하여 설치해야 합니다. 과정은 아래에 설명되어 있습니다.
test.exe라는 바이너리 파일을 디컴파일하려면 다음을 실행합니다:
$RETDEC_INSTALL_DIR/bin/retdec-decompiler test.exe
자세한 내용은 retdec-decompiler --help를 실행하십시오.
CMake로 빌드된 경우 프로젝트에서 다양한 RetDec 라이브러리를 쉽게 사용할 수 있습니다. RetDec 설치에는 필요한 모든 헤더, 라이브러리 및 CMake 스크립트가 포함되어 있습니다.
RetDec을 시스템의 표준 설치 위치(예: /usr, /usr/local)에 설치한 경우, 해당 구성 요소를 사용하기 위해 필요한 것은 다음과 같습니다:```cmake
find_package(retdec 5.0 REQUIRED
COMPONENTS
[...]
)
target_link_libraries(your-project
PUBLIC
retdec::
[...]
)
RetDec를 자동으로 찾을 수 없는 위치에 설치한 경우, `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)
```
사용 가능한 RetDec 구성 요소 목록은 [Repository Overview](https://github.com/avast/retdec/wiki/Repository-Overview) 위키 페이지를 참조하거나, 사용 방법에 대한 데모는 [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/)
* 선택 사항: API 문서 생성을 위한 [Doxygen](http://www.stack.nl/~dimitri/doxygen/) 및 [Graphviz](http://www.graphviz.org/)
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
ORportsnap 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 -- -mcmake에 다음 매개변수를 전달해야 합니다:
-DCMAKE_INSTALL_PREFIX=<path>: 설치 경로를 <path>로 설정합니다. Windows에서 백슬래시를 사용하는 경우 경로를 따옴표로 묶으세요 (예: -DCMAKE_INSTALL_PREFIX="C:\retdec").-G<generator>: 32비트 빌드의 경우 -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<dep>_LOCAL_DIR=<path>: 여기서 <dep>는 {CAPSTONE, GOOGLETEST, KEYSTONE, LLVM, YARA, YARAMOD} 중 하나입니다 (예: -DCAPSTONE_LOCAL_DIR=<path>). 빌드 시 새 복사본을 다운로드하는 대신 <path>에 있는 로컬 저장소 클론을 RetDec 종속성으로 사용합니다. 여러 옵션을 동시에 사용할 수 있습니다.Docker 지원은 커뮤니티에서 유지 관리합니다. 문제가 발생하거나 개선 제안이 있으면 이슈 또는 PR을 열어주세요.
Docker에서 빌드하는 경우 필요한 라이브러리를 로컬에 설치할 필요가 없습니다. 전체 빌드 도구 체인을 설정하지 않고 RetDec을 사용해 보려는 경우 좋은 옵션입니다.
RetDec Docker 이미지를 빌드하려면 다음을 실행하세요:``` 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에 생성됩니다.
저희는 master 브랜치의 최신 커밋에서 최신 RetDec 패키지를 두 가지 방법으로 생성합니다.
이 빌드는 주로 RetDec 개발자, 기여자, 그리고 제품을 실험하는 다른 사용자(예: 공식 릴리스에 존재하는 문제가 현재 master에 여전히 존재하는지 테스트)를 위해 만들어졌습니다.
원하시는 대로 사용할 수 있지만, 특히 Linux 버전의 경우 시스템에서 작동할 것이라는 보장이 없으며, 회귀 가능성이 있음을 명심하십시오. 안정적인 RetDec 버전을 얻으려면 최신 공식 사전 빌드 패키지를 다운로드하거나 최신 RetDec 버전 태그를 빌드하십시오.
TeamCity
Github Actions
macOS, Linux 및 Windows용 빌드는 최신 RetDec CI 워크플로 실행에서 찾을 수 있습니다.
master 브랜치의 최신 커밋에 해당하는 최신 Doxygen 생성 소프트웨어 참조는 프로젝트 문서를 참조하십시오.
.dsm 파일)을 위한 Vim 구문 강조 파일입니다.Copyright (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.sln을 열 수 있습니다.cd 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은 OS에 미리 설치되어 있지만 버전을 확인하세요.
# 각 패키지에 대해 최신 버전을 사용할 수 있습니다.
# 설치된 항목 확인:
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=<comma-separated component list>를 -DRETDEC_ENABLE_<component>=ON 대신 사용할 수 있습니다 (예: -DRETDEC_ENABLE=fileformat,loader,ctypesparser는 -DRETDEC_ENABLE_FILEFORMAT=ON -DRETDEC_ENABLE_LOADER=ON -DRETDEC_ENABLE_CTYPESPARSER=ON과 동일).