PC 펌웨어 리버스 엔지니어링을 지원하기위한 GHIDRA의 다양한 모듈. 이것은 GSOC 2019의 핵심 부트 프로젝트로 인정되었습니다.
JDK 11 (또는 최신) 및 GHIDRA 10.1 (또는 최신)이 필요합니다.
Ghidra의 표준 Gradle 빌드 시스템이 사용됩니다. 구축하기 전에 GHIDRA_INSTALL_DIR 환경 변수를 설정하거나 gradle 속성으로 설정하십시오 (IDE에 건축에 유용) :
$ export GHIDRA_INSTALL_DIR= " /path/to/ghidra "
$ ./gradlew echo GHIDRA_INSTALL_DIR=/path/to/ghidra > gradle.properties 모듈 zip은 dist/ 로 출력됩니다. 파일> 확장자 설치를 사용하고 Green Plus를 선택하여 확장자를 찾아보십시오. 프롬프트되면 Ghidra를 다시 시작하십시오.
적절한 기능을 위해 플러그인은 GHIDRA 설치에서 사용하는 것과 동일한 JRE를 사용하여 구축해야합니다. 여러 Java 런타임 환경이 설치된 경우 구축하기 전에 JAVA_HOME 환경 변수를 설정하여 올바른 JRE를 선택하십시오.
GHIDRA 프로젝트에 PCI 옵션 ROM을 추가하십시오. 레거시 x86 옵션 ROM을 분석을 위해 직접로드 할 수 있습니다. 이진 형식이 X86 PCI 옵션 ROM 으로 설정되어 있으며 이진을 가져 오십시오.
UEFI 옵션 ROM 또는 옵션 ROM은 파일 시스템 로더를 사용하여 둘 이상의 이미지를 포함해야합니다. 가져 오기 모드를 선택하라는 메시지가 표시되면 파일 시스템을 선택하십시오. 옵션 ROM 내에 포함 된 이미지가 표시되며 분석을 위해 가져올 수 있습니다. 레거시 X86 이미지는 X86 PCI 옵션 ROM 로더로 처리되며 UEFI 이미지는 PE32 로더 (압축 지원)에 의해 처리됩니다. 마우스 오른쪽 버튼 클릭 메뉴에서 정보를 선택하여 각 이미지에 대한 정보를 표시 할 수 있습니다.
지원되는 펌웨어 이미지를 GHIDRA 프로젝트에 추가하십시오. 펌웨어 이미지 로더는 플래시 디스크립터, FMAP/CBFS 레이아웃의 코어 부츠 이미지 및 UEFI 펌웨어 볼륨을 갖춘 인텔 이미지를 지원합니다. 파일 시스템 가져 오기 모드를 사용하여 지정된 펌웨어 이미지 내에서 임베디드 파일을 볼 수 있습니다.
일부 UEFI 펌웨어 이미지는 중첩 펌웨어 볼륨을 FreeForm/RAW 파일 (또는 FreeForm/Raw FFS 섹션)에 저장할 수 있습니다. 이러한 파일은 지정된 FreeForm/Raw 파일의 오른쪽 클릭 메뉴에서 열린 파일 시스템을 선택하여 펌웨어 볼륨으로 가져올 수 있습니다. 중첩 펌웨어 볼륨이없는 경우 오류 메시지가 표시됩니다 ( No file system provider for... ).
도우미 스크립트는 플러그인의 GHIDRA_SCRIPTS 디렉토리에 포함되어 있으며 GHIDRA의 스크립트 디렉토리 목록에 자동으로 추가해야합니다.
스크립트 관리자 창에서 uefihelper.java를 선택하여 UEFI 헬퍼 스크립트를 실행하십시오 ( 창에서 액세스 -> 스크립트 관리자 ).
UEFI 데이터 유형 라이브러리를 수정하려면 필요에 따라 data/gen_prf.sh 에서 PRF 템플릿을 수정하고 새 PRF 파일을 생성하십시오. 파일 -> parse c 소스 에서 생성 된 prf 파일을 엽니 다. 파일에 구문 분석을 선택하여 업데이트 된 데이터 형식 라이브러리를 구축하십시오 .... data 에서 원래 데이터 유형 라이브러리를 덮어 쓰고 플러그인을 재구성하십시오.
이들은 UEFI 역전과 관련된 흥미로운 프로젝트입니다.
Apache 2.0, 몇 가지 예외가 있습니다.
src/efidecompress/c/efidecompress.c : BSD src/efidecompress/c/efidecompress.c 는 UEFI-Firmware-Parser (Edk2 Basetools의 원본에서 파생 된)의 Decompress.c의 가볍게 수정 된 버전입니다.
lib/xz-1.8.jar 는 Java 프로젝트의 XZ에서 가져 왔습니다.
src/main/java/firmware/ifd 의 IFD FS 로더는 Uefitool의 파서를 참조로 사용했습니다.
data/guids.csv 의 Guid 데이터베이스는 uefitool에서 가져옵니다.
data/uefi_*.gdt 의 UEFI 데이터 유형 라이브러리는 data/gen_prf.sh 로 생성되었으며, 이는 WRFFRZ의 GHIDRA PULL 요청의 UEFI 파서 정의를 부분적으로 기반으로합니다. 이 데이터 유형 라이브러리는 EDK2 MDEPKG의 헤더를 사용합니다.
Xerpi의 Ghidravitaloader는 UEFI 헬퍼 스크립트의 일부에 대한 참조로 사용되었습니다.