728x90
SQLite 데이터 베이스 파일 변화 알아보기
먼저 데이터 베이스 테이블을 삭제 및 추가하여 SQLite 파일의 구조가 변경 사항을 체크해보자. 이전 글(SQLite 파일 구조)에 DB 파일로 이어서 해보겠습니다.
1. 레코드 추가 했을 때 변화
DB Browser for SQLite를 이용하여 원본 파일 복사한 것에 name: Yung, address: Songwoori, H.P : 031-000-0000, etc : yung@like.me 레코드를 추가해 보겠습니다.
확인방법
HxD를 이용하면 원본파일과 변경 파일을 쉽게 비교할 수 있는데 파일들을 열고 나서 Ctrl + k를 눌러 파일 경로를 정해 준다.
F6을 누르면 차이나는 다음 byte로 이동이 되고 Shift + F6을 누르면 이전 byte로 이동이 된다.
- SQLite 오프셋 0x1B에 데이터 베이스의 변경 및 조작 횟수가 3에서 4로 바뀐 것을 확인할 수 있습니다.
- 03 ~ 04은 해당 페이지의 레코드 개수를 확인해 보면 04 > 05로 변경된 것을 확인 가능
- 05 ~ 06은 레코드가 시작되는 시작 오프셋 값을 가지고 있습니다. (시작 오프셋이 달라짐)
- 레코드 추가 파일 시작주소(1F16)로 가 보면 추가 한 레코드를 확인할 수 있다.
2. 레코드 삭제 했을 때 변화
이번에는 테이블에서 하나의 레코드를 지운 후에 원본 파일과 비교하여 차이점을 살펴보겠습니다. 이전에 추가한 레코드를 삭제했습니다.
- SQLite 오프셋 0x1B에 데이터 베이스의 변경 및 조작 횟수가 4에서 5로 바뀐 것을 확인할 수 있습니다.
- 해당 페이지의 레코드 길이를 확인해 보면 5개에서 4개로 줄었습니다.
- 레코드가 시작되는 시작 오프셋 값이 변화를 확인할 수 있습니다.
- 원본 파일과 비교하면 시작 주소는 다르지만 삭제한 데이터가 남아 있는 것을 확인할 수 있습니다.
3. SQLite 데이터 베이스 복구
삭제했던 데이터가 Free Space Blok에 남아 있으면 Hex값을 수정하여 복구 가능함
- 파일 헤더에서 페이즈 크기 확인 페이지 시작주소로 이동
- 페이지 헤더에서 Free Space Block, 레코드 개수 값 변경
- 문자열 검색으로 복구하고자 하는 Leaf Cell 시작주소를 알아내서 페이지 헤더에 추가
- 레코드 길이, Row ID, 데이터 헤더 길이를 차례로 입력
- 각 필드 크기 확인 및 수정
- 페이지 헤더에서 Free Space Block, 레코드 개수 값 변경
- 문자열 검색으로 복구하고자 하는 Leaf Cell 시작주소를 알아내서 페이지 헤더에 추가
- 길이가 27 나옴
- 레코드 길이, 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 |