리버싱(Reverse Engineering)은 소스코드 없이 프로그램을 분석해 동작 원리를 파악하는 기술입니다.
이 글에서는 정적/동적 분석 방식의 차이와 리버싱 목적, 필요한 배경지식까지 처음 배우는 사람도 이해할 수 있게 정리합니다.

리버싱 엔지니어링 (Reverse Engineering)이란?

정의: 완성된 소프트웨어(특히 바이너리 파일)를 분석하여, 그 동작 원리, 구조, 원래의 코드 또는 설계 의도거꾸로 추론해내는 과정.

왜 하는가? (목적)

목적 설명
보안 분석 악성코드 분석, 백도어 탐지, 보안 취약점 확인
디버깅 소스코드 없이 오류 원인 파악, 버그 수정
크랙 방지 소프트웨어 정품 인증 우회 여부 분석
학습/연구 OS 내부 구조, 서드파티 프로그램의 동작 이해
호환성 확보 오래된 시스템에 맞는 드라이버 제작 등
소스코드 복구 유실된 소스의 재구성 시도

어떻게 하는가? (분석 방법)

리버싱은 크게 두 가지 방식으로 있음:

  1. 정적 분석 (Static Analysis)

    → 프로그램을 실행하지 않고 구조, 코드 흐름을 분석

    → 예: 디스어셈블리, 디컴파일, PE 헤더 분석 등

  2. 동적 분석 (Dynamic Analysis)

    → 프로그램을 실행시키고 실시간 동작을 추적

    → 예: 디버깅, 메모리/레지스터 모니터링, API 호출 추적 등

이 두 가지 방식은 서로 보완적.

정적 분석 (Static Analysis)

정의: 프로그램을 실행하지 않고, 바이너리 또는 소스코드를 분석하여 동작을 파악하는 기법

방법:

  • 디스어셈블러로 기계어 → 어셈블리어 확인 (ex. Ghidra, IDA)
  • 문자열 추출, PE 구조 분석, 함수 호출 흐름 추정 등

장점:

  • 실행 없이도 분석 가능 (안전)
  • 코드 흐름 전체를 미리 볼 수 있음
  • 악성 행위를 사전에 탐지 가능

단점:

  • 난독화나 암호화된 코드에 약함
  • 실제 런타임 조건을 완전히 알 수 없음

동적 분석 (Dynamic Analysis)

정의: 프로그램을 직접 실행하면서, 그 실행 흐름과 메모리 변화 등을 관찰하여 분석하는 기법

방법:

  • 디버거 사용 (x64dbg 등)
  • API 호출 추적, 메모리/레지스터 변화 확인
  • 실행 조건에 따른 분기 탐색

장점:

  • 실제 동작을 보며 분석 가능 (조건부 실행 확인)
  • 복잡한 로직을 실행하면서 해석 가능

단점:

  • 악성 코드 실행 위험
  • 코드 전부를 보지 못할 수 있음 (조건이 맞지 않으면 일부만 실행됨)

주요 차이점 비교표

항목 정적 분석 동적 분석
실행 여부 실행 안 함 실행함
도구 IDA, Ghidra 등 x64dbg, OllyDbg 등
분석 대상 코드/바이너리 실행 중인 프로그램
위험성 낮음 악성코드 실행 위험 있음
난독화 대응 약함 일부 우회 가능
실행 흐름 파악 어려움 용이함

정적 분석으로 전체 구조 파악 → 동적 분석으로 구체 흐름 확인

실전에서는 둘을 함께 써야 가장 효과적.

비유로 설명하면….

정적 분석은 “지도 보면서 전체 루트 파악” 동적 분석은 “차 타고 직접 도로 달리는 느낌”

리버싱이 필요한 전제 지식

  • 어셈블리어(x86/x64)
  • 컴파일 과정과 실행 파일 구조 (특히 PE, ELF)
  • 디버거 및 분석 도구 사용법
  • 운영체제의 기본 구조 (메모리, 스택, 프로세스 등)

Leave a comment