1. main 함수 분석
2. Import 함수 분석
3. 문자열 분석
1. main 함수 분석
main 함수 분석의 특징은 대상 프로그램을 전체적으로 분석하고 이해할 수 있다는 점이다. 그러나 프로그램의 처음부터 분석하고 싶거나 용량이 큰 프로그램의 분석에는 적합하지 않다. C 언어로 프로그램을 작성할 경우 main 함수가 최초로 실행되는 함수로 코드를 시작하지만 프로그램 실행 시에는 main 함수 앞에 초기화 처리 등이 진행된다. 보통 PE 포맷의 실행 파일은 PE 헤더 내의 AddressOfEntryPoint의 RVA(Relative Virtual Address)에 ImageBase를 가산한 주소에서 실행된다.
기드라에서 엔트리 포인트 심벌명은 entry이다. Symbol Tree 창의 [Exports]에서 [entry]를 클릭하고 엔트리 포인트를 Listing 창으로 표시한다.
main 함수를 호출하는 방법은 컴파일러나 링커의 버전, 옵션에 따라서 달라진다. 이번 패턴에서는 첫 번째 인수에 ImageBase를 기반으로 함수를 찾는다. x86의 PUSH 명령 오퍼 코드는 0x68이다. .exe 파일이기 때문에 ImageBase는 기본적으로 0x400000이다. 0x86의 CALL 명령은 0xe8부터 시작되기 때문에 이번에 찾아야 하는 패턴은 68 00 00 40 00 e8이다. 기드라에서는 CodeBrowser 창 산단의 메뉴의 [Search] -> [Memory]를 열어 검색 패턴을 입력하고 [Search All] 버튼을 눌러 검색한다.
검색 결과 칼럼 이름을 우클릭하여 [Add/Remove Columns]를 선택하여 칼럼에 표시할 항목을 편집할 수 있다. 검색 확인 시 함수명을 확인하기 위해 Function Name 항목을 활성화 한다.
검색 결과에서 entry로 호출되는 것은 주소 0x004013a9이므로, 해당 주소부터 시작하는 함수가 main 함수이다.
main 함수를 찾으려면 윈도우 초기화 처리를 이해하고 윈도우 프로그램이 어떻게 동작하는지 이해해야 한다.