바린트 디코딩: SQLite 포렌식에서의 핵심 기술

소개

제가 바린트를 처음 접한 것은 수년 전 살인 및 방화 사건의 디지털 포렌식 조사에서 아이폰 3GS를 조사하던 중이었습니다. 그때까지 포렌식 작업은 주로 피처폰, 특히 BREW를 실행하는 CDMA 기기를 대상으로 했습니다. 각 문자 메시지는 일관된 오프셋과 메시지 길이를 나타내는 간단한 16진수 값으로 자체 파일에 저장되었습니다. 예측 가능하고 익숙한 과정이었죠.

하지만 아이폰은 저에게 완전히 새로운 도전을 안겨주었습니다. 메시지는 더 이상 개별 파일로 저장되지 않고 데이터베이스 내의 레코드로 저장되었습니다. 피처폰의 단순함과 달리 메시지 문자열의 길이는 명확한 16진수 값으로 정의되지 않았습니다. 대신 저는 SQLite 데이터베이스를 탐색하고 레코드 페이로드를 파싱하는 방법을 배웠습니다. 여기서 저는 varints-가변 길이 정수-데이터를 인코딩하는 간결하고 효율적인 방법입니다. 데이터베이스 구조를 풀고 핵심 증거를 추출하면서 지문을 이해하는 것이 중요해졌습니다. 이 사례에서는 변형을 마스터함으로써 방화 및 살인 혐의로 기소된 피고의 유죄 판결을 이끌어내는 데 결정적인 증거를 확보할 수 있었습니다.

바린트는 SQLite 데이터베이스의 기본 구성 요소로, 셀, 레코드 및 특정 필드의 길이를 정의하는 정수를 효율적으로 인코딩할 수 있게 해줍니다. 디지털 포렌식 전문가에게 바린트 디코딩은 데이터베이스 파일 내에서 중요한 정보를 발견하는 데 필수적입니다. 이러한 소형 정수는 테이블 구조를 매핑하고, 레코드 페이로드를 식별하고, 삭제되거나 숨겨진 데이터를 복구하는 데 중요한 역할을 합니다.

이 블로그 게시물에서는 SQLite 포렌식에서 변종이 수행하는 중요한 역할에 대해 살펴봅니다. 제가 개발한 VarInt 계산기를 통해 디코딩 프로세스를 간소화하고, 이 지식을 조사에 적용하는 데 도움이 되는 튜토리얼을 안내해 드립니다. SQLite 데이터베이스 항목 구문 분석부터 삭제된 레코드 재구성에 이르기까지, 변형을 이해하는 것은 모든 포렌식 조사관이 툴킷에 갖춰야 할 기술입니다.

바린트 이해하기: 배린트 발견 및 해독

SQLite와 디지털 포렌식에 대해 자세히 알아보려면 다음과 같은 핵심 기술을 이해해야 합니다. 가변 길이 정수(varints). 이 작은 숫자는 SQLite 데이터베이스의 모든 곳에 존재하며, 가능한 한 적은 바이트를 사용하여 값을 저장함으로써 시스템의 공간을 절약하는 데 도움이 됩니다. 하지만 무엇을 찾아야 할지 모른다면 찾아내고 해독하기가 까다로울 수 있습니다. 단계별로 분석해 보겠습니다.

바린트란 무엇인가요?

바린트는 숫자의 크기에 따라 사용되는 바이트 수가 결정되는 숫자를 저장하는 특별한 방식입니다. 고정 길이 정수(예: 4바이트 또는 8바이트)와 달리 varint는 1바이트만큼 작거나 9바이트만큼 클 수 있습니다. 이러한 유연성 덕분에 바린트는 공간 효율적이지만 해석하기가 더 어렵기도 합니다.

Fou는 어디에서 바린트를 찾을 수 있나요?

SQLite 데이터베이스에서는 varints를 사용하여 인코딩합니다:

  • 데이터베이스 페이지의 셀 또는 레코드 길이입니다.
  • 레코드를 고유하게 식별하는 행 ID입니다.
  • 레코드 페이로드 내 데이터의 길이입니다.
  • 데이터베이스 구조와 관련된 다양한 기타 값입니다.

바린트 판독의 핵심: 마커 비트

바린트를 읽을 때 가장 먼저 알아야 할 것은 바린트의 길이를 파악하는 방법입니다. 바린트의 각 바이트에는 마커 비트 (가장 중요한 비트 또는 MSB)를 확인하여 오른쪽에 동일한 바이트의 일부인 다른 바이트가 있는지 여부를 알려줍니다:

  • 마커 비트가 1이면를 입력하면 다음 바이트도 바린트의 일부가 됩니다.
  • 마커 비트가 0인 경우를 입력하면 변형의 끝에 도달한 것입니다.

바린트 길이를 디코딩하는 두 가지 방법

바린트의 길이를 파악하는 방법에는 긴 방법(이진법 사용)과 쉬운 방법(육각 니블 사용) 두 가지가 있습니다. 두 가지 방법을 모두 살펴보겠습니다.

먼 길: 바이너리 사용

    1. 바린트의 첫 바이트부터 시작합니다.
    2. 바이트를 바이너리로 변환합니다. 가장 중요한 비트(가장 왼쪽 비트)를 확인합니다.
      • 비트가 1이면 오른쪽 바이트가 바린트의 일부입니다.
      • 비트가 0이면 끝에 도달한 것입니다.
    3. MSB가 0인 바이트를 찾을 때까지 각 바이트에 대해 이 과정을 반복합니다.

예시:

  • Byte: 0xC2 → 바이너리: 11000010 → MSB: 1 → 계속 진행합니다.
  • Byte: 0x7F → 바이너리: 01111111 → MSB: 0 → 여기서 멈춥니다.

쉬운 방법: 왼쪽 니블 사용

  1. 왼쪽 니블(바이트의 첫 번째 16진수)을 확인합니다.
  2. 왼쪽 니블이 8 이상(8, 9, A, B, C, D, E 또는 F)인 경우 다음 바이트는 바린트의 일부입니다.
  3. 왼쪽 니블이 7 이하(0~7)이면 바린트의 끝에 도달한 것입니다.

이것이 작동하는 이유: 왼쪽 니블이 8 이상이면 MSB가 1이고, 왼쪽 니블이 7 이하이면 MSB가 0입니다.

예시:

  • Byte: 0xC2 → 왼쪽 니블: C(8보다 큰) → 계속 진행합니다.
  • Byte: 0x7F → 왼쪽 니블: 7(8 미만) → 여기서 멈춥니다.
varint(빨간색 윤곽선)는 메시지 테이블의 길이를 나타냅니다.

셀 길이의 변형 이해: 실제 예시

변수는 SQLite에서 다음과 같은 크기를 식별하는 데 사용됩니다. 를 사용할 수 있습니다. 이러한 셀에는 테이블부터 테이블 레코드까지 무엇이든 포함할 수 있으며, 셀의 첫 바이트는 셀의 크기를 알려줍니다. 이 길이 표시기 자체는 1바이트에서 9바이트까지 다양한 길이의 바린트입니다.

실제 사례: WAL 파일

이 예제에서 셀에는 메시지 테이블. 셀의 첫 바이트는 0x812바이트 바린트를 나타냅니다.

  • 분석:
    • 바이트 1: 0x81 → 이진: 10000001 → 마커 비트: 1 → 계속.
    • 바이트 2: 0x07 → 이진: 00000111 → 마커 비트: 0 → 중지.

디코딩바린트

이제 varint를 디코딩해야 합니다. 단순히 값을 변환하면 0x8107 를 정수로 바꾸면 33,031이라는 엄청난 숫자가 잘못 계산되어 셀의 실제 크기와 일치하지 않습니다.

왜 그럴까요?
마커 비트는 바린트의 실제 값에 기여하지 않습니다. varint를 올바르게 디코딩하려면 다음을 수행해야 합니다. 마커 비트 제거 를 사용하여 이진 표현의 의미 있는 부분만 해석합니다. 방법은 다음과 같습니다:

  • 디코딩:
    • 마커 비트를 제거합니다: 0000001 및 0000111.
    • 두 셉텟을 결합합니다: 00000000 10000111 → 십진수: 135.
  • 셀의 길이는 135바이트입니다(varint 및 ROWID 제외).

효율성을 위한 바린트 계산기 사용

그리고 바린트 계산기 를 사용하면 이 과정이 간소화됩니다. 16진수 값(예: 8107)을 입력하면 바린트를 빠르게 디코딩할 수 있습니다. 위의 예에서 계산기는 135를 반환하여 길이를 확인합니다.

varint 0x8107을 소수점 135로 변환하기

레코드 헤더의 배린트 디코딩

SQLite에서 레코드 헤더는 varints를 사용하여 정의합니다:

  1. 길이: 읽을 데이터의 양.
  2. 유형: 데이터 해석 방법(정수, 문자열, BLOB 등).
이 레코드 헤더 내의 Varint 0x25는 페이로드에 있는 문자열의 길이를 나타냅니다.

예시: 문자열 길이

레코드 헤더에서 varint를 디코딩해 보겠습니다:
  • Varint: 0x25
    • 왼쪽 니블: 2(8 미만) → 단일 바이트 바린트.
    • 십진수: 37.
  • 페이로드: 문자열 길이 = 12바이트(+97444455667).
바린트 계산기는 바린트를 문자열 및 BLOB 길이로 변환합니다.

마무리 생각

바린트를 이해하고 해독하는 것은 SQLite 데이터베이스로 작업하는 모든 디지털 포렌식 수사관에게 초석이 되는 기술입니다. 이 작은 정수는 데이터베이스 구조를 해석하고, 셀 크기를 결정하고, 데이터를 효율적으로 복구하는 데 핵심적인 역할을 합니다.

지문 계산기와 같은 도구를 사용하면 프로세스에 대한 접근성이 향상되어 법의학 전문가가 디지털 증거에 숨겨진 진실을 밝혀내는 데 집중할 수 있습니다. 바린트를 숙달하는 것은 단순한 기술 그 이상으로 수사 결과에 직접적인 영향을 미칠 수 있는 중요한 역량입니다.

여기에서 자세한 내용을 읽고 바린트 계산기를 다운로드할 수 있습니다:

Facebook
트위터
이메일
인쇄

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다