· 이 경로에 들어가면 db파일도 있는데 이 것은 프리패치파일을 메모리에 올렸는데 안 쓸경우 페이지 파일로 내리니까 그것을 막기 위한 파일이다.
1.2. 부트프리패칭
· 부팅과 관련된 파일이 저장장치에 흩어져 있거나 단편화되어 있음 -> 부팅 속도 저하
프리패처에 의해 시스템 부팅 시 최대 120초 까지 모니터링
· 부팅 시 사용하는 파일을 모니터링한 후 결과를 파일에 저장
· 프리패칭된 파일을 이용하여 부팅 속도 향상
1.3. 응용 프로그램 프리패칭
· 응용프로그램 초기 실행 시 캐시 관리자가 처음 10초를 모니터링
· 10초 동안 사용한 파일을 모니터링한 후 결과를 파일로 저장
· 프리패칭된 응용프로그램 다시 실행 시, 프리패치 파일을 이용해 초기 실행 속도 향상
· 파일 개수는 최대 128개로 제한 -> 한계치를 넘으면 사용되지 않는 파일부터 자동 삭제
1.4. 획득가능한 정보
· 응용프로그램 이름
· 응용프로그램 실행 횟수
· 응용프로그램 마지막 실행 시각 (FILETIME, 64-Bit Timestmamp)
· 참조 목록 (실행 시 필요한 DLL, SDB, NLS, INI 등의 경로)
· 파일 시스템 시간 정보 (생성, 수정, 접근 시간)을 이용한 통합 분석
1.5. 프리패치 활용
· 악성코드가 실행될 경우, 프리패치 파일 자동 생성
· 부트 프리패치 파일을 이용해, 부팅 시 로드되는 악성코드 탐지 가능
· 참조 목록을 통해, 로드한 라이브러리, 파일 목록 확인 가능
2. 로그파일
· 파일시스템의 I/O 혹은 트랜잭션에 대한 로그
· NTFS 파일시스템 로그
- %SystemDrive%\$LogFile
- %SystemDrive%\$Extend\$UsnJrnl:$J
· 파일시스템 로그의 장점
- 특정 기간 동안 일어난 상세한 파일시스템 이벤트 분석 가능
- 삭제된 파일의 흔적 추적 가능
2.1. $LogFile
· 트랜잭션 로그 파일
- 시스템 비정상 동작을 대비하기 위한 트랜잭션 로그
- 파일 생성, 삭제, 수정, 파일명 변경, 이동 등의 행위 파악 가능
· 트랜잭션 단위의 로그 기록
- 파일/디렉터리 생성
- 파일/디렉터리 삭제
- 파일/디렉터리 변경
- MFT 레코드 변경
· 일반적으로 64MB 크기
· PC의 일반적 작업이라면 2~3시간 정도의 로그가 보관
2.2. $UsnJrnl
· NTFS 변경 로그
- 파일이나 디렉터리의 변경 내용 기록
- 윈도우 7부터 기본 활성화
· 로그에 기록되는 정보
- 변경된 시간
- 변경 이유
- 파일/디렉터리의 이름
- 파일/디렉터리의 속성
- 파일/디렉터리의 MFT 레코드 번호
- 파일의 부모 디렉터리에 대한 파일 참조 주소
- 보안 ID (Security ID)
- 레코드의 USN (Update Sequence Number)
· 컴퓨터를 계속 사용할 경우, 보통 1~2일의 로그 저장
· 하루 8시간 정도 사용할 경우, 보통 4~5일의 로그 저장
· $MAX
-변경 로그에 대한 메타데이터
· $J
-실제 변경 레코드
2.3. 필기
· $Logfile은 보통 2시간정도만 기록한다. 이것은 롤백을 위한 용도이다.. 하지만 $UsnJrnl은 단순 히 기록하는 것이기 때문에 매우 도움이 된다.
· 경로에 들어가면 ADS 속성( 스트림이 2개이다..)
· 추가 스트림으로 $J인데 winhex로보면 왼쪽 아이콘에 ... 모양이 있다. 이것이 ADS 속성이라는의미이다. 이것을 더블클릭하면 $j는 2기가이다..원래는 32메가 만 쓴느건데..앞에가 다 ㅇ으로채워져있다. 이것또한 윈헥스에 (스파스)라고 표시되어있다. 그냥 다 가져온다.
Sqlite도구를 쓴다음 select EventTime, Event, Detail, FullPath From LogFile을 친다.
· Detail에서 클러스터 넘버를 쓰면 (24) <--이런식으로써져있는데 이것은 결구 24개의 클러스터를 쓴다는 의미..파일의 크기를 추정해볼 수 있다.
· select TimeStamp, Event, FullPath From USNJRNL
where Event like %file_Deleted%' 이렇게하면 삭제된파일만나온다.
where FullPath like '%Desktop%' 하면 바탕화면만나온다.
where TimeStamp like '%2014-11-27 13:%' 이러면 이날 이후로만나옴
where TimeStamp >'2014-11-27' and TimeStamp < '2014-11-28'
3. 바로가기
· 링크 파일(LNK)이라고도 불리며 영문 명칭은 “Windows Shortcut”, “Shell Link” 윈도우에만 존재하는 기능으로 파일, 디렉터리 등 객체를 참조하는 파일
· 커맨드라인이 아닌 GUI에서만 동작
· .lnk 확장자를 가짐
3.1. 저장위치
· 메뉴
- %UserProfile%\AppData\Roaming\Microsoft\Windows\Start Menu
· 바탕화면
- %UserProfile%\Desktop
· 사용자의 내 음악(My Music), 내 그림(My Pictures), 내 비디오(My Videos) 폴더
- %UserProfile% “%SystemDrive%\Users\Public” 하위 폴더 링크
본 글에서는 Windows의 버전 관련 정보를 얻을 수 있는 레지스트리를 알아보고, 기존 레지스트리로는 구분할 수 없는 10과 11을 구분할 수 있는 또 다른 레지스트리에 대해 찾아보고 소개하는 내용을 담았다. 혹여, Windows 10과 11을 구분하고자 하는 사람들에게 도움이 되길 바란다.
Windows Registry where it was stored
윈도우 레지스트리의 어느 곳에서 윈도우 버전 관련 정보를 얻을 수 있는지 알아보자.
Common Informations
먼저 일반적인 Windows 버전 관련 정보를 얻을 수 있는 레지스트리 키는 아래와 같다.
Windows
Key
7
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion
10
11
주요 Registry Value를 살펴보면 아래 표와 같다.
Value Name
Windows
Desc.
7
10
11
BuildLab
○
○
○
현 시스템의 전체 빌드 버전 문자열
BuildLabEx
○
○
○
현 시스템의 좀 더 상세한 전체 빌드 버전 문자열 - [major].[minor].[build].[branch].[date]-[time]
CurrentBuild
○
○
○
현 시스템의 메이저 빌드 버전
CurrentBuildNumber
○
○
○
현 시스템의 메이저 빌드 버전
CurrentMajorVersionNumber
×
○
○
현 시스템의 NT 커널 메이저 버전 번호 - 10부터 새로 만들어짐
CurrentMinorVersionNumber
×
○
○
현 시스템의 NT 커널 마이너 버전 번호 - 10부터 새로 만들어짐
CurrentVersion
○
○
○
현 시스템의 NT 커널 버전 - 8.1부터 6.3으로 고정, 10부터는 위의 Major와 Minor를 이용하는 것을 추천
DisplayVersion
×
○
○
현 시스템의 운영체제 버전 - 1803, 1903, 20H2, 21H2 같은 문자열
EditionID
○
○
○
Home, Professional, Education 등 에디션 ID 정보 - 평가판의 경우 Eval이 붙음
InstallDate
○
○
○
Unix 타임스탬프 형식의 윈도우 설치 시간
InstallTime
×
○
○
Windows Filetime 형식의 윈도우 설치 시간
ProductName
○
○
○
현 시스템의 Windows 제품 이름 - Windows 10 Pro, Windows 7 Ultimate 등 흔히 윈도우 버전 정보라고 말하는 대상
RegisteredOwner
○
○
○
현 시스템의 등록자 및 소유자 - 보통 설치 당시에 입력한 사용자 이름 혹은 로그인한 MS 계정의 이메일
SystemRoot
○
○
○
시스템 파일이 저장된 경로 - 환경변수 %SystemRoot%
UBR
○
○
○
업데이트 빌드 리비전(Update Build Revision) - OS Build 22000.376에서 376 위치에 해당하는 값
위의 "Windows 11 Pro의 CurrentVersion 예하 Values"로 보면 알 수 있지만 Windows 11임에도 불구하고 CurrentMajorVersionNumber가 정수 10 값을 가지며, ProductName도 "Windows 10 Pro"라는 문자열을 갖는다. 처음엔 Windows 10에서 Windows 11로 업그레이드 한 탓에 이런 흔적이 남은 것인가 싶었지만 처음부터 Windows 11로 설치해도 Windows 10으로 남는다는 것이 문제였다.
How to get a correct information
그래서 Windows 11임을 구분할 수 있는 다른 레지스트리 값을 찾아야 했다. 그 결과 Windows의 부팅 설정 데이터(BCD, Boot Configuration Data) 레지스트리에서 해답을 찾을 수 있었다. BCD 관련 레지스트리 키 경로는 아래와 같다.
HKEY_LOCAL_MACHINE\BCD00000000
BCD00000000의 서브 키중 Objects 라는 키가 있다. Objects 키 밑으로 여러 GUID 형식의 서브 키가 존재한다.
HKEY_LOCAL_MACHINE\BCD00000000\Objects\{<GUID>}
"{9dea862c-5cdd-4e70-acc1-f32b344d4795}" GUID는 Windows 부팅 관리자(Windows Boot Manager)를 나타내는 GUID 형식의 Identifier다. 이는 7, 10, 11 모두 동일하다. Objects의 서브 키중 이러한 GUID를 갖는 서브 키가 존재하고, 그 밑으로 23000003이라는 서브 키가 존재한다. 7, 10, 11, 어느 컴퓨터든 마찬가지로 모두 존재한다. 23000003 서브 키는 Element라는 값을 가지고 있는데, Element에는 GUID 형태의 문자열이 들어있다. 아래 그림에서 Element에 저장된 GUID는 아래 표와 같다. 이 값은 컴퓨터마다 다르다.
이상으로 Windows 버전 관련 정보를 얻을 수 있는 윈도우 레지스트리에 대해 알아봤다. Windows 버전 관련 정보가 저장된 레지스트리 위치와 값들의 의미에 더해 기존에 알려진 Windows NT\CurrentVersion으로는 Windows 11을 구분할 수 없다는 문제에 대한 해결책도 함께 알아봤다. 아직 Windows 11이 정식 출시된 지 얼마 안 됐기 때문이 아닐까 싶다. 훗날 CurrentMajorVersionNumber 값이 11(0xB)가 되는 날이 오지 않을까 예상해본다.
참고로 BCD 관련 레지스트리는 Windows 7도 존재하며 7의 경우 "Windows 7", 10의 경우 "Windows 10"으로 나타난다.
Windows 11 밈 중에 겉 모습만 바뀌고 속은 Windows 10이라는 걸 재밌게 표현한 짤들을 많이 볼 수 있다. 이 밈을 다시 한번 느끼게 해준 재밌는 경험이었다.