
Ghidra용 코드 커버리지 탐색 플러그인
Austin Peavy가 개발 - https://github.com/aus10pv
NCC Group Plc가 오픈 소스로 공개 - https://www.nccgroup.com/
Apache 2.0 라이선스로 공개됨 (자세한 내용은 LICENSE 참조)

Cartographer는 Ghidra용 코드 커버리지 매핑 플러그인으로, 연구자들이 소스 코드 없이도 프로그램의 어느 부분이 실행되었는지 관찰할 수 있게 해줍니다.
Cartographer의 최신 안정 버전은 Releases 페이지에서 다운로드할 수 있습니다.
File -> Install Extensions...플러그인이 로드되면 CodeBrowser 창에 코드 커버리지 데이터를 작업하기 위한 추가 컨트롤이 표시됩니다.
코드 커버리지 파일은 Tools 메뉴를 통해 로드할 수 있습니다: Tools -> Code Coverage -> Load Code Coverage File(s)...
코드 커버리지 파일이 로드되면 모든 커버리지 데이터가 Listing 뷰와 Decompiler 뷰에서 즉시 강조 표시됩니다.

각 함수의 커버리지 데이터에 대한 자세한 정보는 Code Coverage 창에서 확인할 수 있습니다.
Code Coverage 창은 Window -> Code Coverage로 이동하거나 Windows에서는 Ctrl-Shift-C, Mac에서는 Cmd-Shift-C를 눌러 열 수 있습니다.
이 창에는 프로그램의 각 함수에 대한 다양한 세부 정보가 표시됩니다.
함수를 클릭하면 Listing 뷰와 Decompiler 뷰에서 해당 함수로 이동합니다.

Filter 입력 상자를 사용하여 함수 이름으로 검색할 수 있습니다.
커버리지 테이블에 표시된 모든 데이터는 열 필터로 사용할 수 있습니다.

Code Coverage 창의 오른쪽 하단에 있는 드롭다운을 사용하면 로드된 코드 커버리지 파일 간에 빠르고 쉽게 전환할 수 있습니다.

Code Coverage 창 하단의 텍스트 상자를 사용하면 로드된 코드 커버리지 파일에 대해 논리 연산을 수행할 수 있습니다.
이는 프로그램의 서로 다른 실행 간 차이점과 유사점을 검토하는 데 매우 유용할 수 있습니다.

표현식 파서에서 사용할 수 있는 논리 연산자는 다음과 같습니다.
&: 두 커버리지 모두에서 실행된 코드 만 가져옵니다.|: 두 커버리지 중 하나에서 실행된 모든 코드를 가져옵니다.^: 커버리지 간에 다르게 실행된 코드 만 가져옵니다.-: 왼쪽 커버리지에 고유한 실행 코드 만 가져옵니다.커버리지는 드롭다운 메뉴의 알파벳 ID(예: A, B, XY 등)로 참조됩니다.
각 논리 연산은 괄호로 그룹화되며, 표현식은 길이나 복잡도에 제한이 없습니다.
커버리지 A와 B 모두에서 실행된 코드를 표시합니다:
A & B
커버리지 A와 B 간에 다르게 실행된 코드를 표시합니다:
A ^ B
B에서 만 실행된 코드를 표시합니다:
B - A
A와 B에서 찾은 모든 커버리지 데이터를 결합한 다음 C와의 차이점을 찾습니다:
(A | B) ^ C
Gradle을 사용하여 Cartographer를 소스 코드에서 빌드할 수 있습니다.
Cartographer GitHub 저장소를 클론합니다.
$ git clone https://github.com/nccgroup/Cartographer.git
저장소에 들어가 gradle로 빌드합니다.
$ cd Cartographer
$ gradle -PGHIDRA_INSTALL_DIR=<ghidra_install_dir>
<ghidra_install_dir>을 로컬 Ghidra 설치 경로로 바꿉니다.빌드가 완료되면 플러그인 ZIP 파일은 dist/ 폴더에 위치합니다.
Cartographer에서 버그를 발견한 경우 GitHub를 통해 이슈를 열어 주세요.
원래 Lighthouse에서 영감을 받았습니다 - https://github.com/gaasedelen/lighthouse