[dreamhack] 리버싱 엔지니어링이란
Reversing/Reverse Engineering

[dreamhack] 리버싱 엔지니어링이란

Static Analysis VS Dynamic Analysis

static analysis

프로그램을 실행시키지 않은 상태에서 분석하는 정적 분석 방법

▶ 실행 파일을 구성하는 모든 요소, 대상 실행 파일이 실제로 동작할 CPU 아키텍쳐에 해당하는 어셈블리 코드에 대한 이해가 필요하다.

dynamic analysis

프로그램을 실행시키며 입출력과 내부 동작 단계를 살피며 분석하는 동적 분석 방법

▶실행 단게별로 자세한 동작 과정을 관찰해야 하므로, 환경에 맞는 디버거를 이용한 단계별 분석 기술이 필요하다.


코드의 Compile 과정

Source Code → Binary Code

  • source code: 사람이 이해할 수 있는 코드
  • binary (code): 컴퓨터가 이해할 수 있는 형태인 프로그램 (코드) (기계 코드)
  • compiler: source code를 binary code로 바꾸는 과정에 사용되는 프로그램
#include <stdio.h>
int main(){
	puts("Hello Wolrd!\n");
}

Source Code → Intermediate Language → Assembly Code → Binary Code

  • intermediate language: 소스 코드의 주석, 매크로, 헤더 파일 등 참조를 위해 붙여둔 저보들을 처리해 준비된 언어
  • assembly code: 기계 코드를 사람이 알아보기 쉬운 "instruction"단위로 표현한 것 ▷어셈블리코드:기계코드 = 1:1
  • assemble: assembly code가 binary code(기계 코드)로 번역되는 과정, 이 과정을 거쳐 실행 가능한 바이너리 완성

Binary Code → Assembly Code → Source Code

  • disassemble: binary code를 assembly code로 변환하는 과정 ▷ 바이너리를 어셈블리 코드로 변환하고 이를 분석해 대상 바이너리가 어떤 식으로 동작하는지 확인

[출처]

dreamhack.io/lecture/courses/19

 

리버스 엔지니어링이란

리버스 엔지니어링의 기본 개념과 목표, 기본적인 접근 방법에 대해 넓은 관점에서 이해합니다.

dreamhack.io

SMALL

'Reversing > Reverse Engineering' 카테고리의 다른 글

패킹과 언패킹  (0) 2021.05.18
어셈블리 코드 변환  (0) 2021.04.06
HelloWorld.exe  (2) 2021.04.01
Instruction (명령어)  (0) 2021.03.30
리버싱을 위한 기초 지식(구조)  (0) 2021.03.28