x64dbg는 Windows 플랫폼에서 가장 강력하고 널리 사용되는 오픈소스 디버거입니다. 리버스 엔지니어링, 악성코드 분석, 보안 취약점 연구, CTF 대회 등 다양한 분야에서 필수적인 도구로 자리잡고 있습니다. 처음 접하는 분들도 쉽게 이해하고 활용할 수 있도록 정리합니다.
x64dbg란 무엇인가?
1. 기본 개념과 특징
x64dbg는 Windows 환경에서 실행되는 사용자 모드(User-mode) 디버거로, 32비트와 64비트 프로그램을 모두 디버깅할 수 있습니다. OllyDbg의 정신적 후속작으로 개발되었으며, 더욱 현대적이고 강력한 기능을 제공합니다.
- 듀얼 아키텍처 지원: x32dbg(32비트)와 x64dbg(64비트) 두 가지 버전 제공
- 직관적인 GUI: 복잡한 디버깅 작업을 시각적으로 쉽게 수행
- 강력한 디스어셈블리 엔진: Zydis, XEDParse, asmjit 등 최신 엔진 탑재
- 확장 가능한 플러그인 시스템: 필요에 따라 기능을 자유롭게 추가
- 활발한 오픈소스 커뮤니티: 지속적인 업데이트와 개선
2. 주요 활용 분야
- 리버스 엔지니어링: 소스코드 없는 프로그램의 동작 원리 분석
- 악성코드 분석: 악성 프로그램의 행위 분석 및 대응
- 보안 취약점 연구: 소프트웨어의 보안 결함 발견 및 검증
- CTF 및 워게임: 보안 대회에서의 바이너리 문제 해결
- 소프트웨어 품질 보증: 프로그램의 예외 상황 및 오류 디버깅
설치 및 환경 설정
1. 시스템 요구사항
- 운영체제: Windows 7 SP1 이상 (32비트/64비트)
- 메모리: 최소 2GB RAM (4GB 이상 권장)
- 저장공간: 최소 100MB 여유 공간
- 추가사항: Visual C++ 재배포 가능 패키지
2. 설치 과정
- 다운로드
- 공식 GitHub 릴리즈 페이지 방문: https://github.com/x64dbg/x64dbg/releases
- 최신 스냅샷 다운로드 (약 20-30MB)
- 압축 해제
- 원하는 위치에 압축 해제 (예:
C:\Tools\x64dbg
) - 쓰기 권한이 있는 폴더 선택 필수
- 원하는 위치에 압축 해제 (예:
- 초기 실행
📁 x64dbg ├── 📁 x32 │ └── x32dbg.exe ├── 📁 x64 │ └── x64dbg.exe └── x96dbg.exe (선택 도구)
- 환경 설정
x96dbg.exe
실행하여 쉘 확장 등록- 바탕화면 바로가기 생성 옵션 선택
3. 초기 환경 설정
- 언어 설정
Options → Preferences → Language
에서 한국어 선택 가능
- 테마 및 색상
Options → Theme
에서 다크/라이트 테마 선택- 코드 하이라이팅 색상 커스터마이징
- 단축키 설정
Options → Shortcuts
에서 개인 선호에 맞게 조정
- 플러그인 폴더 설정
- 기본 경로:
release\x64\plugins
및release\x32\plugins
- 기본 경로:
인터페이스 구성과 기본 사용법
1. 메인 인터페이스 구성
x64dbg의 인터페이스는 여러 개의 도킹 가능한 창으로 구성되어 있습니다.
- CPU 창 (Disassembly)
- 프로그램의 어셈블리 코드 표시
- 현재 실행 위치(EIP/RIP) 하이라이트
- 브레이크포인트 설정 및 관리
- 레지스터 창
- CPU 레지스터 실시간 모니터링
- 값 변경 시 색상으로 표시
- 더블클릭으로 직접 수정 가능
- 메모리 덤프 창
- 메모리 내용을 HEX와 ASCII로 표시
- 메모리 검색 및 수정 기능
- 스택 창
- 현재 스레드의 스택 상태 표시
- 함수 호출 추적 가능
- 로그 창
- 디버깅 이벤트 및 명령어 히스토리
- 플러그인 출력 메시지
2. 기본 디버깅 작업
실행 파일 로드하기
1. File → Open (Ctrl+O)
2. 분석할 EXE 파일 선택
3. 자동으로 Entry Point에서 일시정지
브레이크포인트 설정 예제
; MessageBoxA 함수에 브레이크포인트 설정
bp MessageBoxA
; 특정 주소에 브레이크포인트 설정
bp 0x401000
; 조건부 브레이크포인트
bp 0x401000, eax==5
단계별 실행 명령어
기능 | 단축키 | 설명 |
---|---|---|
Run | F9 | 다음 브레이크포인트까지 실행 |
Step Into | F7 | 함수 내부로 진입하여 한 줄 실행 |
Step Over | F8 | 함수를 건너뛰고 한 줄 실행 |
Execute till Return | Ctrl+F9 | 현재 함수 끝까지 실행 |
Run to Selection | F4 | 선택한 위치까지 실행 |
고급 기능 활용
1. 메모리 분석
메모리 맵 활용
View → Memory Map 창에서:
- 프로세스의 전체 메모리 레이아웃 확인
- 각 섹션의 권한 (R/W/X) 확인
- DLL 로드 주소 확인
문자열 검색 예제
1. Search → Current Module → String references
2. 검색할 문자열 입력 (예: "password", "serial")
3. 발견된 위치로 이동하여 분석
2. API 호출 추적
Import Address Table (IAT) 분석
1. Symbols 탭에서 모듈 선택
2. Import/Export 정보 확인
3. 주요 API 함수에 브레이크포인트 설정
예시 - 파일 관련 API 추적:
bp CreateFileW
bp ReadFile
bp WriteFile
3. 패치 및 코드 수정
바이너리 패치 예제
; 조건 분기 수정 (JE → JNE)
원본: 74 05 ; JE SHORT +5
패치: 75 05 ; JNE SHORT +5
; NOP으로 명령어 무효화
원본: E8 12 34 56 78 ; CALL 함수
패치: 90 90 90 90 90 ; NOP x5
패치 적용 방법
- 수정할 명령어 선택
- 우클릭 → Assemble (Space)
- 새로운 명령어 입력
- File → Patch file로 저장
플러그인 시스템 완벽 가이드
1. 플러그인 설치 및 관리
플러그인 설치 과정
1. 플러그인 다운로드 (.dp32 또는 .dp64 파일)
2. 해당 아키텍처 plugins 폴더에 복사
- 32비트: x64dbg\release\x32\plugins\
- 64비트: x64dbg\release\x64\plugins\
3. x64dbg 재시작
4. Plugins 메뉴에서 확인
2. 필수 플러그인 소개
1. Scylla - Import Reconstructor
용도: 패킹된 실행 파일의 Import Table 복구
사용법:
1. 언패킹 후 OEP에서 일시정지
2. Plugins → Scylla
3. IAT Autosearch → Get Imports
4. Fix Dump 실행
2. ScyllaHide - 안티 디버깅 우회
용도: 다양한 안티 디버깅 기법 우회
주요 기능:
- IsDebuggerPresent 우회
- CheckRemoteDebuggerPresent 우회
- NtQueryInformationProcess 후킹
- 타이밍 체크 우회
3. xAnalyzer - 자동 코드 분석
용도: 함수 인자 및 API 호출 자동 분석
특징:
- 함수 파라미터 자동 주석
- API 호출 패턴 분석
- 크로스 레퍼런스 생성
4. x64dbgpy - Python 스크립팅
# 예제: 모든 문자열 참조 출력
import x64dbgpy
def print_strings():
refs = x64dbgpy.get_string_refs()
for ref in refs:
print(f"0x{ref:X}: {x64dbgpy.read_string(ref)}")
print_strings()
3. 플러그인 개발
기본 플러그인 구조
#include "plugin.h"
// DLL 진입점
BOOL APIENTRY DllMain(HMODULE hModule, DWORD reason, LPVOID reserved) {
return TRUE;
}
// 플러그인 초기화
extern "C" __declspec(dllexport) bool pluginit(PLUG_INITSTRUCT* initStruct) {
initStruct->pluginVersion = PLUGIN_VERSION;
strcpy_s(initStruct->pluginName, "MyPlugin");
// 명령어 등록
_plugin_registercommand(pluginHandle, "mycommand", cbMyCommand, false);
return true;
}
// 명령어 콜백
bool cbMyCommand(int argc, char* argv[]) {
_plugin_logprintf("Hello from MyPlugin!\n");
return true;
}
실전 활용 사례
1. 악성코드 분석 사례
사례: 간단한 파일 암호화 랜섬웨어 분석
1. 정적 분석
- 문자열 검색: ".encrypted", "bitcoin", "ransom"
- Import 함수 확인: CryptEncrypt, FindFirstFile
2. 동적 분석
- CreateFile API에 브레이크포인트
- 파일 열기 패턴 관찰
- CryptEncrypt 호출 시 파라미터 확인
3. 암호화 루틴 분석
bp CryptEncrypt
실행 후 스택에서 키 정보 확인
4. 복호화 가능성 검토
- 대칭키 암호화 여부 확인
- 키 생성 로직 역분석
2. 소프트웨어 크랙 방지 우회
사례: 시리얼 검증 루틴 분석
; 일반적인 시리얼 체크 패턴
00401234 CALL CheckSerial
00401239 TEST EAX, EAX
0040123B JE InvalidSerial ; EAX가 0이면 실패
0040123D JMP ValidSerial
; 분석 과정
1. CheckSerial 함수 내부 분석
2. 입력값과 비교되는 값 찾기
3. 알고리즘 역산 또는 조건 분기 패치
3. CTF 바이너리 문제 해결
예제: 플래그 찾기 문제
1. 실행 파일에서 "flag{" 문자열 검색
2. XOR 인코딩된 경우:
- XOR 루틴 찾기
- 키 값 확인
- 디코딩 수행
3. 동적 생성되는 경우:
- 메모리에 쓰기 작업 모니터링
- VirtualAlloc 후 메모리 덤프
- 문자열 패턴 검색
보안 고려사항 및 윤리적 사용
1. 법적 고려사항
합법적 사용 범위
- 본인 소유 소프트웨어 분석
- 보안 취약점 연구 (책임있는 공개)
- 교육 및 학습 목적
- 악성코드 분석 및 대응
불법 행위
- 저작권 보호 우회
- 라이선스 인증 무력화
- 타인 소프트웨어 무단 수정
- 악의적 목적의 리버싱
2. 안전한 분석 환경 구축
권장 설정
1. 가상머신 사용 (VMware, VirtualBox)
- 스냅샷 기능 활용
- 네트워크 격리 설정
2. 샌드박스 환경
- Windows Sandbox
- Sandboxie-Plus
3. 분석 전 체크리스트
□ 백신 프로그램 일시 중지
□ 중요 데이터 백업
□ 네트워크 연결 차단
□ 스냅샷 생성
3. 기업 환경에서의 사용 가이드
내부 보안 정책 예시
- 승인 절차
- 분석 대상 및 목적 명시
- 상급자 승인 획득
- 분석 결과 보고서 작성
- 사용 제한
- 회사 제품 무단 분석 금지
- 경쟁사 제품 분석 시 법무팀 검토
- 개인 목적 사용 금지
- 보안 조치
- 분석 PC 격리
- 분석 데이터 암호화
- 접근 로그 기록
문제 해결 및 최적화
1. 자주 발생하는 문제와 해결법
1. 디버거 탐지 우회
문제: "Debugger detected!" 메시지
해결:
- ScyllaHide 플러그인 사용
- Manual Map 기법 적용
- 커널 디버거 전환 고려
2. 패킹/난독화된 코드
문제: 코드가 암호화되어 분석 불가
해결:
1. 패커 식별 (PEiD, Detect It Easy)
2. 언패커 도구 사용
3. OEP 찾기 및 덤프
4. Import Table 복구 (Scylla)
3. 성능 문제
문제: 대용량 파일 분석 시 멈춤
해결:
- 불필요한 플러그인 비활성화
- 로그 레벨 조정
- 메모리 캐시 크기 증가
- 64비트 버전 사용
2. 효율적인 워크플로우
분석 템플릿
[ ] 1. 정적 분석
[ ] 파일 정보 수집 (PE 헤더, 섹션)
[ ] 문자열 추출
[ ] Import/Export 함수 목록
[ ] 리소스 확인
[ ] 2. 동적 분석 준비
[ ] 가상환경 준비
[ ] 모니터링 도구 설정
[ ] 네트워크 격리
[ ] 3. 동적 분석
[ ] Entry Point 분석
[ ] 주요 API 브레이크포인트
[ ] 행위 패턴 기록
[ ] 메모리 덤프
[ ] 4. 심화 분석
[ ] 핵심 로직 역분석
[ ] 알고리즘 추출
[ ] IOC 수집
[ ] 5. 문서화
[ ] 분석 보고서 작성
[ ] YARA 룰 생성
[ ] 대응 방안 제시
학습 리소스 및 참고자료
1. 추천 플러그인 목록 (x64dbg 플러그인 Best)
x64dbg는 플러그인을 통해 기능을 확장할 수 있으며, 실무 및 교육에 매우 유용한 플러그인들이 많습니다.
플러그인 | 설명 | GitHub/출처 |
---|---|---|
🔍 xAnalyzer | 코드 흐름을 시각적으로 분석하고, API 사용 추적 | xAnalyzer GitHub |
🔓 Scylla | IAT(Import Address Table) 복구에 사용 | Scylla |
🛡 TitanHide | Anti-Debug 기술 우회 (디버깅 탐지를 숨김) | TitanHide |
📜 Labeless | IDA Pro와 연동하여 동적 분석 공유 | Labeless |
📈 Graph | x64dbg 내에서 그래프 기반 코드 흐름 보기 | x64dbg 내장 플러그인 |
📦 dbgTools | 코드 패치, 메모리 덤프, 스냅샷 관리 등 다기능 제공 | dbgTools |
🔧 x64dbgpy | Python으로 x64dbg 자동화 스크립트 실행 가능 | x64dbgpy |
설치 방법: x64dbg → Plugins → Plugin Manager에서 설치하거나 GitHub에서 .dp32 또는 .dp64 파일을 받아 plugins 폴더에 복사 후 실행
2. 실습 바이너리 예제 목록
실습용 바이너리는 리버싱 및 악성코드 분석 교육에 적합한 무해한 프로그램을 사용해야 하며, 아래는 추천하는 공개 실습 바이너리입니다.
✅ CrackMe 시리즈
이름 | 설명 | 링크 |
---|---|---|
🧠 CrackMe by Tuts4You | 초보~고급 수준 별로 다양한 실습 가능 | https://tuts4you.com/download.php?list.17 |
🔒 Crackmes.one | 실전처럼 구성된 정품 인증 우회 문제 | https://crackmes.one |
✅ 악성코드 분석 실습용 바이너리
이름 | 설명 | 링크 |
---|---|---|
☣️ Malware Traffic Analysis | PCAP + 바이너리 세트로 네트워크 분석 연계 실습 | https://www.malware-traffic-analysis.net |
🧬 TheZoo (Malware DB) | 실제 악성코드를 실험 가능한 교육 환경에 활용 | https://github.com/ytisf/theZoo (격리 환경 필요) |
⚠️ 주의: 악성코드 예제는 반드시 가상 머신, 네트워크 차단 환경에서 사용해야 하며, 내부 네트워크와 절대 연결하지 마세요.
3. 내부 교육자료 템플릿 (x64dbg 리버스 엔지니어링 실습용)
📄 교육 개요 템플릿
## 🎓 교육 제목: x64dbg를 활용한 리버스 엔지니어링 실습
- 대상: 보안팀 및 개발팀 실무자
- 시간: 3시간 (이론 1시간 + 실습 2시간)
- 준비물: 실습용 CrackMe 바이너리, x64dbg, VirtualBox
### 교육 목표
- x64dbg 설치 및 환경 이해
- 브레이크포인트 설정 및 분석 방법 숙지
- API 트레이싱 및 패치 실습 수행
🧪 실습 과제 예시
## 🧪 실습 1: 시리얼 키 우회
- 대상 파일: crackme_level1.exe
- 목표: 프로그램의 인증 루틴 분석 후 시리얼 검증 우회
- 주요 단계:
1. 프로그램 실행 후 시리얼 입력창 확인
2. 브레이크포인트 설정 (예: strcmp 또는 MessageBoxA)
3. 조건문 확인 후 Jump 변경 (JNZ → JZ)
🛡 보안 점검 적용 예시
## 🛡 실습 2: Anti-Debug 우회 및 탐지
- 대상 파일: anti_dbg.exe
- 목표: `IsDebuggerPresent` 호출 우회
- 대응 방법:
- 메모리 패치 또는 플러그인(TitanHide) 활용
- 코드 흐름 분석 후 조건문 우회
📚 실습 결과 보고 양식 (Template)
## 📊 실습 결과 보고서
- 실습자: 홍길동
- 분석 대상: crackme_level2.exe
- 브레이크포인트 위치: 0x00401234
- 주요 분석 내용:
- 문자열 비교 루틴 확인
- 조건문 JMP 방향 반전 후 인증 우회 성공
- 느낀점:
- x64dbg의 분석 기능이 강력하며, 플러그인 활용도 중요
4. 공식 문서 및 튜토리얼
- 공식 위키: https://github.com/x64dbg/x64dbg/wiki
- API 문서: https://x64dbg.com/docs/
- YouTube 채널: x64dbg tutorials
5. 추천 학습 경로
초급자 과정 (1-2개월)
- 어셈블리어 기초
- PE 파일 구조
- Windows API 이해
- 기본 디버깅 기법
중급자 과정 (3-6개월)
- 안티 디버깅 기법
- 패킹/언패킹
- 플러그인 활용
- 스크립팅
고급자 과정 (6개월 이상)
- 커널 디버깅
- 익스플로잇 개발
- 플러그인 개발
- 자동화 도구 제작
6. 커뮤니티 및 지원
- 공식 포럼: https://x64dbg.com/forum/
- GitHub Issues: 버그 리포트 및 기능 요청
- Discord/Telegram: 실시간 커뮤니티 지원
향후 전망
x64dbg는 Windows 플랫폼에서 가장 활발하게 개발되고 있는 오픈소스 디버거로, 지속적인 업데이트와 커뮤니티 지원을 받고 있습니다. 다음과 같은 발전이 기대됩니다.
- AI 통합: 자동 분석 및 패턴 인식
- 클라우드 연동: 협업 분석 플랫폼
- 크로스 플랫폼: Linux/macOS 지원
- 향상된 시각화: 3D 그래프 뷰
x64dbg를 마스터하는 것은 단순히 도구 사용법을 익히는 것을 넘어, 시스템의 저수준 동작을 이해하고 보안 위협에 대응할 수 있는 능력을 기르는 과정입니다. 지속적인 학습과 실습을 통해 전문가로 성장하시기 바랍니다.
모든 디버깅 및 리버스 엔지니어링 활동은 관련 법규를 준수하여 수행해야 하며, 악의적인 목적으로 사용해서는 안 됩니다.
댓글