728x90
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로 변환하는 과정 ▷ 바이너리를 어셈블리 코드로 변환하고 이를 분석해 대상 바이너리가 어떤 식으로 동작하는지 확인
[출처]
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 |