Reverse Engineering

Static Analysis vs. Dynamic Analysis

박연준 2023. 7. 2. 14:56
  • 리버스 엔지니어링에서는 소프트웨어를 분석하기 위해 사용하는 분석 방법들을 크게 정적 분석과 동적 분석으로 구분한다.
  • 정적 분석은 외적인 관찰만을 통해 정보를 알아내는 것을 의미하며, 동적 분석은 실행을 통해 동작을 분석하는 것을 의미한다.
  • 정적 분석과 동적 분석 중 한 방법만을 고수하는 것이 아니라 상황에 따라 적절한 방법을 선택하는 것이 리버싱 실력을 좌우하는 중요한 요소이다.

 

 

정적 분석

  • 정적 분석은 프로그램을 실행시키지 않고 분석하는 방법이다.

정적 분석의 장점

  • 정적 분석을 사용하면 프로그램의 전체 구조를 파악하기 쉽다.
  • 정적 분석 도구들은 프로그램의 여러 정보를 살펴볼 수 있도록 도움을 주는데, 프로그램이 어떤 함수로 구성됐고 함수들은 서로 어떤 호출 관계를 갖는지, 어떤 API를 사용하고 어떤 문자열을 포함하는지 등을 종합적으로 살펴볼 수 있다.
  • 분석 환경의 제약에서도 비교적 자유롭다.
  • 바이너리와 같은 악성 프로그램의 위협으로부터 안전하다.

정적 분석의 단점

  • 프로그램에 난독화가 적용되면 분석이 매우 어려워진다.
  • 최근에는 많은 개발자가 자신의 소프트웨어를 리버스 엔지니어링으로부터 보호하기 위해 난독화 기법을 적용한다.
  • 정적 분석만으로는 다양한 동적 요소를 고려하기 어렵다.

 

정적 분석의 예

  • 정적 분석 도구 중 하나인 IDA를 이용하여 HelloWorld.exe라는 프로그램을 열면 아래와 같은 모습을 볼 수 있다.

  • 가운데 부분에서 어셈블리 코드, 우측에서 디컴파일된 코드를 확인할 수 있다. 또한, 좌측에서는 프로그램을 구성하는 여러 함수와 프로그램과 관련된 각종 정보를 살펴볼 수 있다.
  • 이외에도 IDA는 문자열이나 함수를 어디에서 사용하는지를 보여주는 상호 참조기능이나 함수의 실행 흐름을 보기 쉽게 해주는 제어 흐름 그래프 등을 통해 분석가가 프로그램을 쉽게 이해할 수 있도록 돕는다.

 

 

동적 분석의 장점

  • 동적 분석을 활용하면 코드를 자세히 분석해보지 않고도 프로그램의 개략적인 동작을 파악할 수 있다.

동적 분석의 단점

  • 동적 분석의 단점은 분석 환경을 구축하기 어려울 수 있다는 것이다.
  • 프로그램을 실행하지 못하면 동적 분석을 진행할 수 없다.
  • 또한, 난독화처럼 동적 분석에 대해서도 어렵게 하는 여러 기법이 있는데, 안티 디버깅이 대표적이다.

동적 분석의 예

  • 윈도우의 대표적인 동적 분석 도구로는 디버거 중 하나인 x64dbg가 있다.
  • 디버거를 이용하면 실행 중인 어셈블리 코드, CPU의 레지스터 상태, 메모리와 스택의 값을 확인하며 분석을 진행할 수 있다.

'Reverse Engineering' 카테고리의 다른 글

x86 Assembly: Essential Part(2)  (0) 2023.07.02
x86 Assembly: Essential Part(1)  (0) 2023.07.02
Background: Windows Memory Layout  (0) 2023.07.02
Background: Computer Architecture  (0) 2023.07.02
Background: Binary  (0) 2023.07.02