저번 시간에는 바이너리에 대하여 공부하였다.
이번 시간에는 정적 분석과 동적 분석에 대하여 공부할 것이다.
소프트웨어를 분석할 때는 일반적으로 큰 구조를 먼저 관찰한다. 그러나 이것만으로 소프트웨어의 실제 동작을 알기 어렵다. 그때는 실제로 프로그램을 실행해보며 동작을 관찰할 수 있다. 이렇게 소프트웨어를 분석하기 위해 사용하는 분석 방법들은 크게 정적 분석과 동적 분석으로 구분한다.
1. 정적 분석
정적 분석은 프로그램을 실행시키지 않고 분석하는 방법이다.
1) 정적 분석의 장점
- 정적 분석을 사용하면 프로그램의 전체 구조를 파악하기 쉽다.
=> 정적 분석 도구들은 프로그램의 여러 정보를 살펴볼 수 있도록 도움을 주는데, 프로그램이 어떤 함수로 구성됐고 함수들은 서로 어떤 호출 관계를 갖는지 등 종합적으로 살펴볼 수 있다. - 분석 환경의 제약에도 자유롭다.
=> 정적 분석은 프로그램을 실행하지 않아도 되므로 분석을 지원하는 적절한 도구만 갖춘다면 시도할 수 있다. - 바이러스와 같은 악성 프로글매의 위협으로 부터 안전하다.
=> 바이러스를 동적 분석할 경우, 실제로 실행해야 하므로 컴퓨터가 감염될 수 있다. 하지만 정적 분석은 프로그램을 실행하지 않고 분석하기 때문에 이러한 위협으로 부터 안전하다.
2) 정적 분석의 단점
- 정적 분석은 프로그램에 난독화가 적용되면 분석이 매우 어렵다.
=> 많은 개발자들이 엔지니어링 보호를 위해 난독화 기법을 적용한다. - 정적 분석만으로 다양한 동적 요소를 고려하기 어렵다.
=> 프로그램은 실행 중에 여러 함수들의 영향을 받는다. 하지만 정적 분석으로는 알기 어렵다.
2. 동적 분석
동적 분석은 프로그램을 실행시키면서 분석하는 방법이다.
1) 동적 분석 장점
- 코드를 자세히 분석해 보지않아도 프로그램의 대략적인 동작을 파악할 수 있다.
=> 동적 분석은 어떤 입력에 대한 출력값을 빠르게 확인할 수 있고, 출력값들을 기반으로 동작을 추론해 볼 수 있다.
2) 동적 분석 단점
- 분석 환경을 구축하기 어려울 수 있다.
=> 동적 분석은 프로그램을 실행하면서 분석하기 때문에 프로그램을 실행하지 못하면 동적 분석을 할 수 없다. - 동적 분석의 디버깅을 방해하는 안티 디버깅이 적용되면 분석하기 어렵다.
=> 디버깅을 당하고 있는지 검사하여 디버깅 중이면 프로그램을 강제 종료시키는 안티 디버깅 적용 시 분석이 어렵다.
이번 시간에는 정적 분석과 동적 분석에 대하여 공부하였다.
다음 시간에는 윈도우의 메모리 레이아웃에 대하여 공부할 것이다.
'개념정리 > Reverse Engineering' 카테고리의 다른 글
4. Windows Memory Layout (0) | 2022.08.17 |
---|---|
2. Binary (0) | 2022.08.02 |
1. 리버스 엔지니어링 (0) | 2022.07.28 |