기존의 .efi 취약점 탐색 스크립트들과 달리 언팩과정부터 다른 툴을 써야할 정도로 기존 스크립트들과 차이가 크기 때문에
우선 UEFIExtract를 통한 자동 언팩 과정과 depex 스크립트 구동기를 기존과 다른 파일로 만들고, 추후에 모듈을 분리·장착하는 느낌으로 추가하는 편이 유리할 것이라 판단하였다.
그래도 이후에 경로 관리의 편의성을 생각하여 지금까지의 경로를 저장했던 파일에 uefiextract경로 등을 추가하는 방식으로 경로를 관리했다.
{
"UEFIExtractPath": "D:\\project\\uefi\\uefi_extract_test\\UEFIExtract.exe",
"sevenZipPath": "C:\\Program Files\\7-Zip\\7z.exe",
"fdFilePath": "D:\\project\\py_test\\OVMF_CODE.fd",
"efiCollectPath": "D:\\project\\py_test\\efi\\py_efi_set",
"ghidraPath": "D:\\project\\ghidra_12.0.2_PUBLIC",
"projectPath": "D:\\project\\py_test\\py_test.rep",
"scriptPath": "D:\\project\\project script\\project script\\src",
"outputPath": "D:\\project\\py_test\\py_result\\py_final_result",
"lastUpdated": "2026-03-11 18:36:56",
"logPath": "D:\\project\\py_test\\py_result\\py_log",
"midResultPath": "D:\\project\\py_test\\py_result\\py_mid_result",
"efiDumpPath": "D:\\project\\py_test\\efi\\efi_dump"
}
실행은 아래와 같이 json의 환경변수를 끌고와서 실행시키는 방식으로 그전 실행기와 큰 차이는 없다

| 함수 | 설명 |
| load_config() | py_test.json에서 경로 설정을 볼러온다. IF 파일 존재 THEN ensure_config_field() IF 파일 없음 THEN initialize_config() |
| ensure_config() | py_test.json의 경로 필드 채우기 |
| initialize_config() | save_config()를 통해서 py_test.json생성 초기화할 때도 사용한다 |
| save_config() | 경로저장 |
| find_fd_file_auto() | .fd파일이 현재 경로에 있는 자동 탐색 업으면 none을 반환 |
| validate_ghidra_path(path) | 기드라 경로 검증용 |
| extract_fd_with_uefi(fd_file_path,uefi_extract_path) | .fd파일 추출 |
| run_ghidra_depex_analysis( dump_dir, ghidra_path, project_path, script_path, log_dir, mid_result_dir ) |
DepexHunter 구동함수 |
| create_vulnerability_summary(create_vulnerability_summary(fd_file_path, mid_result_dir, output_dir) | mid_resul_dir에 있는 <fd_filename>_depex_report.json에서 vulnerability_found: true인 항목만 걸러내기 |
| show_main_menu() | 화면을 지우고(clear | cls) 메인 메뉴를 출력한다. 옵션: [1] 언팩+분석, [2] 언팩만, [3] 분석만, [4] 경로 확인, [5] 경로 수정, [Q] 종료. |
| menu_extract_and_analyze() | 메뉴 옵션 [1] 처리. extract_fd_with_uefi() → run_ghidra_depex_analysis() → create_vulnerability_summary() |
| menu_extract_only() | extract_fd_with_uefi() |
| menu_analyze_only() | run_ghidra_depex_analysis() → create_vulnerability_summary() |
| show_config() | 설정값 확인용 |
| settings_mode() | 수정 후 save_config()로 저장 |
위와 같은 함수들을 통해서 자동화를 하였고, 이 함수들을 이전 실행기에 붙이면 통합 실행기를 제작할 수 있을 것이라고 생각한다.
main()
├─ load_config() ← py_test.json 로드 또는 초기화
└─ [메뉴 루프]
├─ [1] menu_extract_and_analyze()
│ ├─ extract_fd_with_uefi() ← UEFIExtract 실행 → .dump 폴더
│ ├─ run_ghidra_depex_analysis() ← Ghidra + DepexHunter_v3.java
│ └─ create_vulnerability_summary() ← 취약점 JSON 필터 저장
├─ [2] menu_extract_only()
│ └─ extract_fd_with_uefi()
├─ [3] menu_analyze_only()
│ ├─ run_ghidra_depex_analysis()
│ └─ create_vulnerability_summary()
├─ [4] show_config()
└─ [5] settings_mode()
구조도는 이런 형태가 된다.
이제 저번주와 이번주에 한거를 합쳐서 통합 실행기를 만들면 된다.
이번에는 또 무슨 오류가 터져줄까
요구사항.
1. 버전의 통일
ExampleHunter_n.m.xxx 형태면 좋을 듯 합니다.
- 대규모 변화(eg.핵심로직 자체에 대한 변화 등)은 n
- 중규모 변화(eg.함수 내부에서만 작동하던 로직을 함수외부로 확장)은 m
- 소규모 변화(eg. 안정화를 위한 패치, 오류 등)은 xxx로 해주시면 감사합니다.
2. 타임스탬프가 필요할 것 같아요
3. 결과 json을 건드린다면 아마 서웅이랑 동건이형만 수정하면 될 듯 하다.
{
"script_name": "string",
"binary_name": "string",
"vulnerability_found": boolean,
"timestamp": "ISO 8601 format",
"locations": [
{
"function_name": "string",
"pcode_address": "string"
}
],
"info" : "string"
}'졸업프로젝트' 카테고리의 다른 글
| 자료 조사랑 런처2.0 제작을 해보자 (0) | 2026.03.30 |
|---|---|
| 끝이 보인다!끝이 보인다!끝이 보인다!끝이 보인다!(수정)아... 아직이네 쓰읍 (0) | 2026.03.19 |
| 결과 json에는 어떤 것들이 들어가야 빼 먹지 않고 잘 들어갔다고 소문이 날까? (0) | 2026.02.26 |
| 취약점이 반영된 검증용 드라이버... 을! 만들어 봤읍니다. (0) | 2026.02.25 |
| ghidra headless 사용 (0) | 2026.02.13 |