play/box

SQLite 데이터 베이스 복구

카고형 2023. 5. 24. 17:25
728x90

SQLite 데이터 베이스 파일 변화 알아보기

먼저 데이터 베이스 테이블을 삭제 및 추가하여 SQLite 파일의 구조가 변경 사항을 체크해보자. 이전 글(SQLite 파일 구조)에 DB 파일로 이어서 해보겠습니다.

 

1. 레코드 추가 했을 때 변화 

DB Browser for SQLite를 이용하여 원본 파일 복사한 것에  name: Yung,  address: Songwoori, H.P : 031-000-0000, etc : yung@like.me 레코드를 추가해 보겠습니다.

원본 DB
레코드 추가 DB

확인방법

HxD를 이용하면 원본파일과 변경 파일을 쉽게 비교할 수 있는데 파일들을 열고 나서 Ctrl + k를 눌러 파일 경로를 정해 준다.

비교 파일 경로 설정

F6을 누르면 차이나는 다음 byte로 이동이 되고 Shift + F6을 누르면 이전 byte로 이동이 된다.

 

 

  • SQLite 오프셋 0x1B에 데이터 베이스의 변경 및 조작 횟수가 3에서 4로 바뀐 것을 확인할 수 있습니다.

 

  • 03 ~ 04은 해당 페이지의 레코드 개수를 확인해 보면 04 > 05로 변경된 것을 확인 가능

원본 레코드 갯수
추가본 레코드 갯수

 

  • 05 ~ 06은 레코드가 시작되는 시작 오프셋 값을 가지고 있습니다.  (시작 오프셋이 달라짐)

원본 시작 주소
추가본 시작 주소

 

  • 레코드 추가 파일 시작주소(1F16)로 가 보면 추가 한 레코드를 확인할 수 있다. 


2. 레코드 삭제 했을 때 변화 

이번에는 테이블에서 하나의 레코드를 지운 후에 원본 파일과 비교하여 차이점을 살펴보겠습니다. 이전에 추가한 레코드를 삭제했습니다.

삭제 전 DB
삭제 후 DB

  • SQLite 오프셋 0x1B에 데이터 베이스의 변경 및 조작 횟수가 4에서 5로 바뀐 것을 확인할 수 있습니다.

삭제 전 File Change Counter
삭제 후 File Change Counter

 

  • 해당 페이지의 레코드 길이를 확인해 보면 5개에서 4개로 줄었습니다.

 

  • 레코드가 시작되는 시작 오프셋 값이 변화를 확인할 수 있습니다.

 

  •  원본 파일과 비교하면 시작 주소는 다르지만 삭제한 데이터가 남아 있는 것을 확인할 수 있습니다.

원본 레코드 데이터
삭제한 레코드 데이터


 

3. SQLite 데이터 베이스 복구 

삭제했던 데이터가 Free Space Blok에 남아 있으면 Hex값을 수정하여 복구 가능함

  1.  파일 헤더에서 페이즈 크기 확인 페이지 시작주소로 이동
  2. 페이지 헤더에서 Free Space Block, 레코드 개수 값 변경
  3. 문자열 검색으로 복구하고자 하는 Leaf Cell 시작주소를 알아내서 페이지 헤더에 추가
  4. 레코드 길이, Row ID, 데이터 헤더 길이를 차례로 입력
  5. 각 필드 크기 확인 및 수정

 

  • 페이지 헤더에서 Free Space Block, 레코드 개수 값 변경

 

  • 문자열 검색으로 복구하고자 하는 Leaf Cell 시작주소를 알아내서 페이지 헤더에 추가
    • 길이가 27 나옴

 

  • 레코드 길이, Row ID, 데이터 헤더 길이를 확인해서 변경

레코드 길이
Row ID
데이터 헤더

  • 각 필드 크기 계산공식을 역산하여 확인하고 수정한다
    • 4 * 2 +13 = 21 > 0x15
    • 9 * 2 + 13 = 31 > 0x1F
    • 12* 2 +13 = 37 > 0x25
    • 12* 2 +13 = 37 > 0x25

필드 확인
변경

마지막으로 저장하고 DB를 열어 보면 지운레코드가 복호화된 것을 확인할 수 있다

728x90

'play > box' 카테고리의 다른 글

[Android] 분석 환경 셋팅  (1) 2023.06.30
Chrome JavaScript 비활성화 방법 및 크롬 안티 디버깅 우회  (2) 2023.06.18
SQLite 파일 구조  (2) 2023.05.21
dexprotector unpack  (1) 2023.04.21
VBA 매크로 비밀 번호 푸는 법  (0) 2023.03.25