[1장] 리버싱 스토리

beanii·2023년 9월 22일
0

Reversing Study

목록 보기
1/4
post-thumbnail

1.1. 리버스 엔지니어링

  • 일반적인 의미의 리버스 엔지니어링(Reverse Engineering, RE: 역공학): 물건이나 기계장치 혹은 시스템 등의 구조, 기능, 동작 등을 분석하여 그 원리를 이해하며 단점을 보완하고 새로운 아이디어를 추가하는 일련의 작업

1.2. 리버스 코드 엔지니어링

  • 리버스 코드 엔지니어링(Reverse Code Engineering, RCE)은 소프트웨어 분야의 리버스 엔지니어링
  • RCE, RE, 역공학, 리버싱 등의 용어 사용
  • 소프트웨어를 리버싱 관점에서 상세하게 분석한다는 뜻

1.2.1. 리버싱(분석) 방법

  • 필자의 경우, 정적 분석으로 정보 수집하면서 해당 프로그램의 구조와 동작 원리에 대해 예측
  • 아래 두 가지 방법 잘 활용하면 리버싱 시간 단축 & 효과적인 분석
  • 리버싱 =/= 디버깅, 디버깅은 리버싱의 하위 개념

1) 정적 분석

  • 파일의 겉모습 관찰하여 분석
  • 파일 실행하지 않음
  • 파일의 종류(EXE, DLL, DOC, ZIP 등), 크기, 헤더(PE) 정보, Import/Export API, 내부 문자열, 실행 압축 여부, 등록 정보, 디버깅 정보, 디지털 인증서 등의 다양한 내용 확인
  • 디스어셈블러를 이용해서 내부 코드와 그 구조 확인

2) 동적 분석

  • 파일을 직접 실행시켜서 행위 분석하고 디버깅 통해 코드 흐름과 메모리 상태 등을 자세히 살펴보는 방법
  • 파일, 레지스트리, 네트워크 등을 관찰하면서 프로그램 행위 분석
  • 디버거 이용해서 프로그램 내부 구조와 동작 원리 분석

1.2.2. Source Code, Hex Code, Assembly Code

  • 아래는 C++ 소스코드의 빌드 과정

Source Code

  • 개발 도구(Visual C++ 등)에서 소스코드(.cpp)를 빌드하면 실행 파일(.exe)이 생성됨

Hex Code

  • 실행 파일은 컴퓨터가 이해할 수 있는 2진수(Binary) 형식으로 되어 있음
  • 해석하기 위해 2진수를 16진수(Hex) 형식으로 변환
  • Hex Editor가 binary 형식의 파일을 hex 형식으로 보여주는 유틸리티

Assembly Code

  • Hex Code 보다 더 직관적인 형태를 위해 어셈블리 코드 형태로 변환
  • 실행 파일을 디버거를 이용해 열면 디스어셈블(Disassemble) 과정을 거쳐 어셈블리 코드로 변환됨
  • 일반적인 리버싱 과정에서는 어셈블리 코드 분석

1.2.3. 패치와 크랙

  • 패치(patch)

    • 프로그램의 파일 혹은 실행 중인 프로세스 메모리의 내용을 변경하는 작업
    • 예) Microsoft의 Windows 업데이트
    • 목적: 프로그램의 취약점 수저오가 기능 개선 등
  • 크랙(crack)

    • 패치와 같은 개념이지만 특별히 그 의도가 비합법적이고 비도덕적인 경우
    • 목적: 저작권을 침해하는 행위(불법 복제/사용 등)

1.3. 리버싱 준비물

  • 리버싱을 왜 배워야 하는지에 대한 스스로의 목표
  • 목표를 향해 끈기 있게 나아갈 수 있게 해주는 힘(에너지)인 열정
  • 설명이 필요 없는 세계 최고의 검색엔진 구글

1.4. 리버싱 방해물

  • 처음부터 모든 것들을 완벽하게 익히겠다는 과욕
  • 왜 아직도 못하지 라는 생각을 가지게 하는 조급함

1.5. 리버싱의 묘미

  • 소스코드 없이 실행 파일만으로 내부 구조 알 수 있음

0개의 댓글