1. 프리패치란?
윈도우 시스템이 시작할 때, 운영체제는 필수 시스템 파일을 메모리에 로드해야 정상적으로 실행될 수 있다. 또한, 응용프로그램이 실행되기 위해서는 실행 코드와 리소스를 메모리에 불러와야 한다. 그러나 이러한 파일들은 하드디스크의 여러 위치에 분산되어 있어 부팅 속도를 저하시킬 수 있으며, 응용프로그램 실행 속도에도 영향을 미친다.
이러한 문제를 해결하기 위해 윈도우는 프리패치(Prefetch) 기능을 도입했다. 프리패치는 부팅 과정에서 필요한 파일이나 특정 프로그램 실행에 필요한 데이터를 미리 저장해 두었다가, 실행 시 이를 메모리에 빠르게 불러와 성능을 향상시키는 역할을 한다. 이를 통해 시스템 부팅 속도와 응용프로그램의 실행 속도를 개선할 수 있다.
프리패치 기능은 윈도우 XP부터 지원되며, 이후 운영체제에서도 지속적으로 사용되고 있다.
레지스트리에서 프리패치 설정을 통하여 사용 여부를 설정할 수 있다.
- HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters
EnablePrefetcher 값
- 0: 비활성화
- 1: 응용프로그램 프리패칭만 사용
- 2: 부트 프리패칭만 사용
- 3: 모두 사용
프리패치 파일은 부트 프리패치와 응용프로그램 프리패치 두 가지로 나뉜다. 부트 프리패치는 시스템 부팅 시 필요한 파일과 프로세스를 120초 동안 모니터링한 후, 부팅 속도를 향상시키기 위해 생성된다. 반면, 응용프로그램 프리패치는 특정 응용프로그램이 실행될 때 필요한 파일과 리소스를 10초 동안 모니터링한 후 실행 속도를 높이기 위해 만들어진다.
프리패치 파일은 최대 128개까지 저장되며, 이 한도를 초과하면 가장 오래된 파일부터 자동으로 삭제된다. 확장자는 .pf이며, 파일명 규칙은 아래와 같다. Windows 10에서는 Fast Startup 기능이 도입되면서 기존의 부트 프리패치 방식이 사용되지 않는다. Fast Startup은 하이버네이션 방식을 활용하여 부팅 속도를 높이기 때문에 별도의 부트 프리패치가 필요하지 않게 되었다.
부트 프리패치 | NTSBOOT-BOODFAAD.pf |
응용프로그램 프리패치 | 파일명-파일경로해시.pf |
2. 프리패치를 분석하여 얻는 정보
WinPrefetchView를 이용하여 프리패치 정보를 얻을 수 있다.
부트 프리패치 파일을 분석하여 악성코드 흔적을 찾을 수도 있으며 응용프로그램 패치 파일을 분석하여 아래와 같은 정보를 얻을 수 있다.
- 응용프로그램 정보(프로그램 이름, 프로그램 경로 정보 등)
- 응용프로그램 수행 횟수
- 응용프로그램 마지막 수행 시각
- 응용프로그램 최초 수행 시각(프리패치 생성 시각)
- 응용프로그램 수행 시 참조된 파일(파일 수행에 필요한 DLL, INI 등의 경로)
- 응용프로그램이 수행된 볼륨(외부저장장치 사용 흔적)
3. 프리패치 파일 구조
이전 버전과는 다르게 Windows 10에서는 프리패치 파일이 Xpress Huffman Algorithm으로 압축되어 있다. 만약 처음 시작 부분이 MAM이면 압축이 되어있음을 알 수 있다.
만약 압축이 되어있으면 xpress decompress를 통해 압축을 풀어 구조를 확인할 수 있다.
아래는 압축된 프리패치 파일이다.
압축을 풀면 SCCA 시그니처가 보인다.
Address Range | Size(byte) | Field Name | Description |
0x00 - 0x03 | 4 | Prefetch Version | Windows XP: 0x11 Windows 7: 0x17 Windows 8.1: 0x1A Windows 10: 0x1E |
0x04 - 0x07 | 4 | Signature | Signature: "SCCA" |
0x08 - 0x0B | 4 | Prefetch Management Service Version | Unknown (0x0000000f, 0x00000011) |
0x0C - 0x0F | 4 | File Size | 파일 크기 |
0x10 - 0x49 | 58 | Executable File Name | 파일 이름 |
0x4A - 0x4B | 2 | 0x0000 with filename size 58 or higher | 길이가 58byte를 넘을 경우 파일 이름 끝에 0x0000을 기록 |
0x4C - 0x4F | 4 | Full Path Hash Value | 파일의 경로 해시값 <FILENAME>-<PATH HASH>.pf |
0x50 - 0x53 | 4 | 0x00000000 | 0x00000000 |
0x54 - 0x57 | 4 | File Metrics Array Info Offset | Section 정보의 위치 |
0x58 - 0x5B | 4 | Num File Metrics Array | Section의 개수 |
0x5C - 0x5F | 4 | Trace Chains Array Info Offset | Page 정보의 개수 |
0x60 - 0x63 | 4 | Num Trace Chains Array | Page의 개수 |
0x64 - 0x67 | 4 | File Name Info Offset | 파일 이름 정보의 위치 |
0x68 - 0x6B | 4 | File Name Info Size | 파일 이름 정보의 크기 |
0x6C - 0x6F | 4 | Volumes Info Offset | 메타데이터 정보의 위치 |
0x70 - 0x73 | 4 | Num Volumes | 메타데이터 정보의 개수 |
0x74 - 0x77 | 4 | Volumes Info Size | 메타데이터 정보의 크기 |
0x78 - 0x7F | 8 | Unknown | 알 수 없음 |
0x80 - 0xBF | 64 | Last Launch Time | 마지막 실행 시각 8개 |
0xC0 - 0xC7 | 8 | Unknown | 알 수 없음 |
0xC8 - 0xCF | 8 | Run Count | 실행 횟수 |
0xD0 - 0x-- | -- | Unknown | 알 수 없음 |
'Forensics > Windows Forensics' 카테고리의 다른 글
Link File (0) | 2025.02.25 |
---|---|
슈퍼패치 (0) | 2025.02.23 |
Volume Shadow Copy (0) | 2025.02.23 |
USB 장치 분석 (0) | 2025.02.20 |
Printer Spooler 분석 (0) | 2025.02.19 |