본문 바로가기
정리/Reversing

[Reversing] 리버싱, 바이너리, 정적분석과 동적분석

by 멘멘 2023. 7. 2.

리버스 엔지니어링(Reverse Engineering)

제작하는 과정을 거꾸로 하는 행위.

 

기계어(Machine Language)

컴퓨터에게 명령을 내리기 위한 언어. 0,1로 구성

 

어셈블리어(Assembly Langauge)

사람이 이해하기 쉬운 언어.

 

어셈블러(Assembler)

어셈블리어를 기계어로 번역.

 

고급 언어(High-Level Langauge)

사람이 이해하기 쉬운 언어 (c, c++,Go,Rust ...)

 

저급 언어(Low-Level Langauge)

사람이 이해하기 어려운 언어. (기계어, 어셈블리어)

 

 

프로그램(Program)

연산 장치가 수행해야 하는 동작을 정의한 일종의 문서

바이너리(Binary)로도 부르기도 함.

 

프로그래밍 언어(Programming Language)

프로그램을 개발하기 위해 사용하는 언어.

  • 소스코드(Source Code) : CPU가 수행해야할 명령들을 프로그래밍 언어로 작성한 것
  • 컴파일(Compile) : 소스코드를 컴퓨터가 이해할 수 있는 기계어 형식으로 번역하는 것 (소스코드->목적코드)
  • 컴파일러(Compiler): 컴파일을 해주는 소프트웨어(GCC,Clang,MSVC)
  • 인터프리팅(Interpreting) : 사용자가 작성한 스크립트를 그때그떄 번역
  • 인터프리터(Interpreter): 인터프리팅을 처리하는 프로그램

 

전처리(Preprocessing)

컴파일러가 소스코드를 어셈블리어로 컴파일하기 전, 필요한 형식으로 가공하는 과정.

  1. 주석제거
  2. 매크로 치환
  3. 파일 병합

컴파일(Compile)

c로 작성된 소스코드를 어셈블리어로 번역하는 것. 코드에 문법적 오류가 있다면 에러 출력.

 

어셈블(Assemble)

컴파일로 생성된 어셈블리어 코드를 ELF형식(윈도우에서는 PE)의 목적파일(Object File)로 변환하는 과정.

* ELF : 리눅스의 실행파일 형식

 

링크(link)

여러 목적파일들을 연결하여 실행 가능한 바이너리로 만드는 과정

 

디스어셈블(Disassemble)

컴파일된 프로그램의 기계어 코드를 어셈블리어로 재번역하는 어셈블의 역과정.

 

디컴파일

어셈블리어보다 고급언어로 바이너리를 번역하는 것. 디컴파일러 이용.

 

 

정적분석(Static Analysis)

프로그램을 실행시키지 않고 분석하는 방법. 

장점 단점
-전체 구조를 파악하기 쉬움.
-분석환경의 제약에서 자유로운 편.
-바이러스와 같은 악성 프로그램의 위협으로부터 안전.
-난독화(Obfuscation)가 적용되면 분석이 어려워짐
-다양한 동적 요소를 고려하기 어려움,

 

동적분석(Dynamic Analysis)

프로그램을 실행시키면서 분석하는 방법.

장점 단점
-코드를 자세히 분석해보지 않고도 프로그램의 개략적인 동작을 파악할 수 있음. -분석환경을 구축하기 어려울 수 있음
-안티 디버깅(Anti Debugging) 등의 어려움.

'정리 > Reversing' 카테고리의 다른 글

[Reversing] IDA 설치  (0) 2023.07.23
[Reversing] 메모리 레이아웃  (0) 2023.07.08

댓글