static vs. dynamic analysis

2024. 10. 13. 02:45·reversing

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

 

장점

- 프로그램의 전체 구조를 파악하기 쉬움. 프로그램이 어떤 함수로 구성됐고 함수들은 서로 어떤 호출 관계를 갖는지, 어떤 API를 사용하고 어떤 문자열을 포함하는지 등을 종합적으로 살펴볼 수 있음.

- 분석 제약에서도 비교적 자유로움.

- 바이러스와 같은 악성 프로그램으로부터 안전함. 바이러스를 동적 분석할 경우, 바이러스를 실제로 실행해야 하므로 자신의 컴퓨터가 감염될 우려가 있음.

 

단점

- 프로그램이 난독화되면 분석이 어려워짐. 난독화가 적용되면 프로그램의 코드가 심하게 변형돼서 이를 읽고, 실행 흐름을 파악하기가 어려워짐.

- 다양한 동적 요소를 고려하기 어려움. 어떤 함수가 특정 시점에 정확히 어떤 인자와 어떤 전역 변수를 가지고 실행될지는 정적으로 알기 어려움


IDA

정적 분석 도구 중 하나

 

가운데: 어셈블리 코드

우측: 디컴파일된 코드. 기계어를 사람이 이해하기 쉬운 언어로 나타냄

좌측: 프로그램을 구성하는 여러 함수와 프로그램과 관련된 각종 정보

 

 

함수의 실행 흐름을 보기 쉽게 해주는 제어 흐름 그래프


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

 

장점

- 코드를 자세히 분석해보지 않아도 프로그램의 개략적인 동작을 파악할 수 있음

- 어떤 입력에 대한 개별 함수 또는 프로그램의 출력을 빠르게 확인할 수 있으므로 출력값을 기반으로 동작을 추론할 수 있음 

 

단점

- 분석환경을 구축하기 어려울 수 있음

- 디버깅을 방해하는 안티 디버깅 때문에 분석이 어려울 수 있음.

ex) 아래의 코드처럼 자신이 디버깅 당하고 있는지 검사하고, 디버깅 중이면 프로그램을 강제로 종료시키는 방법이 있음

 

if (is_debugging()) // 디버깅인지 확인
  exit(-1); // 프로그램 종료
Func();

x64dbg

동적 분석 도구 중 하나

디버거는 프로그램의 버그를 찾아내고 제거하기 위해 사용되는 도구인데, 이를 이용하면 실행 중인 어셈블리 코드, CPU의 레지스터 상태, 메모리와 스택의 값을 확인하며 분석을 진행할 수 있음

 

ex) HelloWorld.exe를 x64dbg로 동적 분석하기

//helloworld.c

#include <stdio.h>

int main()
{
  int n = 0x31337;
  printf("Hello World 0x%x\n", n);
  return 0;
}

 

x64dbg의 각 패널
int n = 0x31337에 대응되는 명령어

 

현재 코드는 0x31337이라는 상수값을 스택에 저장하고 있음

 

명령어 실행 이후 스택에 0x31337이 저장된 모습

 

1의 코드를 실행한 직후 이미지 오른쪽 아래를 보면 스택에 0x31337이 저장된 것을 확인할 수 있음

 

printf() 호출 직전 인자가 세팅된 모습

 

printf 함수 호출

이미지 오른쪽 위 레지스터를 보면 RCX에 Hello World 0x%x\n 문자열이, RDX에는 0x31337이 저장된 것을 확인할 수 있음

소스코드를 참조하면, printf 함수의 인자와 관련 있다는 것을 알 수 있음

 

 

printf 호출 결과

 

저작자표시 비영리 변경금지 (새창열림)

'reversing' 카테고리의 다른 글

레지스터, 프로세스 메모리 구조, 섹션, 스택, 힙  (0) 2024.10.27
악성코드 종류와 분석  (1) 2024.10.19
Binary  (0) 2024.10.13
범용 레지스터, 플래그 레지스터, 스택 프레임  (0) 2024.09.28
리버싱 개념, 크랙과 패치, 바이트 오더링  (0) 2024.09.28
'reversing' 카테고리의 다른 글
  • 레지스터, 프로세스 메모리 구조, 섹션, 스택, 힙
  • 악성코드 종류와 분석
  • Binary
  • 범용 레지스터, 플래그 레지스터, 스택 프레임
hauni
hauni
  • hauni
    200 OK
    hauni
  • 전체
    오늘
    어제
    • 분류 전체보기 (54)
      • W3B H4CK1NG (15)
      • reversing (10)
      • python (19)
      • project (1)
        • WHS (0)
        • network (1)
      • 동아리_I.Sly() (9)
      • something... (0)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    록키리눅스
    네트워크
    방화벽 구현
    VMware
    리눅스
    보안
    방화벽
    이것이리눅스다
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hauni
static vs. dynamic analysis
상단으로

티스토리툴바