Notice
Recent Posts
Recent Comments
Link
«   2026/07   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

방망이

[프로젝트]UEFI DXE 바이너리 취약점 분석기 12주차 - P-code 이론 본문

2026_졸업프로젝트

[프로젝트]UEFI DXE 바이너리 취약점 분석기 12주차 - P-code 이론

망구입니다 2026. 5. 4. 20:16

기존에 진행하던 프로젝트의 전반적인 개발은 일단락 되었고, 앞으로 진행할 방향에 대해 고민하는 시간과 함께 스크립트 발전에 대해 목마른 팀원분들과 함께 P-code를 공부해보고자 한다.

 

P-code 공부는 AI를 활용하고자 한다.

이번주는 P-code에 대해 개념 공부를 하기 보단 커리큘럼을 먼저 설계해보기로 하였다.

이를 위해 내가 주로 쓰는 세 가지 정도의 AI 툴로 테스트 해보았고, 모두 동일한 프롬프트를 사용하였다.

  1. Claude Sonnet 4.6 (무료)
  2. Gemini Pro (유료)
  3. Chat GPT (무료)

P-code에 대해 잘 모르는 사람 입장에서 위 세 가지 툴 모두 시키는거 많고 해야할 거 많고 체계적으로 짜준 것 같긴 하다만 Claude가 로드맵 형식으로 구체적이면서 시각적으로 한눈에 들어오게 만들어준 것 같아서 이걸 사용해 보려고 한다.

 

사실 세 가지가 사람마다 취향이 갈려서 자신이 편하게 느껴지는 툴을 사용하면 좋을 것 같긴 하지만, 출처나 관련 자료 링크를 쉽게 볼 수 있는 툴(ex. Perplexity)과 1, 2, 3번 중 한가지를 동시에 쓰면 더 수월하고 전문성 있게 공부할 수 있겠다는 생각이 들었다.

 

아래는 Cluade를 사용한 자료이다.


    • 전체 커리큘럼 로드맵

 

  • Phase 1 — 기반 지식 구축 (2~3주)
    • P-code는 결국 어셈블리를 추상화한 IR이기 때문에, x86/x64 어셈블리를 읽을 수 있어야 함. 동시에 SSA form, 기본 블록, CFG 같은 컴파일러 이론 개념도 먼저 익혀두는 게 Phase 2 진입을 훨씬 수월하게 함.
  • Phase 2 — P-code 핵심 이해 (3~4주)
    • 커리큘럼의 핵심 단계. Varnode(P-code의 변수 단위), PcodeOp(연산 단위), SLEIGH 명세 언어의 삼각 관계를 이해해야 함. Ghidra는 Raw P-code(어셈블리 1:1 변환)와 High P-code(디컴파일러 내부 최적화 표현) 두 레이어를 제공하는데, 취약점 분석은 주로 High P-code에서 작업함.
  • Phase 3 — 프로그램 분석 기법 (4~5주)
    • Taint analysis가 핵심. 사용자 입력(source) → 위험한 함수(sink)까지의 데이터 흐름을 P-code Def-Use 체인을 따라 추적하는 것이 취약점 분석기의 기본 원리.
  • Phase 4 — 취약점 분석 패턴 (4~5주)
    • Buffer overflow는 LOAD/STORE op의 오프셋 범위 검증, UAF는 COPY op 이후 STORE 추적, 포맷 스트링은 CALL op의 인자 Varnode를 역방향 슬라이싱하는 식으로 각 취약점 유형마다 P-code 레벨의 패턴이 있음. 실제 CVE 바이너리로 직접 연습하는 것을 강력히 권장.
  • Phase 5 — 분석기 개발 (4~6주)
    • Ghidra의 AbstractAnalyzer를 상속해서 플러그인을 만들고, 필요하다면 PcodeEmulator나 AngR 같은 심볼릭 실행 엔진과 연동. Ponce(Ghidra용 taint 분석기)나 Kaiju 같은 오픈소스 플러그인 코드를 참고하면 구조 파악에 큰 도움이 됨.

 

위 커리큘럼에서 전부를 하는 것은 아니고, 필요한 부분만 골라서 진행하면 좋을 것 같다.