소개: 오버플로 페이지의 퍼즐

집에 있는 액자에 비해 너무 큰 포스터를 구입했다고 상상해 보세요. 포스터를 제대로 표시하려면 사용 가능한 프레임에 맞도록 섹션으로 잘라내야 할 것입니다. 대용량 레코드를 처리할 때 SQLite 데이터베이스에도 동일한 원리가 적용되어 여러 부분으로 나누어 여러 페이지에 걸쳐 저장합니다. 여기에는 오버플로 페이지 들어오세요.

오버플로 페이지는 단일 SQLite 데이터베이스 페이지에 맞지 않는 데이터를 저장합니다(일반적으로 4,096바이트). 이 페이지는 다음과 같습니다. 서로 연결를 통해 포렌식 분석가가 완전한 데이터를 복구하기 위해 재구성해야 하는 체인을 형성합니다. 분석가가 오버플로우 구조를 따르지 않으면 다음과 같은 위험을 감수해야 합니다. 불완전하거나 손상된 증거.

이 문서에서는 오버플로 페이지가 어떻게 작동하는지, 포렌식 조사에서 왜 중요한지, 조각난 데이터를 추출하는 방법을 단계별로 살펴봅니다.

SQLite의 오버플로 페이지란 무엇인가요?

SQLite 데이터베이스는 고정된 페이지 크기를 할당합니다(예 4,096바이트). 그러나 이미지와 같은 레코드가 BLOB(이진 대형 객체)-이 크기를 초과합니다, 초과 데이터가 오버플로 페이지로 넘어갑니다..

주요 요점:

✅ 오버플로 페이지 대용량 기록 방지 한 페이지를 독점하는 것을 방지합니다.
✅ 그들은 체인으로 연결된을 클릭하고 메인 페이지에서 시작합니다.
포렌식 분석가 는 완전한 데이터를 검색하기 위해 이러한 체인을 재구성해야 합니다.

오버플로 페이지의 작동 방식을 이해하는 것은 포렌식 조사에 필수적입니다.

개괄적인 개요: 오버플로 페이지 작동 방식

오버플로 페이지의 개념을 설명하기 위해 다음 예시를 살펴보겠습니다:

1. 조각난 이미지 표현

SQLite의 조각화된 데이터 저장소 그림: 큰 이미지가 여러 프레임으로 분할되어 오버플로 페이지가 큰 BLOB을 처리하는 방식을 나타냅니다.

이 시각화는 이미지와 같은 대용량 BLOB이 SQLite에 저장되는 방식을 나타냅니다. 오버플로 페이지가 조각난 데이터를 저장하는 것처럼 이미지가 여러 섹션으로 나뉘어져 있습니다.

2. 단일 페이지에 저장된 데이터

오버플로 페이지가 필요하지 않은 이상적인 사례를 보여주는 단일 SQLite 페이지 내에 완전히 저장된 F-16 제트기 이미지입니다.

여기에서는 이미지가 하나의 데이터베이스 페이지에 완전히 들어맞기 때문에 오버플로 페이지가 필요하지 않습니다.

3. 여러 페이지에 걸쳐 분할된 데이터

SQLite 페이지 7, 3, 5에 비연속적으로 저장된 이미지의 16진수 표현으로, 포렌식 재구성이 필요합니다.

이 예는 데이터가 비연속적인 방식으로 저장되어 포렌식 분석을 통해 올바르게 재구성해야 하는 방법을 보여줍니다.

4. 오버플로 페이지에서 데이터 재구성하기

오버플로 페이지 검색의 포렌식 프로세스를 보여주는 파편화된 SQLite 페이지에서 성공적으로 재구성된 이미지입니다.

오버플로 페이지 포인터를 따라 포렌식 분석가는 파편화된 데이터를 재조합할 수 있습니다.

오버플로 페이지의 포렌식 중요성

많은 메시징 앱, 모바일 애플리케이션 및 데이터베이스 사용자 프로필 사진, 채팅 로그, 첨부파일을 SQLite에 저장합니다. 이미지와 문서가 여러 페이지에 걸쳐 있는 경우, 포렌식 조사관은 오버플로 구조를 이해해야 데이터를 제대로 추출할 수 있습니다.

포렌식 과제:

  • 파편화된 데이터: 블롭(예: 이미지)은 여러 페이지에 걸쳐 분할되는 경우가 많습니다.
  • 포인터 기반 검색: 분석가는 전체 이미지 또는 파일을 재구성하려면 SQLite의 오버플로 페이지 포인터를 따라야 합니다.
  • 조각 문제: JPEG 헤더(FFD8FF)와 바닥글(FFD9)은 별도의 페이지에 존재할 수 있으므로 단순히 검색하는 것은 실패할 수 있습니다.

실제 예제: 오버플로 페이지에서 프로필 사진 추출하기

이제 SQLite 데이터베이스에 저장된 이미지의 단계별 포렌식 복구 과정을 살펴보겠습니다.

데이터베이스에서 BLOB 찾기

포렌식 추출의 필수 단계인 BLOB로 저장된 프로필 사진이 포함된 연락처 테이블을 보여주는 SQLite용 DB 브라우저입니다.

사용 SQLite용 DB 브라우저포렌식 분석가는 프로필 사진이 포함된 레코드를 식별합니다. 연락처 테이블.

16진수로 BLOB 길이 식별

변인 0xB135는 6,325바이트의 셀 길이로 변환됩니다(변인 자체나 행 ID는 포함되지 않음).

사용 HxD를 사용하여 16진수 편집기를 사용하면 레코드 헤더를 찾습니다. VARINT 를 사용하여 BLOB 길이를 결정합니다.

이미지 크기 확인

총 이미지 크기(6,325바이트)를 보여주는 HxD의 VARINT가 강조 표시되어 표준 SQLite 페이지 크기를 초과했음을 확인합니다.

레코드 헤더의 두 번째 VARINT는 이미지의 크기를 지정합니다. 이 경우 총 크기는 6,325바이트페이지 제한을 초과합니다.

오버플로 포인터 따라가기

페이지 하단에 SQLite 오버플로 포인터를 표시하여 추가 검색을 위해 4페이지로 데이터를 계속 이어가도록 안내합니다.

메인 페이지 하단에는 4바이트 포인터 로 연결됩니다. 4페이지를 클릭하고 이미지의 다음 부분을 클릭합니다.

오버플로 페이지 살펴보기

수동 추출 및 포렌식 재구성을 위해 완전히 강조 표시된 조각화된 이미지의 헥스 보기입니다.

4페이지의 처음 4바이트는 다른 오버플로 페이지가 이어지는지 여부를 나타냅니다. 값은 0x00000000이 바로 마지막 오버플로 페이지.

이미지 추출 및 재구성

수동 추출 및 포렌식 재구성을 위해 완전히 강조 표시된 조각화된 이미지의 헥스 보기입니다.

포렌식 분석가는 6,292바이트 를 사용하여 두 페이지에서 이미지를 수동으로 재구성합니다.

📌4바이트 포인터는 조각된 이미지에 포함될 데이터의 일부가 아닙니다.

복구된 이미지 확인

추출된 이미지SQLite 오버플로 페이지에서 프로필 사진을 복구하고 성공적으로 조각하여 Windows 사진 뷰어에 표시했습니다.

이제 추출된 이미지가 완전히 복원되어 볼 수 있습니다.

최종 생각: 오버플로 페이지 분석의 중요성

포렌식 조사에서 오버플로 페이지를 간과하면 다음과 같은 결과를 초래할 수 있습니다. 중요한 증거 손실. SQLite의 저장 메커니즘을 이해하는 것은 다음을 위해 매우 중요합니다. 정확한 데이터 추출 및 재구성.

주요 포렌식 인사이트:

✔️ 항상 오버플로 페이지 확인대용량 레코드를 분석할 때

✔️ SQLite의 오버플로 포인터신중하게.

✔️ 간단 파일 조각 기술 는 연속되지 않은 저장소로 인해 작동하지 않을 수 있습니다.

분석 여부 채팅 데이터베이스, 연락처 목록 또는 애플리케이션 로그포렌식 전문가는 파편화된 데이터를 복구하는 데 능숙해야 합니다.

💡 SQLite 포렌식에서 파편화된 데이터를 경험한 적이 있나요? 오버플로 페이지 분석에 어떻게 접근하시나요? 아래에 여러분의 인사이트를 공유해 주세요!