BLOG
Tracefield · 02
Tracefield · 01
블로그 · 14
Vibe Audit · 04
Vibe Audit · 03
Vibe Audit · 02
Vibe Audit · 01
출판편집자 · 01
StudyTree · 01
SecurityOps · 02
SecurityOps · 01
AI챗봇 · 04
AI챗봇 · 03
AI챗봇 · 02
AI챗봇 · 01
퍼플심 · 04
퍼플심 · 03
퍼플심 · 02
퍼플심 · 01
블로그 · 13
rootscan · 07
rootscan · 06
블로그 · 12
블로그 · 11
블로그 · 10
블로그 · 09
블로그 · 08
블로그 · 07
블로그 · 06
블로그 · 05
블로그 · 04
블로그 · 03
블로그 · 02
블로그 · 01
rootscan · 05
rootscan · 04
rootscan · 03
asmspeak · 03
asmspeak · 02
rootscan · 02
asmspeak · 01
rootscan · 01
웹보안도구 · 02
웹보안도구 · 01
루트캠프 · 02
루트캠프 · 01
All notes 167
Ghidra를 활용한 디컴파일(Decompilation) 분석
IDA Pro는 강력하지만 개인 학습용으로 쓰기에는 비용 장벽이 크다. 그래서 개인이나 입문 단계에서는 Ghidra를 많이 쓴다. NSA가 공개한 오픈소스 도구인데, 무료치고 기능이 꽤 강력하다.
1. 정적 분석과 디컴파일러
어셈블리 코드는 기계어와 가까워서 동작을 정확히 읽기 좋다. 대신 가독성은 매우 떨어진다. 수만 줄을 눈으로만 따라가면 금방 한계가 온다.
디컴파일러는 이 기계어를 분석해서 C와 비슷한 의사 코드로 복원해준다. 원본 소스는 아니지만, 전체 로직을 파악하는 데는 훨씬 효율적이다.
MOV EAX, [RBP-0x4]->user_input = local_varCMP EAX, 10/JNE->if (user_input == 10) { ... }
물론 원본과 100% 같지는 않다. 변수명은 사라지고, 구조도 일부 달라질 수 있다. 그래도 큰 흐름을 잡기에는 훨씬 빠르다.
2. Ghidra 설치
Ghidra는 Java 기반이라 JDK 11 이상이 필요하다. 보통은 OpenJDK 17 정도면 무난하다. 공식 사이트에서 받아서 ghidraRun 스크립트를 실행하면 시작할 수 있다.
3. 분석 실습: Rename & Retype
실제로 분석할 때 가장 중요한 작업 중 하나는 이름 붙이기다. 처음 열면 함수명과 변수명이 전부 의미 없는 형태로 보이는 경우가 많다.
void undefined4 func_123(int iVar1) {
if (iVar1 == 0xdeadbeef) { ... }
}
그래서 문맥을 보고 func_123이 비밀번호 검증 함수인지, iVar1이 사용자 입력인지 추론해야 한다. 확인이 되면 L로 이름을 바꿔준다.
void check_password(int input_key) {
if (input_key == 0xdeadbeef) { ... }
}
이렇게 이름을 붙여가며 의미를 복원하는 과정이 리버싱의 핵심에 가깝다. 다만 디컴파일 결과가 항상 맞는 건 아니므로, 왼쪽 Listing View의 어셈블리와 꼭 교차 확인하는 습관이 필요하다.

