Dreamhack

리버싱 02 - 동적 분석과 정적 분석

kchabin 2022. 7. 10. 14:02

* 모든 내용과 이미지의 출처는 Background: Static Analysis vs. Dynamic Analysis | Dreamhack

 

로그인 | Dreamhack

 

dreamhack.io

 

정적 분석(Static Analysis) : 외적 관찰만으로 정보 알아냄. 

- 프로그램을 실행기키지 않고 분석하는 방법. 

 

장점

1) 프로그램의 전체구조 파악 Easy. 

-> 어떤 함수로 구성됐는지, 함수들이 서로 갖는 호출 관계, 어떤 API를 사용하고 문자열을 포함하는지 등

 

2) 분석 환경 제약에서 자유로움.

-> 안드로이드 apk 파일은 별도의 sw를 사용하지 않는 한 윈도우 시스템에서 실행 불가능. 동적 분석 번거로우나 

정적 분석은 프로그램 실행 안해도 됨. 

 

3) 바이러스와 같은 악성 프로그램의 위협으로부터 안전함.

-> 동적 분석은 바이러스를 실행하기 때문에 컴퓨터 감염 우려 존재. but, 정적 분석은 실행 x.

 

단점

1) 난독화(Obfuscation) 적용 프로그램 -> 분석 매우 어려움.

-> 리버스 엔지니어링으로부터 보호하기 위한 방법 = 난독화. 

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

 

2) 다양한 동적 요소 고려 어려움.

-> 어떤 함수가 특정 시점에 정확히 어떤 인자와 어떤 전역 변수를 갖고 실행될지는 정적으로 알기 어려움. 

프로그램의 실행 흐름이 복잡할수록 문제 심각해짐.

IDA 첫 시작 화면
정적 분석의 예

IDA로 HelloWorld.exe를 연 예시 화면. 

가운데 부분 = 프로그램의 어셈블리 코드

우측 코드 = 디컴파일된 코드 -> 기계어를 사람이 이해하기 쉽도록.

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

 

상호 참조(Cross Reference) 기능 : 문자열이나 함수를 어디에서 사용하는지 보여줌. 

제어 흐름 그래프(Control Flow Graph) 

제어 흐름 그래프

동적 분석(Dynamic Analysis) : 실행을 통해 동작 분석. 

장점

코드를 자세히 분석하지 않아도 프로그램의 개략적인 동작 파악 가능함. 

-> 대개의 프로그램은 많은 함수들로 구성, 각각의 함수들이 서로 복잡하게 영향을 주고받음. 정적 분석만으로 프로그램을 완전히 이 해하기  매우 어려움. 

ex) 어떤 입력 값을 넣고 결과 값이 md5 알고리즘의 결과 값과 같은지 비교하여 해당 함수가 md5 함수인지를 판단함. 

 

단점

분석 환경 구축이 어려울 수 있음. 

-> 프로그램을 실행하지 못하면 동적 분석을 진행할 수 없음. 

 

*안티 디버깅(Anti Debugging) : 동적 분석의 일종인 디버깅 방해. 동적 분석을 어렵게 함.

아래의 코드처럼 자신이 디버깅 당하고 있다면 프로그램을 강제 종료시킴. 

 

대표적인 동적 분석 도구 : x64dbg(디버거의 일종)

디버거 : 프로그램의 버그를 찾아내고 제거하기 위해 사용되는 도구.

- 실행 중인 어셈블리 코드

- CPU의 레지스터 상태

- 메모리와 스택 값 확인

예제 코드
드림핵 예시

 

1. 현재 코드는 int n = 0x31337 이라는 상숫값을 스택에 저장하고있음. 

2. 1의 코드를 실행한 직후 우측 아래를 보면 스택에 0x31337이 저장된 것 확인 가능.

3. printf 함수 호출. 우측 상단 레지스터를 보면 

rcx에 Hello World0x%x\n 문자열이, rdx에 0x31337 저장된 것 확인 가능.

'Dreamhack' 카테고리의 다른 글

리버싱 06 - rev-basic-0  (0) 2022.07.12
리버싱 05 - x86 Assembly  (0) 2022.07.12
리버싱 04 - Windows Memory Layout  (0) 2022.07.10
리버싱 03 - 컴퓨터 구조, 명령어 집합 구조  (0) 2022.07.10
리버싱 01 - Binary  (0) 2022.07.09