0Pricing
Cyber Security Academy · 강의

난독화 해제와 분석 방해 기법

문자열 난독화, 제어 흐름 평탄화, 안티 디버깅, 패킹을 식별하고 우회합니다.

난독화 해제와 분석 방해 기법은(는) CoddyKit의 무료 Cyber Security Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Cyber Security Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Cyber Security Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

악성 코드가 난독화를 사용하는 이유

악성 코드 제작자는 정적 AV 시그니처 탐지, 분석가의 리버스 엔지니어링, 샌드박스 감지를 방해하기 위해 코드를 난독화합니다. 난독화 해제는 난독화된 형태의 코드를 읽을 수 있는 코드로 복원하는 과정입니다.

문자열 난독화

악성 코드는 C2 URL이나 API 이름을 평문으로 저장하는 경우가 드뭅니다. 일반적인 기법:

  • XOR 인코딩: 각 바이트에 key ^ char 적용
  • Base64 인코딩
  • 스택 문자열: 실행 중 문자를 하나씩 조합해 만든 문자열
  • 하드코딩된 키를 사용하는 사용자 지정 암호화

XOR 문자열 난독화 해제

XOR 키 찾기:

# If you see single-byte XOR:
import string
for key in range(256):
    decoded = bytes([b ^ key for b in encoded])
    if all(c in string.printable for c in decoded.decode('latin1')):
        print(f"Key {key}: {decoded}")

코드 패킹

패커는 원본 바이너리를 압축하거나 암호화하고, 실행 중에 이를 패킹 해제하거나 복호화하는 스텁을 추가합니다. 원본 코드는 디스크에 나타나지 않습니다. 예: UPX(정상적인 용도), 악성 코드에 사용되는 사용자 지정 패커.

탐지 방법: 작은 가져오기 테이블 + 높은 엔트로피 + PEID/Detect-It-Easy에 알려진 패커 시그니처가 있는지 확인합니다.

디버깅 방해 기법

악성 코드는 디버거를 감지하고 동작을 변경합니다:

  • IsDebuggerPresent() — Windows API 검사
  • 시간 측정 검사 — 디버거에서 실행되는 코드는 느리게 실행됨
  • 프로세스 추적 검사 — Linux 프로세스는 한 번만 추적할 수 있음
  • INT3 트랩 — 소프트웨어 중단점 감지
# Linux anti-ptrace:
if (ptrace(PTRACE_TRACEME, 0, 0, 0) == -1) {
    exit();  // already being traced!
}

VM 및 샌드박스 감지

악성 코드는 가상화되었거나 샌드박스인 환경을 감지하고 대기하거나 종료합니다:

  • 하이퍼바이저 비트를 확인하는 CPUID 검사
  • VM 전용 레지스트리 키, 프로세스, 파일 확인
  • 짧은 가동 시간, 최근 파일 없음, 브라우저 기록 없음
  • 마우스 이동 검사(자동화된 샌드박스는 마우스를 움직이지 않음)

제어 흐름 난독화

디스어셈블러를 혼란스럽게 만드는 기법:

  • 점프 난독화 — 계산된 주소를 통한 간접 점프
  • 불투명 조건식 — 분석을 혼란스럽게 만드는 항상 참인 조건
  • 명령어 중첩 — 명령어 스트림에 데이터를 삽입

GDB에서 디버깅 방해 기법 무력화

일반적인 디버깅 방해 기법 우회:

# Patch IsDebuggerPresent return value:
# In GDB: set $rax = 0 after the call
# Or use NOP sled to skip the check:
# In GDB: jump *0x401234  (skip the check)
# Force ptrace to succeed:
set follow-fork-mode child

동적 패킹 해제

패킹된 악성 코드에서는 패킹 해제 스텁을 원본 코드가 메모리에 올라올 때까지 실행한 다음 덤프합니다:

  1. 패커 스텁이 완료될 때까지 GDB에서 실행
  2. OEP(원본 진입점) 찾기 — 대개 VirtualAlloc에 중단점을 설정하고 jmp reg를 확인
  3. dump binary memory를 사용해 메모리를 파일로 덤프

에뮬레이션 기반 난독화 해제

바이너리를 실행하지 않고 코드를 에뮬레이션해 난독화된 문자열을 드러내는 도구:

  • FLOSS(FireEye) — 스택 문자열과 난독화된 문자열 추출
  • speakeasy — Windows API 에뮬레이션
  • Capa — 악성 코드 기능 자동 식별

패턴 인식

일반적인 악성 코드 패턴을 인식하면 분석이 빨라집니다:

  • API 해시: 실행 중 함수 가져오기를 확인하는 데 사용되는 함수 이름의 CRC32/ROR13 해시
  • 리플렉티브 DLL 주입 패턴
  • NTDLL 시스템 호출 스텁(EDR 후크를 우회하는 직접 시스템 호출)

빠른 확인: 분석 방해 기법

악성 코드 샘플이 Linux에서 ptrace(PTRACE_TRACEME)의 반환 값이 -1인지 확인합니다. 이는 어떤 기법인가요?

강의 요약

악성 코드는 문자열을 난독화하고(XOR, 스택 문자열), 코드를 패킹하며, 디버거를 감지하고(IsDebuggerPresent, 프로세스 추적, 시간 측정), 샌드박스를 회피합니다(VM 검사, 비활동성 확인). 난독화 해제 방법으로는 XOR 키 무차별 대입과 동적 패킹 해제(OEP 이후 덤프), 스택 문자열을 위한 FLOSS 사용이 있습니다. GDB에서 디버깅 방해 검사를 패치하거나 우회할 수 있습니다. 에뮬레이션 도구(FLOSS, speakeasy)를 사용하면 동작을 안전하게 추출할 수 있습니다.

자주 묻는 질문

“난독화 해제와 분석 방해 기법” 강의는 무료인가요?

네 — “난독화 해제와 분석 방해 기법” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Cyber Security Academy 강의 전체를 잠금 해제할 수 있습니다. Cyber Security Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“난독화 해제와 분석 방해 기법”에서 뭘 배우나요?

문자열 난독화, 제어 흐름 평탄화, 안티 디버깅, 패킹을 식별하고 우회합니다. 브라우저에서 직접 실행하는 실습 코드로 Cyber Security Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Cyber Security Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Cyber Security Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“난독화 해제와 분석 방해 기법” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Cyber Security Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Cyber Security Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. Ghidra: 바이너리 탐색과 주석 작성
  2. 리버스 엔지니어링을 위한 x86/x64 어셈블리 핵심
  3. GDB와 pwndbg를 사용한 동적 분석
  4. 난독화 해제와 분석 방해 기법
← Cyber Security Academy(으)로 돌아가기