본문 바로가기

Kitri_NCS3기 보안과정/디지털포렌식

SQLite Database

Page 

- 데이터베이스를 이루는 구성요소로 페이지 단위가 사용된다. 

- 페이지의 크기는 512~65536사이의 2의 거듭제곱이다.

- 같은 데이터베이스 내부에서 페이지의 크기는 모두 같아야 한다.

- 페이지의 크기는 offset 0x10에 정의되어 있다

- 페이지의 시작은 1부터 2147483646(2^31 - 2)까지 혹은 140737488224256byte 약 140테라 (정확히는 128테라) 

  (페이지의 크기는 140까지 커질수 있지만 일반적인 디스크 하드웨어의 최대 용량이 더 작다.)



Page의 역활

- The lock-byte page (잠금바이트 페이지)

- freelist page 

freelist trunk page

freelist leaf page

- b-tree page

table b-tree interior page

table b-tree leaf page

index b-tree interior page

index b-tree leaf page

- payload overflow page

- pointer map page



데이터베이스 헤더 

: 데이터베이스 파일의 첫 100바이트는 헤더정보를 구성한다.



00

01

02 

03 

04 

05 

06 

07 

08 

09 

10 

11 

12 

13 

14 

15 

헤더 문자열 "SQLite format 3 \ 000"

 page size

WV

RV 

64 

32 

32 

File Change Counter

DataBase size  

Free page Offset 

Free page Number 

The schema cookie 

The schema format number 

Default page cache size 

Incremental vacuum settings 

text encoding 

user version

incremental- vacuum mode 

 application id

reserved for expansion

reserved for expansion

version valid for number 

SQLite version number 

 

 

 

 

 

 

 

 

 

 

 

 

 

Name

Offset

길이(byte) 

설명 

 헤더 문자열

0x00

16 

SQLite format 3\100 

page size 

0x10 

데이터베이스 페이지 크기 512~32768 , 65536 

파일 형식 쓰기 버전

0x12 

1이나 WAL의 경우 2를 기록 


*WAL?

롤백을 구현하는 기능 ,Write-Ahead Logging 

파일 형식 읽기 버전 

0x13 

1이나 WAL의 경우 2를 기록 

"예약 된"공간의 바이트 

0x14 

페이지 끝에 사용되지 않는 예약된 공간의 바이트, 대개 0 

최대 내장 페이로드 비율 

0x15 

최대 내장 페이로드 비율 . ( = 64) 

 최소 임베디드 페이로드 비율

0x16 

최소 임베디드 페이로드 비율 ( = 32) 

 리프 페이로드 분율

0x17 

 리프 페이로드 분율 ( = 32)

File Change Counter 

0x18 

4 

파일 변경 카운터 

 DataBase size 

0x1B 

페이지 단위의 데이터베이스 파일 크기 

 Free Page Offset

0x20 

첫 번째 freelist trunk 페이지의 페이지 번호 

Free Page Number 

0x24 

총 여유 목록 페이지 수

 The schema cookie 

0x28 

스키마 쿠키 

 The schema format number

0x2B 

4 

스키마 형식 번호, 지원되는 스키마 형식은 1,2,3,4 

 Default page cache size 

0x30 

기본 페이지 캐시 크기 

 Incremental vacuum settings 

0x34 

삭제시 데이터 자동 정리 모드에 있을때 가장 큰 루트 B-tree 페이지의 번호

 text encoding 

0x38 

텍스트 인코딩

(1 = UTF-8 / 2 = UTF-16le / 3 = UTF-16be) 

 user version

0x3B 

사용자 버전 

 incremental- vacuum mode 

0x40 

점진적 삭제시 데이터 자동정리 모드 (0이면 false , 그외는 true) 

  application id

0x44 

어플리케이션 ID 

 reserved for expansion

0x48 

20 

확장이 될 경우를 위해 예약된 영역. 모두 0 

 version valid for number 

0x5B 

버젼 유효 값 

 SQLite version number 

0x60

SQLite Virsion Number 




< Page의 역활 > 

- lock-byte page :  1073741824와 1073742335 사이의 오프셋에있는 바이트를 포함하는 데이터베이스 파일의 단일 페이지


Win95에서 필수 파일잠금 기능을 지원하기위해 만들어졋으나 최신운영체제에는 자문 파일 잠금을 지원하므로 더이상 필요하지 않지만 이전과의 호환성을 위해 존재


- https://www.sqlite.org/fileformat.html