rubrapack 매뉴얼←↑

41 레지스트리 하이브 파일(REGF)

MSIX 패키지 속 Registry.dat 와 User.dat 의 파일 형식이다. Microsoft 는 이것을 공개하지 않는다. 여기의 모든 사실은 [observed] 다: 고른 키/값 집합으로 Windows 의 오프라인 레지스트리 라이브러리(offreg.dll, 10.0.26100, Windows 패키징 도구가 쓰는 작성기 - 그 표시가 기본 블록에 있다)가 쓴 하이브, 그리고 같은 집합으로 rubrapack 이 쓴 하이브를 Windows 에서 OROpenHive 와 RegLoadAppKey 로 읽어 Windows 가 자기 하이브에서 늘어놓는 것과 정확히 같은 키와 값이 나오는 것을 확인했다. 새로 쓴 하이브에 필요한 것만 적는다: 트랜잭션 로그, 휘발성 키, 빈 칸 재사용은 없다.

41.1 배치#

41.2 기본 블록#

오프셋필드값
0서명regf
4, 8순서 번호1, 1 (다르면 = 깨끗이 닫히지 않음; 판독기는 거부하거나 로그를 다시 적용)
12u64 시각0 도 받는다
20, 24판1, 5
28, 32종류, 형식0, 1
36루트 키의 칸 오프셋
40모든 bin 의 크기
44클러스터링1
0xB0offreg 의 표시OfRg, 그다음 u32 1
508체크섬앞의 dword 127개의 XOR; 0 은 1 로, 0xFFFFFFFF 는 0xFFFFFFFE 로 쓴다

나머지는 모두 0 이다.

41.3 키(nk)#

nk, u16 플래그, u64 시각, u32 접근 비트(0), u32 부모(루트면 없음), u32 하위 키 수, u32 휘발성 하위 키 수(0), u32 하위 키 목록, u32 휘발성 목록(없음), u32 값 수, u32 값 목록, u32 보안 칸, u32 클래스(없음), u32 가장 긴 하위 키 이름, u32 가장 긴 클래스(0), u32 가장 긴 값 이름, u32 가장 큰 값 데이터, u32 작업 변수(0), u16 이름 길이, u16 클래스 길이(0), 그다음 이름.

41.4 하위 키 목록(lh, ri)#

41.5 값(vk)과 값 목록#

41.6 보안 칸(sk)#

모든 키가 나눠 쓰는 sk 칸 하나: sk, u16 0, u32 다음과 u32 이전(둘 다 자기 자신), u32 참조 수(키의 수), u32 서술자 길이, 그다음 자기 상대(self-relative) 보안 서술자. offreg 의 것: 소유자와 그룹은 Administrators; SYSTEM 과 Administrators 모든 권한, Everyone 과 RESTRICTED 읽기, 모두 컨테이너 상속.

41.7 재현 가능한 하이브#

시각 필드를 모두 0 으로 두고 칸을 깊이 우선으로 놓으면(키; 루트 키 다음에는 보안 칸; 키의 하위 키 목록, 값 목록, 값마다 그 뒤에 데이터; 그다음 하위 키들을 정렬 순서로) 같은 키와 값은 어느 호스트에서나 같은 바이트가 된다. Windows 는 그런 하이브를 아무 불평 없이 읽는다.