실습
-
메인 함수 분석
- 왜 메인함수를 분석하나? 대상 프로그램을 전체적으로 분석하고 이해할 수 있기 때문
- 용량이 큰 프로그램을 분석하거나, 프로그램 처음부터 분석하여 특정 처리만을 분석하게 될 때 부적합
- 프로그램 실행 시에는 main 함수 앞에 초기화 처리 등이 진행이 됨
- PE 포맷 실행 파일에서 PE 헤더 내에서 AddressOfEntryPoint의 RVA(Relative Virutal Address)에 ImageBase를 가산한 주소에서 실행
- 엔트리 포인트 심벌명 entry
- SYmbol Tree 창 —> Exports에서 entry 클릭하고 엔트리 포인트를 Listing 창으로 표시
- main 함수 호출하는 방법
- 컴파일러, 링커의 비전, 옵션에 따라 다름
- 첫 번째 인수에 ImageBase 기반으로 함수 찾기
- EXE 파일이라 ImageBase는 0x400000
- x86 PUSH 명령 오퍼 코드는 0x68
- x86 CALL 명령은 0xe8에서 시작되기에 찾아야하는 패턴은 다음과 같음
- 68 00 00 40 00 e8
- entry로부터 호출되는 것은 0x00401000부터 시작하는 함수 호출
- 0x00401000부터 시작하는 함수가 메인 함수
- 메인함수를 찾으려면, 몇 가지 패턴이 있기 때문에 패턴을 잘 숙지하는게 좋음.
- main 함수를 찾으려면 윈도우 초기화 처리를 이해하고, 윈도우 프로그램이 어떻게 동작하는지 이해 필요
Import 함수 분석
- 임포트 함수 분석 장점은 특정 처리에 초점을 두고 분석할 수 있음.
- 허나, 임포트하고있는 함수를 라이브러리 코드가 사용하는 경우도 있음
- 멀웨어는 패킹(바이너리 파일 사이즈를 줄이고 분석하기 어렵게 하는 방법) 되어 있거나 IAT(Import Address Table)을 사용하지 않고 윈도우 API를 호출하기도 하는 중 반드시 임포트하고 있는 함수 전부가 아님
- downloader.exe 임포트 함수 확인
- URLMON.DLL에 URLDownloadToFileA 함수 존재
- 윈도우 API의 동작 및 인수는 Microsoft Docs에서 확인 가능
- API 이름 말이의 A는 ASCII의 약자를 말하고, 인수에 아스키 문자열 사용
- API 말미의 W는 Wide의 약자를 말하며, 인수에 와이드 문자열 사용
- 기드라에서는 SYmbol Tree → Imports 트리 → DLL 더블 클릭해서 DLL이 임포트하는 함수를 표시하고, 함수를 크릭하면 Listing 창이 대상 함수에 대한 포인터가 정의된 주소로 건너 뜀.
- XREF에 표시되는 주소 클릭하면 URLDownloadToFileA 함수 호출원 점프함