이것은 Rizin의 Ghidra 디 컴파일러 및 Sleigh Disassembler의 통합입니다. 그것은 전적으로 C ++로 작성된 Ghidra의 디 컴파일러 부분을 기반으로하므로 Ghidra 자체는 전혀 필요하지 않으며 플러그인은 자체 포함 할 수 있습니다. 이 프로젝트는 Cutter Talk의 일환으로 R2Con 2019에서 Radare2에서 처음으로 발표되었습니다 : https://youtu.be/ehtmiezr7l8?t=950
Usage: pdg # Native Ghidra decompiler plugin
| pdg # Decompile current function with the Ghidra decompiler
| pdgd # Dump the debug XML Dump
| pdgx # Dump the XML of the current decompiled function
| pdgj # Dump the current decompiled function as JSON
| pdgo # Decompile current function side by side with offsets
| pdgs # Display loaded Sleigh Languages
| pdg* # Decompiled code is returned to rizin as comment
다음 구성 Vars ( e 명령의 경우)는 RZ-Ghidra의 동작을 조정하는 데 사용될 수 있습니다.
ghidra.cmt.cpp: C++ comment style
ghidra.cmt.indent: Comment indent
ghidra.indent: Indent increment
ghidra.lang: Custom Sleigh ID to override auto-detection (e.g. x86:LE:32:default)
ghidra.linelen: Max line length
ghidra.nl.brace: Newline before opening '{'
ghidra.nl.else: Newline before else
ghidra.sleighhome: SLEIGHHOME
여기에서 ghidra.sleighhome *.sla , *.lspec , ... 디 컴파일러가 지원 해야하는 아키텍처 파일을 포함하는 디렉토리를 가리켜 야합니다. 그러나 RZ-PM 패키지를 사용하거나 아래 그림과 같이 설치할 때 자동으로 설정됩니다.
먼저이 저장소에 포함 된 하위 모듈이 최신 상태로 가져 오는지 확인하십시오.
git submodule init
git submodule update
그런 다음 Rizin 플러그인을 다음과 같이 구축하고 설치할 수 있습니다.
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=~/.local ..
make
make install
여기에서 CMAKE_INSTALL_PREFIX Rizin이 플러그인을로드 할 수있는 위치로 설정하십시오. 필요한 슬라이 파일 설치가 포함되어 있기 때문에 플러그인이 작동하는 데 설치 단계가 필요합니다. Git의 Rizin을 사용하는 경우 CMAKE_PREFIX_PATH Rizin 설치 디렉토리로 설정하십시오.
또한 커터 플러그인을 만들려면 일부 접두사 아래 소스에서 커터를 설치해야합니다. 일부 접두사 아래에 -DCMAKE_PREFIX_PATH=<path> 로 선택적으로 지정할 수 있습니다. 그런 다음 pass -DBUILD_CUTTER_PLUGIN=ON to cmake : 플러그인을 활성화하십시오.
/my/path/rz-ghidra> mkdir build && cd build
/my/path/rz-ghidra/build> cmake -DBUILD_CUTTER_PLUGIN=ON -DCMAKE_PREFIX_PATH=/path/to/cutter/prefix -DCMAKE_INSTALL_PREFIX=~/.local ..
/my/path/rz-ghidra/build> make && make install
기본적으로 커터 플러그인은 현재 사용자의 홈 디렉토리의 자동으로 선택된 경로에 설치됩니다. 이 경로는 -DCUTTER_INSTALL_PLUGDIR 로 재정의 할 수 있습니다.
Rizin은 빠르게 진화하는 C API를 가지고 있으므로 RZ-Ghidra의 버전이 어떤 버전의 Rizin과 호환되는지에 대해 명시해야합니다.
git에서 Rizin과 Rz-Ghidra를 사용할 때 :
dev Rizin Branch dev 따라갑니다.stable Rizin Branch stable 따라 따릅니다. 릴리스와 관련하여 Rz-Ghidra는 일반적으로 Rizin과 동시에 출시되며 종종 동일한 버전 번호를 사용합니다 (보장되지는 않지만이 숫자에 의존하지 않습니다!). 또한 rz-0.1.2 와 같은 모든 Rizin 릴리스와 함께 RZ-Ghidra에서 RZ-Ghidra 릴리스를 정확히 지적 하며이 릴리스가 지정된 Rizin 버전과 호환됨을 나타냅니다. 이 태그는 배포 관리자가 의존성을 설정하는 방법을 찾기 위해 사용될 수 있습니다.
이 플러그인은 LGPLV3 에서 사용할 수 있으며 Ghidra의 라이센스보다 더 엄격합니다!
이 프로그램은 무료 소프트웨어입니다. Free Software Foundation, 라이센스의 버전 3 또는 이후 버전에서 게시 된 GNU Lesser General License의 조건에 따라 재분배 및/또는 수정할 수 있습니다.
이 프로그램은 유용 할 것이지만 보증이 없다는 희망으로 배포됩니다. 상업성 또는 특정 목적에 대한 적합성에 대한 묵시적 보증조차 없습니다. 자세한 내용은 GNU Less General Public 라이센스를 참조하십시오.
이 프로그램과 함께 GNU Lesser General Public License 사본을 받았어야합니다. 그렇지 않은 경우 https://www.gnu.org/licenses/를 참조하십시오.