'll Hacker

정적분석과 동적분석 본문

Hacking/Reverse Engineering

정적분석과 동적분석

씨이오가 되자 2024. 4. 11. 01:44
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. 출력 결과

 

'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