상세 컨텐츠

본문 제목

Dreamhack Reverse Engineering] 1강: 리버스 엔지니어링이란

REVERSING/Reversing Study

by koharin 2021. 3. 22. 14:54

본문

728x90
반응형

1. Reverse Engineering

Reverse Engineering


  • 완성품에서 완성품의 설계도 없이 구조와 동작 과정을 알아내는 것
  • 역공학, 리버스 엔지니어링, 리버싱이라고 부른다.

'Software' Reverse Engineering


  • 소스 코드 없는 상태에서 대상 소프트웨어의 설계 구조를 파악하고, 소스 코드를 파악한다.

 

 

2. Disclaimer

Disclaimer


  • 저작권을 침해(무단 이용, 재배포)하는 리버싱은 위법함을 명심하고 테스팅, 연구, 학습 목적의 리버싱을 하자.

 

 

3. Static Analysis vs Dynamic Analysis

Static Analysis vs Dynamic Analysis


  • 대상 소프트웨어의 동작을 알아내는 방법은 크게 두 가지가 있다.
  1. 정적 분석 (Static Analysis)
  • 프로그램을 실행하지 않고 분석하는 방법
  • CPU 아키텍처에 따른 어셈블리 코드와 실행 파일 구성 요소에 대한 이해가 필요하다.
  1. 동적 분석 (Dynamic Analysis)
  • 프로그램을 실행하여 입출력, 내부 동작 관계를 통해 분석
  • 분석 대상에 맞는 적절한 디버거를 사용해야 한다.

 

 

4. 코드가 컴파일되는 과정

Source Code → Binary Code


image

  • 소스 코드(Source Code): 사람이 이해할 수 있는 코드
  • 바이너리 코드(Binary Code): 컴퓨터가 이해할 수 있는 코드, 단독 실행 가능하다.
  • 컴파일 (Compile): 소스 코드를 바이너리 코드로 변환하는 것
  • 컴파일러 (Compiler): 컴파일 과정 사용하는 프로그램

 

Source Code → ??? → Binary Code


image

  • 중간언어(Intermediate Language): 코드가 아닌 참조를 위한 정보(주석. 매크로, 헤더 파일)를 컴파일러가 미리 처리한 것
  • 어셈블리 코드(Assembly Code)
    • 중간언어를 컴파일러가 분석, 최적화한 코드
    • 어셈블리 코드: 기계 코드 = 1:1
  • 어셈블(Assemble): 어셈블리 코드가 기계 코드로 번역되는 과정

 

Source Code ← ??? ← Binary Code


image

  • 디스어셈블(Disassemble): 바이너리 코드를 어셈블리 코드로 변환하는 과정
  • 리버스 엔지니어링에서 정적 분석은 어셈블리 코드 분석하여 소프트웨어 동작 구조를 알아내는 과정으로, 리버싱으로 통용되는 소프트웨어 리버스 엔지니어링이다.
728x90
반응형

관련글 더보기