Wprowadzenie
Bazy danych SQLite to skarbnice cyfrowych dowodów znalezionych w wielu aplikacjach, od wiadomości na czacie po dzienniki transakcji. Ale co się dzieje, gdy rekordy są usuwane? Enter freeblocki-Ukryte sekcje nieużywanego miejsca na stronach bazy danych, które zachowują pozostałości usuniętych danych. Te wolne blokady są kopalnią złota dla śledczych, umożliwiając odzyskiwanie krytycznych rekordów i odkrywanie ukrytych dowodów.
Ten blog demistyfikuje wolne blokady SQLite, prowadząc Cię przez sposób ich działania, jak je zlokalizować za pomocą narzędzi takich jak edytory szesnastkowe i jak odzyskać usunięte rekordy. Niezależnie od tego, czy jesteś śledczym, czy entuzjastą kryminalistyki cyfrowej, ten przewodnik wyposaży Cię w podstawowe techniki wydobywania ukrytych danych.
Czym są Freeblocks w SQLite?
Freeblocks to sekcje niewykorzystanego miejsca na stronie bazy danych SQLite. Gdy rekord jest usuwany, odpowiadająca mu przestrzeń nie jest natychmiast nadpisywana, chyba że włączony jest mechanizm bezpiecznego usuwania. Zamiast tego jest ona oznaczana jako freeblockdostępne dla przyszłych zapisów.
W tym procesie:
- Wskaźnik do usuniętego rekordu jest usuwany.
- Nagłówek strony zostanie zaktualizowany, aby odzwierciedlić usunięcie.
- Jeśli ma to zastosowanie, przesunięcie wskazujące na pierwszy wolny blok jest dostosowywane.
Te wolne blokady często zachowują pozostałości oryginalnych danych, co czyni je krytycznym celem dla śledczych, którzy chcą odzyskać usunięte rekordy.
Przykład:
Na poniższym zrzucie ekranu sprawdzamy bazę danych SQLite za pomocą DB Browser. Tabela "wiadomości" pokazuje dwa aktywne rekordy, ale wskazówki kryminalistyczne sugerują obecność dodatkowych usuniętych rekordów.

Jak Freeblocks mieszczą się w nagłówkach stron SQLite
Aby zlokalizować i przeanalizować freeblocki, musimy najpierw zrozumieć strukturę stron bazy danych SQLite. Każda strona zawiera nagłówek, który zapewnia krytyczne metadane, w tym wskaźniki do freeblocków.
Poniższa tabela przedstawia strukturę nagłówka dla strony typu 0D:
Przesunięcie | Rozmiar | Opis |
---|---|---|
0 | 1 bajt | Typ strony |
1 | 2 bajty | Przesunięcie bajtu do pierwszego wolnego bloku |
3 | 2 bajty | Liczba komórek na stronie |
5 | 2 bajty | Przesunięcie do pierwszego bajtu zawartości komórki |
7 | 1 bajt | Liczba pofragmentowanych wolnych bajtów w komórkach |
Kluczowy wniosek:
Wartość w przesunięciu 1 w nagłówku strony wskazuje na pierwszy wolny blok. Jeśli ta wartość to 0x0000
na stronie nie ma żadnych darmowych blokad.
Używanie edytorów szesnastkowych do analizy freeblocków
Aby zlokalizować pierwszy freeblock, otwieramy bazę danych w edytorze szesnastkowym. Dwubajtowa wartość w offsecie 1 nagłówka strony zapewnia offset do lokalizacji freeblocka.
W poniższym przykładzie:
- Edytor szesnastkowy podświetla przesunięcie
0x03A9
(dziesiętnie 937) w kolorze czerwonym, który wskazuje lokalizację pierwszego wolnego bloku.

Przejście do tego offsetu ujawnia początek wolnego bloku. Poniżej przeanalizujemy komórkę znajdującą się na offsecie 937.

Dekodowanie nagłówków Freeblock
Każdy freeblock zawiera czterobajtowy nagłówek:
- Pierwsze 2 bajty: Przesunięcie do następnego wolnego bloku (
0x0000
jeśli nie istnieje). - Drugie 2 bajty: Całkowity rozmiar wolnego bloku, w tym sam nagłówek.
Przykład:
Przy offsecie 0x03A9
, nagłówek freeblock wskazuje:
- Następny wolny blok znajduje się na offsecie
0x03EA
(dziesiętnie 1002). - Rozmiar wolnego bloku wynosi
0x0024
(36 bajtów, łącznie z nagłówkiem).
Odzyskiwanie usuniętych rekordów przy użyciu Freeblocks
Freeblocki często zawierają pozostałości usuniętych rekordów, umożliwiając śledczym odzyskanie części lub całości danych. Na poniższym zrzucie ekranu ładunek usuniętego rekordu jest nienaruszony i możliwy do odzyskania pomimo usunięcia wskaźnika.
Przykład:
- Usunięty rekord w offsecie
0x03A9
zawiera wiadomość: "Niewiele. Jak się masz?" - Kluczowe pola pozostają nienaruszone, w tym treść wiadomości, nawet jeśli inne metadane zostały nadpisane.

Analizujemy kolejne wolne blokady, aby odkryć dodatkowe usunięte rekordy. Przy offsecie 0x03EA
, nagłówek freeblock ujawnia:
- Rozmiar wolnego bloku wynosi
0x0016
(22 bajty). - Jest to ostatni wolny blok w łańcuchu, jak wskazuje symbol
0x0000
w następnym polu wskaźnika wolnego bloku.

Poniższy zrzut ekranu podkreśla cały obszar komórki drugiego wolnego bloku w łańcuchu, w którym znajdowała się usunięta wiadomość "Cześć Andy!".

Identyfikacja dodatkowych usuniętych rekordów
Tak się jednak składa, że na tej stronie znajduje się jeszcze jeden usunięty rekord, do którego nie odwołuje się łańcuch freeblock. Patrząc wstecz na nagłówek strony, były tylko 2 rekordy na tej stronie, zgodnie z dwubajtową wartością w offsecie 3 (0x00002
). A ponieważ są tylko 2 rekordy, w tablicy wskaźników są tylko dwa wskaźniki. Te dwa wskaźniki wskazują na rekord #2 - "Hej, co tam?" i rekord #4 - "Hej, zastanawiałem się, czy masz jakiegoś Scooby snaxa". Możesz zauważyć, że w dalszej części strony znajduje się kolejna długa wiadomość.
Dwubajtowa wartość w przesunięciu 5 w nagłówku strony jest przesunięciem do obszaru zawartości komórki, czyli zasadniczo tam, gdzie zostanie zapisany następny rekord, chyba że zmieści się on w jednym z wolnych bloków. Ta wartość to 0x0363
co jest przesunięciem dziesiętnym 867.

Strzałka na powyższym zrzucie ekranu wskazuje przesunięcie strony 867. Jest to początek zawartości komórki, co oznacza, że następny rekord zostanie dodany tuż nad tym rekordem. Usunięty rekord powyżej zawiera wiadomość: "Zdarzyło mi się otrzymać nową dostawę zeszłej nocy. Masz szczęście. Ile potrzebujesz?".
Baza danych traktuje te dane jako nieprzydzielone miejsce. Równie dobrze można ją wypełnić 0x00
ponieważ w tablicy wskaźników nie ma wskaźnika, który by go adresował.
Jeśli rekord, który jest zbyt duży, aby zmieścić się w dwóch wolnych blokach na stronie, zostanie dodany do tabeli, do której należy ta strona, nadpisze on wiadomość, którą jest rekord #5.
Zobaczmy, jak to wygląda teraz, gdy zidentyfikowaliśmy dwie wolne blokady wraz z trzecim usuniętym rekordem, który czeka na nadpisanie:

Po przeanalizowaniu bazy danych w jej nieprzetworzonym formacie możemy stwierdzić, że zawierała ona więcej niż tylko 2 rekordy "na żywo", które wyświetlała przeglądarka bazy danych.
Nagranie #1 było prawdopodobnie wiadomością "Cześć Andy!", podczas gdy nagranie #3 było prawdopodobnie wiadomością "Niewiele. Jak się masz?". Rekord #5 nadal ma swój numer rekordu w komórce zidentyfikowanej jako wiadomość: "Tak się składa, że ostatniej nocy dostałem nową dostawę. Masz szczęście. Ile potrzebujesz?".
Wnioski
Freeblocki są potężnym narzędziem w dochodzeniach kryminalistycznych, oferując wgląd w usunięte rekordy i nieprzydzielone dane. Opanowując te techniki, śledczy mogą odkryć cyfrowe ślady pozostawione przez bazy danych.
Chcesz przenieść swoje umiejętności w zakresie analizy śledczej SQLite na wyższy poziom? Zapoznaj się z naszymi zaawansowanymi programami szkoleniowymi lub skontaktuj się z nami, aby dowiedzieć się, w jaki sposób możemy pomóc Ci zostać ekspertem medycyny sądowej.