* 모든 내용과 이미지의 출처는 Background: Static Analysis vs. Dynamic Analysis | Dreamhack
정적 분석(Static Analysis) : 외적 관찰만으로 정보 알아냄.
- 프로그램을 실행기키지 않고 분석하는 방법.
장점
1) 프로그램의 전체구조 파악 Easy.
-> 어떤 함수로 구성됐는지, 함수들이 서로 갖는 호출 관계, 어떤 API를 사용하고 문자열을 포함하는지 등
2) 분석 환경 제약에서 자유로움.
-> 안드로이드 apk 파일은 별도의 sw를 사용하지 않는 한 윈도우 시스템에서 실행 불가능. 동적 분석 번거로우나
정적 분석은 프로그램 실행 안해도 됨.
3) 바이러스와 같은 악성 프로그램의 위협으로부터 안전함.
-> 동적 분석은 바이러스를 실행하기 때문에 컴퓨터 감염 우려 존재. but, 정적 분석은 실행 x.
단점
1) 난독화(Obfuscation) 적용 프로그램 -> 분석 매우 어려움.
-> 리버스 엔지니어링으로부터 보호하기 위한 방법 = 난독화.
난독화 적용 시, 프로그램의 코드가 심하게 변형돼서 이를 읽고, 실행 흐름을 파악하기 어려워짐.
2) 다양한 동적 요소 고려 어려움.
-> 어떤 함수가 특정 시점에 정확히 어떤 인자와 어떤 전역 변수를 갖고 실행될지는 정적으로 알기 어려움.
프로그램의 실행 흐름이 복잡할수록 문제 심각해짐.
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 |