목표
LLVM에 대한 기초적인 PASS 생성 정도의 지식 수준에서 현재 진행 중인 프로젝트에 적용 방법을 고안하는 것에 한계를 느끼고, 구글링을 통해 정보를 얻어내는 방법도 있으나, AI를 활용함으로써 더 양질의 정보를 빠르게 얻어보고자 한다.
2025 AI 여름방학 특강에서 배운 프롬프트 작성 방법을 활용해 AI에게 아이디어를 생성시켜 프로젝트의 진행 방향을 모색할 수 있도록 한다.
다음 프롬프트는 특강 중 AI 활용 마스터 부분을 참고하여 작성한 프롬프트이다.
[명령] llvm을 '바이너리를 이용한 제어구조 판별 도구(llm) 개발' 에 적용할 수 있는 방법을 제시해줘.
[맥락] 이 프로젝트의 배경은 요즘 주로 악성코드의 난독화 과정에서 사용되는 virtualize라는 난독화가 이루어지는 코드에서 fetch-decode-execute 형식으로 많이 변형되곤 하는데, 이 형식이 loop-switch 구조와 닮은 것을 기반으로 이와 같은 난독화가 적용되었는지 여부를 탐지해내고자 하는 것이야. llm이 난독화된 코드의 바이너리 코드를 보고 난독화를 효율적으로 탐지해낼 수 있도록 정보를 간략화하거나 주요한 정보만을 바탕으로 llm이 판별할 수 있도록 하기 위해 llvm을 적용하고자 해.
[제한] 이는 프로젝트에 접목하고자 하는 아이디어를 제시하는 것으로 3문장을 넘어가지 않는 설명과 함께 아이디어를 제시해줘. 아이디어는 10가지 정도 제시해줘. 종류는 기존을 방법을 바탕으로 7가지 창의적인 방법으로 3가지 제시해줘
[예시] llvm은 http://www.llvm.org을 참고해서 어떤 방법을 적용할 수 있는지 탐색할 수 있을 것이고, 아이디어는 이전까지 다른 프로젝트에 llvm에 어떻게 적용되었는지 논문 탐색을 바탕으로 어떤 방식으로 활용되었는지 를 참고하면 좋을 거 같아.
Chat GPT-5-thinking의 응답
아래 10가지는 “바이너리를 이용한 제어구조 판별 도구(LLM)”에 LLVM을 접목해, 가상화(virtualize) 난독화가 만들어내는 fetch–decode–execute(= loop–switch 류) 패턴을 LLM이 쉽게 판별하도록 특징을 간추려 주는 방법입니다. 각 항목은 3문장 이내로 요약했습니다.
기존 방법 기반 (7)
- MC/objdump 기반 CFG·점프테이블 복원
llvm-objdump와 LLVM MC 디스어셈블러를 써서 간접 분기·점프테이블·핸들러 블록을 복원하고, BB(기본블록) 단위 통계(간접분기 밀도, 분기 대상 다양도, 핸들러 길이 분산)를 LLM 입력용 특징으로 내보냅니다. 가상화 VM 인터프리터의 switch/간접분기 집중 패턴을 정량화해 태깅합니다. (llvm.org, The LLVM Project Blog) - Object 라이브러리로 섹션·심볼·재배치 메타데이터 추출
llvm::object로 바이너리 포맷별(ELF/Mach-O/COFF) 코드/데이터/읽기전용 섹션과 재배치·심볼 정보를 읽어, “비정형 바이트코드 테이블 + 작은 핸들러 군집” 같은 VM 흔적을 규칙化합니다. 이 메타를 LLM 프롬프트의 헤더로 붙여 잡음 없이 맥락을 제공합니다. (llvm.org) - BOLT로 핫 트레이스·CFG 가중치 산출
perf2bolt→llvm-bolt 파이프라인으로 실제 실행 프로파일을 반영한 CFG(간접분기 허브가 과열되는 인터프리터 루프)와 핸들러 진입/퇴출의 핫에지 비율을 뽑아 특징화합니다. 해석기형 루프의 “짧은 핸들러 다중호출 + 간접분기 허브” 지표를 만듭니다. (GitHub, llvm.org, research.facebook.com) - llvm-mca로 디스패치 마이크로패턴 분석
디스어셈블 스니펫을 llvm-mca에 넣어, 반복 루프 내 로드·분기·비산 수치(throughput/리소스 사용) 패턴을 얻고 해석기 루프 특유의 ‘얇은 연산+간접분기’ 지표를 생성합니다. 성능 시뮬레이션 수치 자체를 LLM이 읽기 쉬운 스칼라 특징으로 축약합니다. (llvm.org, en.algorithmica.org, Johnny's Software Lab) - XRay(정적/동적)로 간접 분기 집약 트레이스 채집
가능하면 XRay로 함수 경계/콜스택 트레이스를 수집하고, 짧은 처리기(handler) 호출이 고빈도로 반복되는 패턴을 정리합니다. 정적 특징과 결합해 “동적 호출-길이 분포”를 LLM에 제공합니다. (llvm.org) - MIR/MachineFunctionPass 기반 디코딩 후 규격화
MC로 올린 기계명령을 MIR 수준의 그래프로 정리하고, MachineFunctionPass로 “인터프리터 루프 후보”를 표준 형태(머리 루프+간접 분기+핸들러 군집)로 정규화해 델타를 줄입니다. LLM에는 원본 대신 ‘정규화된 CFG 서명 + 통계’만 전달합니다. (llvm.org) - MLIR 데이터플로 분석으로 바이트코드 상태추적
바이트코드 포인터/스택 레지스터처럼 보이는 상태변수를 MLIR 데이터플로 프레임워크로 추적해, “fetch(메모리 인덱싱)→decode(테이블 참조)→execute(핸들러 분기)”의 흐름을 태그합니다. LLM은 이 태그열(상태머신 로그)을 근거로 판별만 하면 됩니다. (mlir.llvm.org)
창의적 방법 (3)
- “VM 지문(fingerprint)” 벡터화 & LLM 라벨링
Tigress 등 공개 VM 난독화로 합성 바이너리를 다량 생성해, 각 바이너리에서 위 지표(간접분기 엔트로피, 핸들러 길이/카디널리티, 점프테이블 산포, mca 지표 등)를 벡터화하고 LLM에 few-shot 예시로 첨부합니다. 실환경 시료는 지도 없이도 지문 유사도로 스스로 판별하게 합니다. (tigress.cs.arizona.edu, tigress.wtf) - “루프–스위치 모티프 서명” 생성 규칙
가상화 연구(디버추얼라이제이션 문헌)에서 보고된 인터프리터 구조를 규칙화해, CFG 패턴을 해시로 압축(예: [헤드 루프 1개 + 핸들러 군집 k개 + 간접분기 허브 out-degree d] 형태)합니다. LLM에는 해시와 소수 지표만 주어 ‘해시 매칭+설명’ 답변을 유도합니다. (www2.cs.arizona.edu, cs.gmu.edu, ScienceDirect) - “설명가능 프롬프트” 포맷 표준화
LLM 입력을 “정규화 CFG(요약) + 통계표 + 동적 힌트 + 예시 템플릿”의 고정 포맷으로 만들고, 각 필드에 LLVM 도구가 산출한 근거(툴/옵션/버전)를 함께 첨부합니다. 판별 정확도뿐 아니라 근거 회수(Explainability)와 재현성을 동시에 확보합니다. (llvm.org)
참고: LLVM은 바이너리 핸들링에 MC/objdump/Object 계층, 실행 프로파일과 레이아웃에 BOLT, 정적 성능 분석에 llvm-mca, 동적 트레이싱에 XRay, 분석·정규화에 MIR/MLIR 등 폭넓은 도구군을 제공합니다. 위 조합은 “난독화 코드 → (LLVM로) 정규화된 특징/서명 → (LLM로) 최종 판별”의 2단 구성으로 설계하는 것을 전제로 합니다. (The LLVM Project Blog, llvm.org, GitHub, mlir.llvm.org)
Perplexity AI의 응답
LLVM을 '바이너리를 이용한 제어구조 판별 도구(llm) 개발'에 적용할 수 있는 10가지 아이디어
- LLVM IR로 제어흐름 포맷 변환: 바이너리를 LLVM IR로 리프팅해 아키텍처 독립적이고 난독화에도 강인한 제어흐름 그래프(CFG)를 생성, loop-switch 변형 탐지에 활용.
- 기본 블록 간 분기 패턴 추출: LLVM의 기본 블록(block) 및 분기 명령(branch, switch 등) 분포를 수치화해 난독화 특징(예: loop-switch 집중도)으로 활용.
- Loop-Switch 특이 구조 정량화: LLVM IR에서 반복문(loops)과 switch-case 분기 사용 정도를 정량적으로 분석, fetch-detect-execute 패턴의 비정상적 빈도 탐지.
- 바이너리의 함수 호출 그래프(FCG) 추출: 바이너리를 LLVM으로 변환한 뒤 함수 호출 그래프를 자동 생성·시각화해, 전형적인 가상머신 기반 난독화 패턴(짧은 dispatcher, 비정상적 호출 깊이 등) 탐지에 활용.patents.google
- 데이터 흐름 분석 및 변수 추적: LLVM IR에서 주요 변수 및 피연산자의 흐름을 추적, fetch-detect-execute 패턴이 반복되는 구조 탐지.
- 패턴 매칭 기반 자동 탐지 룰 개발: LLVM IR을 패턴 벡터로 변환 후, 기존 난독화된 코드에서 추출한 패턴과 비교하여 유사도 검출.
- IR 이미지 변환 + 딥러닝 모델 적용: LLVM IR을 이미지로 변환, CNN 등 딥러닝 모델에 입력시켜 바이너리의 난독화 여부 자동 판별.foxforensic.tistory+1
창의적인 추가 아이디어
- LLVM Pass로 실시간 난독화 패턴 탐지: 직접 LLVM Pass를 제작해 IR 생성 단계에서 loop-switch, dispatcher 등 의심 패턴을 실시간 탐지·로그화.
- IR 코드 특징 기반 anomaly score 도출: LLVM IR에서 각 제어구조, 분기, 루프의 빈도와 네트워크 특성을 수치화한 뒤 통계적 이상치 탐지로 난독화 여부를 평가.
- 자연어로 해석된 IR 기반 LLM fine-tuning: 주요 LLVM IR 패턴을 자연어 설명(코드 코멘트 등)으로 LLM에 직접 식별 정보를 제공, LLM의 판별력을 강화.
각 방법은 LLVM의 범용성(언어/아키텍처 독립성), 코드 패턴의 정량적 분석, ML/AI와의 융합까지 다양한 방식으로 활용할 수 있습니다.kci+2
출처 :
- https://patents.google.com/patent/WO2018101575A1/ko
- https://foxforensic.tistory.com/18
- https://www.kci.go.kr/kciportal/ci/sereArticleSearch/ciSereArtiView.kci?sereArticleSearchBean.artiId=ART003051747
- https://hackyboiz.github.io/2025/04/28/OUYA77/Anti_part3/kr/
- https://jok.kiise.or.kr/digital-library/manuscript/file/100937/NODE11753218.pdf
- https://blog.jeje.work/llm----
- https://velog.io/@qorjiwon/%EC%A0%95%EB%B3%B4%EB%B3%B4%ED%98%B8-8.-%EC%95%85%EC%84%B1%EC%BD%94%EB%93%9C%EC%99%80-%EB%82%9C%EB%8F%85%ED%99%94
- https://www.youtube.com/watch?v=BsT3TRJPq10
- https://repository.hanyang.ac.kr/bitstream/20.500.11754/117770/1/%EC%9E%84%EB%B2%A0%EB%94%94%EB%93%9C%20%EA%B8%B0%EA%B8%B0%20%EB%B0%94%EC%9D%B4%EB%84%88%EB%A6%AC%20%EC%B7%A8%EC%95%BD%EC%A0%90%20%EB%B6%84%EC%84%9D%20%ED%9A%A8%EC%9C%A8%EC%84%B1%20%EC%A0%9C%EA%B3%A0%EB%A5%BC%20%EC%9C%84%ED%95%9C%20%EC%A4%91%EA%B0%84%EC%96%B4%20%EB%B3%80%ED%99%98%20%EA%B8%B0%EC%88%A0.pdf
- https://cluberwsoh9812.tistory.com/41
추가 질문
- 프롬프트 : 기존 연구에서 LLVM이 제어 흐름 조작을 탐지하는 데 어떻게 활용됐는지 사례를 기반으로 제안
- 응답 :
LLVM 기반의 제어 흐름 조작 탐지 활용 사례는 다음과 같이 제안할 수 있습니다.
- Control Flow Flattening 난독화 탐지
LLVM 패스(Transform Pass)를 통해 의도적으로 제어흐름을 switch-case 및 dispatcher로 평면화하는 난독화 패턴(Control Flow Flattening)에 대한 전후의 제어 흐름 그래프(CFG) 변화를 분석함으로써, 비정상적으로 변형된 코드(난독화 본문 진입 이후 모든 블록이 한 지점으로 돌아가는 구조) 탐지 사례가 있습니다.ufo.stealien - LLVM IR 기반 정적 분석
바이너리 또는 프로그램을 LLVM IR로 리프팅한 후, 정적 분석을 통해 분기문, 루프, 함수 호출의 제어흐름을 추출·정량화하여, 자주 사용되는 분기 구조 등 비정상적인 흐름의 패턴(특정 블록에서 반복적으로 분기)를 감지하는 기법이 검증된 바 있습니다.koreascience+1 - 이미지 변환 + 머신러닝 모델 적용 사례
난독화 및 조작이 적용된 바이너리를 LLVM IR로 디컴파일한 뒤, IR 코드를 이미지로 변환하고 CNN 기반 머신러닝 모델에 학습시켜 제어 흐름 변형 및 난독화 적용 여부를 판별하는 연구가 제시되었습니다.kci
이와 같이, LLVM은 IR 변환을 활용한 제어 흐름 그래프 분석, 커스텀 탐지 패스 개발, ML 기반 자동 탐지 등 다양한 방식으로 제어 흐름 조작 탐지에 활용되고 있습니다.
- https://ufo.stealien.com/2022-07-13/llvm-flow-flatten
- https://koreascience.kr/article/JAKO202211954997025.page
- https://repository.hanyang.ac.kr/bitstream/20.500.11754/117770/1/%EC%9E%84%EB%B2%A0%EB%94%94%EB%93%9C%20%EA%B8%B0%EA%B8%B0%20%EB%B0%94%EC%9D%B4%EB%84%88%EB%A6%AC%20%EC%B7%A8%EC%95%BD%EC%A0%90%20%EB%B6%84%EC%84%9D%20%ED%9A%A8%EC%9C%A8%EC%84%B1%20%EC%A0%9C%EA%B3%A0%EB%A5%BC%20%EC%9C%84%ED%95%9C%20%EC%A4%91%EA%B0%84%EC%96%B4%20%EB%B3%80%ED%99%98%20%EA%B8%B0%EC%88%A0.pdf
- https://www.kci.go.kr/kciportal/ci/sereArticleSearch/ciSereArtiView.kci?sereArticleSearchBean.artiId=ART003051747
- https://koreascience.kr/article/JAKO202513661203786.pdf
- https://www.in-com.com/ko/blog/pointer-analysis-in-c-can-static-code-analysis-solve-the-challenges/
- https://kiisc.or.kr/society/kiisc/homepage/bbs/downloadBoardImage?uploadedFileId=5930
- https://www.themoonlight.io/ko/review/irfuzzer-specialized-fuzzing-for-llvm-backend-code-generation
- https://grad.dankook.ac.kr/web/grad/-33?p_p_id=GradInfo_WAR_empInfoportlet&p_p_lifecycle=0&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_pos=2&p_p_col_count=3&_GradInfo_WAR_empInfoportlet_empId=GnEz%2FDF4fdKHQEQ3cRDkdA%3D%3D&_GradInfo_WAR_empInfoportlet_action=view_message&_GradInfo_WAR_empInfoportlet_deptId=2000002520
- https://m.boannews.com/html/detail.html?idx=91939
- https://www.dbpia.co.kr/journal/articleDetail?nodeId=NODE07503542
아이디어 종합 정리
- 다양한 방법을 통한 패턴 통계 및 정량화 방법 등의 수치적 방법의 사용
- CFG 나 FCG 추출하여 탐지에 활용
- 실제 Flattening 전후 CFG 변화를 분석, 모든 블록이 한 지점으로 돌아가는 구조를 탐지한 사례
- 바이너리를 IR로 디컴파일 한 후 IR 코드를 이미지 변환한 후 CNN 기반 머신러닝 모델에 학습, 제어 흐름 변형 및 난독화 여부 판별 연구
AI 별 응답 경향 차이
Chat GPT-5-thinking
- 영어권 논문 및 블로그를 참고
- 보다 전문적이며, 난이도가 있는 내용을 소개
- 각 아이디어 당 1개 이상의 출처를 제공
Perplexity AI
- 한국 논문 및 블로그를 참고
- 기존 틀에서 벗어나서 다양한 시도의 연구를 소개
- 요청 사항에 비 간단한 내용 설명