운영체제의 버전이 변경될 때마다 새로운 API가 추가되거나 기존 API가 변경 및 삭제되면서 응용 프로그램이 정상적으로 실행되지 않는 호환성 문제가 발생할 수 있다. 이를 해결하기 위해 운영체제는 응용 프로그램 호환성 데이터베이스(Application Compatibility Database)를 사용한다.
이 호환성 데이터베이스는 Appfix Package라는 형식의 .sdb 파일로 존재하며, 심 데이터베이스(Shim Database, SDB)라고도 불린다. SDB 파일은 특정 응용 프로그램의 호환성 문제를 해결하기 위해 필요한 패치를 포함하고 있으며, 운영체제가 실행될 때 자동으로 적용된다.
운영체제는 SDB 파일을 통해 특정 프로그램이 실행될 때 필요한 수정 사항을 적용하여 원활한 실행을 보장한다. 이를 통해 개발자가 별도로 수정하지 않아도 오래된 응용 프로그램이 새로운 운영체제에서도 정상적으로 동작할 수 있도록 지원한다.
그림과 같이 API 후킹의 형태로 응용프로그램과 Windows 운영체제 사이에 위치하여 응용프로그램이 필요한 DLL을 Windows 측에 요구하면 Windows의 API가 바로 호출되지 않고 Shim에서 요청과 응답을 관리하는 방법으로 호환성 문제를 해결한다. Shim은 틈을 메우는 끼움쇠라는 뜻으로 그 역할을 한다.
경로는 아래와 같고 SDB(Shim Database) 파일이 존재한다.
- C:\Windows\AppPatch\
- sysmain.sdb
- drvmain.sdb
- msimain.sdb
- pcamain.sdb
응용프로그램 실행 시 호환성 문제 해결 함수는 kernel32.dll의 내부 함수인 BasepCheckBadApp이다. 이 함수가 호출되면 위의 SDB 파일 내용을 참고한다. 이 경우 더 빠른 해결을 위해 심캐시(ShimCache, AppCompatCache)를 참고한다.
심캐시 파일은 응용프로그램의 실행 흔적을 기록하고 있어 포렌식적 관점에서 중요한 아티팩트이다.
심캐시가 보유하는 데이터의 양은 운영체제마다 다르나 가장 오래된 데이터를 새 항목으로 대체하는 식으로 데이터를 롤링하여 기록한다.
심캐시와 관련된 레지스트리 키는 아래와 같다.
- HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache
AppCompatCacheParser 프로그램을 이용하면 심캐시를 csv 형태로 얻을 수 있다.
심캐시의 구조는 아래와 같다.
범위(Hex) | 크기(Byte) | 이름 | 설명 |
0x00 - 0x03 | 4 | Signature "10ts" | |
0x04 - 0x07 | 4 | Unknown | |
0x08 - 0x1B | 4 | Entry Length | |
0x1C - 0x1D | 2 | Path Length | |
0x1E - 0x?? | 가변적 | Path | |
0x?? - 0x(?? + 8) | 8 | Last Modified Time | |
0x(?? + 8) - 0x(?? + 8) | 1 | Data Length | |
0x(?? + 8) - 0x(?? + 8 + Data Length) | 가변적 | Data | |
0x(?? + 8 + Data Length) - 0x(?? + 8 + Data Length + 2) | 3 | Null Padding |
'Forensics > Windows Forensics' 카테고리의 다른 글
웹 브라우저 포렌식 (0) | 2025.03.01 |
---|---|
이벤트 로그 분석 (0) | 2025.03.01 |
Amcache (0) | 2025.02.27 |
IconCache (0) | 2025.02.27 |
Thumbnail (0) | 2025.02.27 |