본문 바로가기

x64dbg 디버거 활용한 악성코드 행동 동적 분석 실습, 리버스 엔지니어링 실전

728x90

x64dbg는 Windows 플랫폼에서 가장 강력하고 널리 사용되는 오픈소스 디버거입니다. 리버스 엔지니어링, 악성코드 분석, 보안 취약점 연구, CTF 대회 등 다양한 분야에서 필수적인 도구로 자리잡고 있습니다. 처음 접하는 분들도 쉽게 이해하고 활용할 수 있도록 정리합니다.

x64dbg란 무엇인가?

1. 기본 개념과 특징

x64dbg는 Windows 환경에서 실행되는 사용자 모드(User-mode) 디버거로, 32비트와 64비트 프로그램을 모두 디버깅할 수 있습니다. OllyDbg의 정신적 후속작으로 개발되었으며, 더욱 현대적이고 강력한 기능을 제공합니다.

  • 듀얼 아키텍처 지원: x32dbg(32비트)와 x64dbg(64비트) 두 가지 버전 제공
  • 직관적인 GUI: 복잡한 디버깅 작업을 시각적으로 쉽게 수행
  • 강력한 디스어셈블리 엔진: Zydis, XEDParse, asmjit 등 최신 엔진 탑재
  • 확장 가능한 플러그인 시스템: 필요에 따라 기능을 자유롭게 추가
  • 활발한 오픈소스 커뮤니티: 지속적인 업데이트와 개선

2. 주요 활용 분야

  1. 리버스 엔지니어링: 소스코드 없는 프로그램의 동작 원리 분석
  2. 악성코드 분석: 악성 프로그램의 행위 분석 및 대응
  3. 보안 취약점 연구: 소프트웨어의 보안 결함 발견 및 검증
  4. CTF 및 워게임: 보안 대회에서의 바이너리 문제 해결
  5. 소프트웨어 품질 보증: 프로그램의 예외 상황 및 오류 디버깅

설치 및 환경 설정

1. 시스템 요구사항

  • 운영체제: Windows 7 SP1 이상 (32비트/64비트)
  • 메모리: 최소 2GB RAM (4GB 이상 권장)
  • 저장공간: 최소 100MB 여유 공간
  • 추가사항: Visual C++ 재배포 가능 패키지

2. 설치 과정

  1. 다운로드
  2. 압축 해제
    • 원하는 위치에 압축 해제 (예: C:\Tools\x64dbg)
    • 쓰기 권한이 있는 폴더 선택 필수
  3. 초기 실행
    📁 x64dbg
    ├── 📁 x32
    │ └── x32dbg.exe
    ├── 📁 x64
    │ └── x64dbg.exe
    └── x96dbg.exe (선택 도구)
  4. 환경 설정
    • x96dbg.exe 실행하여 쉘 확장 등록
    • 바탕화면 바로가기 생성 옵션 선택

3. 초기 환경 설정

  1. 언어 설정
    • Options → Preferences → Language에서 한국어 선택 가능
  2. 테마 및 색상
    • Options → Theme에서 다크/라이트 테마 선택
    • 코드 하이라이팅 색상 커스터마이징
  3. 단축키 설정
    • Options → Shortcuts에서 개인 선호에 맞게 조정
  4. 플러그인 폴더 설정
    • 기본 경로: release\x64\pluginsrelease\x32\plugins
300x250

인터페이스 구성과 기본 사용법

1. 메인 인터페이스 구성

x64dbg의 인터페이스는 여러 개의 도킹 가능한 창으로 구성되어 있습니다.

  1. CPU 창 (Disassembly)
    • 프로그램의 어셈블리 코드 표시
    • 현재 실행 위치(EIP/RIP) 하이라이트
    • 브레이크포인트 설정 및 관리
  2. 레지스터 창
    • CPU 레지스터 실시간 모니터링
    • 값 변경 시 색상으로 표시
    • 더블클릭으로 직접 수정 가능
  3. 메모리 덤프 창
    • 메모리 내용을 HEX와 ASCII로 표시
    • 메모리 검색 및 수정 기능
  4. 스택 창
    • 현재 스레드의 스택 상태 표시
    • 함수 호출 추적 가능
  5. 로그 창
    • 디버깅 이벤트 및 명령어 히스토리
    • 플러그인 출력 메시지

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

패치 적용 방법

  1. 수정할 명령어 선택
  2. 우클릭 → Assemble (Space)
  3. 새로운 명령어 입력
  4. 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. 기업 환경에서의 사용 가이드

내부 보안 정책 예시

  1. 승인 절차
    • 분석 대상 및 목적 명시
    • 상급자 승인 획득
    • 분석 결과 보고서 작성
  2. 사용 제한
    • 회사 제품 무단 분석 금지
    • 경쟁사 제품 분석 시 법무팀 검토
    • 개인 목적 사용 금지
  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. 공식 문서 및 튜토리얼

5. 추천 학습 경로

초급자 과정 (1-2개월)

  1. 어셈블리어 기초
  2. PE 파일 구조
  3. Windows API 이해
  4. 기본 디버깅 기법

중급자 과정 (3-6개월)

  1. 안티 디버깅 기법
  2. 패킹/언패킹
  3. 플러그인 활용
  4. 스크립팅

고급자 과정 (6개월 이상)

  1. 커널 디버깅
  2. 익스플로잇 개발
  3. 플러그인 개발
  4. 자동화 도구 제작

6. 커뮤니티 및 지원

  • 공식 포럼: https://x64dbg.com/forum/
  • GitHub Issues: 버그 리포트 및 기능 요청
  • Discord/Telegram: 실시간 커뮤니티 지원

향후 전망

x64dbg는 Windows 플랫폼에서 가장 활발하게 개발되고 있는 오픈소스 디버거로, 지속적인 업데이트와 커뮤니티 지원을 받고 있습니다. 다음과 같은 발전이 기대됩니다.

  1. AI 통합: 자동 분석 및 패턴 인식
  2. 클라우드 연동: 협업 분석 플랫폼
  3. 크로스 플랫폼: Linux/macOS 지원
  4. 향상된 시각화: 3D 그래프 뷰

x64dbg를 마스터하는 것은 단순히 도구 사용법을 익히는 것을 넘어, 시스템의 저수준 동작을 이해하고 보안 위협에 대응할 수 있는 능력을 기르는 과정입니다. 지속적인 학습과 실습을 통해 전문가로 성장하시기 바랍니다.


모든 디버깅 및 리버스 엔지니어링 활동은 관련 법규를 준수하여 수행해야 하며, 악의적인 목적으로 사용해서는 안 됩니다.

728x90
그리드형(광고전용)

댓글