'll Hacker
정적분석과 동적분석 본문
Contents
728x90
어떤 소프트웨어를 분석하기 위해 사용하는 분석
1) 정적 분석
- 프로그램을 실행시키지 않고 분석
- 프로그램의 전체구조 파악 용이
- 프로그램이 어떤 함수로 구성됐고, 함수들을 서로 어떤 호출 관계를 갖는지, 어떤 API를 사용하고 어떤 문자열을 포함하는지 등을 종합적으로 살펴볼 수 있음
- 분석 환경 제약 X
- 난독화 적용되면 분석이 어려워짐
- 다양한 동적 요소 고려하기 쉽지 않음
2) 동적 분석
- 코드를 자세히 분석해보지 않고도 프로그램의 개략적인 동작 파악가능
- 분석 환경을 구축하기 어려울 수 있음
- 안티 디버깅 취약
- 동적 분석 도구 = x64dbg(디버거)
- 디버거 = 프로그램의 버그를 찾아내고 제거하기 위해 사용되는 도구, 이를 이용하면 실행 중인 어셈블리 코드, CPU의 레지스터 상태, 메모리와 스택의 값을 확인하며 분석 진행
예제
//helloworld.c
#include <stdio.h>
int main()
{
int n = 0x31337;
printf("Hello World 0x%x\n", n);
return 0;
}
1. 현재코드는 0x31337이라는 상숫값을 스택에 저장하고 있음.
소스 코드의 int n = 0x31337에 대응됨
3. printf 함수를 호출함. 이미지 오른쪽 위의 레지스터를 보면, rcx에 Hello World 0x%x \n 문자열이, rdx에 0x31337이 저장된 것을 확인.
4. 출력 결과
728x90
'Hacking > Reverse Engineering' 카테고리의 다른 글
Windows Memory Layout (0) | 2024.05.02 |
---|---|
Computer Architecture(컴퓨터 구조) (0) | 2024.04.29 |
Binary 개념 정리 (0) | 2024.04.11 |
Reverse Engineering 큰 개념 정리 (0) | 2024.04.11 |
리버스 엔지니어링 정의 및 개요 (0) | 2023.11.16 |