Inledning
SQLite-databaser är skattkistor med digitala bevis som finns i många appar, från chattmeddelanden till transaktionsloggar. Men vad händer när poster raderas? Skriv in freeblocks-Dolda sektioner av oanvänt utrymme inom databassidor som innehåller rester av raderade data. Dessa freeblocks är en guldgruva för kriminaltekniska utredare, eftersom de gör det möjligt att återskapa viktiga poster och avslöja dolda bevis.
Den här bloggen avmystifierar SQLite freeblocks och går igenom hur de fungerar, hur man hittar dem med verktyg som hexredigerare och hur man återställer raderade poster. Oavsett om du är en utredare eller en digital kriminalteknisk entusiast kommer den här guiden att utrusta dig med viktiga tekniker för att extrahera dolda data.
Vad är Freeblocks i SQLite?
Freeblocks är delar av oanvänt utrymme inom en SQLite-databassida. När en post raderas skrivs inte motsvarande utrymme över omedelbart om inte en säker raderingsmekanism är aktiverad. Istället markeras det som en freeblock, tillgänglig för framtida skrivningar.
I den här processen:
- Pekaren till den borttagna posten tas bort.
- Sidhuvudet uppdateras för att återspegla borttagningen.
- Om tillämpligt justeras den offset som pekar mot det första freeblocket.
Dessa freeblocks har ofta kvar rester av originaldata, vilket gör dem till ett kritiskt fokus för kriminaltekniska utredare som vill återställa raderade poster.
Exempel:
I skärmdumpen nedan undersöker vi en SQLite-databas med hjälp av DB Browser. Tabellen "meddelanden" visar två live-poster, men kriminaltekniska ledtrådar tyder på att det finns ytterligare raderade poster.

Hur freeblocks passar in i sidhuvudet på SQLite-sidor
För att hitta och analysera freeblocks måste vi först förstå strukturen på SQLite-databassidorna. Varje sida innehåller en rubrik som innehåller viktiga metadata, inklusive pekare till freeblocks.
I tabellen nedan beskrivs rubrikstrukturen för en sidtyp av typen 0D:
Offset | Storlek | Beskrivning |
---|---|---|
0 | 1 byte | Sidtyp |
1 | 2 byte | Byte-offset till den första freeblocken |
3 | 2 byte | Antal celler på sidan |
5 | 2 byte | Offset till den första byten i cellens innehåll |
7 | 1 byte | Antal fragmenterade fria bytes i celler |
Viktig information att ta med sig:
Värdet vid offset 1 i sidhuvudet pekar på det första freeblocket. Om detta värde är 0x0000
finns det inga freeblocks på sidan.
Använda hexeditorer för att analysera freeblocks
För att lokalisera det första freeblocket öppnar vi databasen i en hexredigerare. Värdet på två byte vid offset 1 i sidhuvudet ger offseten till freeblockets plats.
I exemplet nedan:
- Hexredigeraren markerar offset
0x03A9
(decimal 937) i rött, vilket pekar på platsen för det första freeblocket.

Genom att navigera till denna offset avslöjas början på freeblocket. Nedan undersöker vi cellen som ligger vid offset 937.

Avkodning av freeblock-headers
Varje freeblock innehåller en header på fyra byte som består av:
- Första 2 byte: Offset till nästa freeblock (
0x0000
om det inte finns någon). - Andra 2 byte: Total storlek på freeblocket, inklusive själva rubriken.
Exempel:
Vid offset 0x03A9
, indikerar freeblock-headern:
- Nästa freeblock är vid offset
0x03EA
(decimal 1002). - Storleken på freeblock är
0x0024
(36 byte, inklusive sidhuvudet).
Återställa raderade poster med hjälp av Freeblocks
Freeblocks innehåller ofta rester av raderade poster, vilket gör det möjligt för kriminaltekniska utredare att återställa partiella eller fullständiga data. I skärmdumpen nedan är nyttolasten för en raderad post intakt och kan återställas trots att dess pekare har tagits bort.
Exempel:
- Den raderade posten vid offset
0x03A9
innehåller meddelandet: "Inte mycket. Hur är det med dig?" - Viktiga fält förblir intakta, inklusive meddelandets innehåll, även om andra metadata har skrivits över.

Vi analyserar efterföljande freeblock för att upptäcka ytterligare raderade poster. Vid offset 0x03EA
, avslöjar freeblock-headern:
- Freeblockets storlek är
0x0016
(22 byte). - Detta är det sista freeblocket i kedjan, vilket indikeras av
0x0000
i nästa freeblock pointerfält.

Nedanstående skärmdump visar hela cellområdet för det andra freeblocket i kedjan där det raderade meddelandet var "Hej Andy!"

Identifiering av ytterligare raderade poster
Men det råkar finnas ytterligare en raderad post på den här sidan som inte refereras till av freeblockkedjan. Om man tittar tillbaka på sidhuvudet fanns det bara 2 poster på den här sidan enligt tvåbytesvärdet vid offset 3 (0x00002
). Och eftersom det bara finns två poster finns det bara två pekare i pekararrayen. Dessa två pekare pekar på post #2 - "Hej, läget?" och post #4 - "Hej, jag undrar om du har någon Scooby snax." Du kanske märker att det finns ett annat långt meddelande längre upp på sidan.
Värdet på två byte vid offset 5 i sidhuvudet är offset till cellens innehållsområde, i princip där nästa post skulle skrivas, det vill säga om den inte kan rymmas i ett av freeblocken. Detta värde är 0x0363
vilket är decimal offset 867.

Pilen i skärmdumpen ovan pekar på sidoffset 867. Detta är början på cellinnehållet, vilket innebär att nästa post kommer att läggas till precis ovanför den här posten. Den raderade posten ovanför denna innehåller meddelandet "Jag råkade få in en ny leverans i går kväll. Du har tur. Hur mycket behöver du?"
Databasen betraktar dessa data som oallokerat utrymme. Det kan lika gärna fyllas med 0x00
eftersom det inte finns någon pekare i pekararrayen som adresserar den.
Om en post som är för stor för att rymmas inom de två freeblocken på sidan läggs till i den tabell som den här sidan tillhör, kommer den att skriva över meddelandet, som råkar vara post #5.
Låt oss se hur det ser ut nu när vi har identifierat de två freeblocken tillsammans med den tredje raderade posten som väntar på att skrivas över:

Efter att ha analyserat databasen i dess råa format kan vi dra slutsatsen att den innehöll mer än bara de 2 "live"-poster som databasvisaren visade.
Inspelning #1 var sannolikt meddelandet "Hej Andy!" medan inspelning #3 sannolikt var meddelandet "Inte mycket. Hur är det med dig?". Post #5 har fortfarande sitt postnummer i sin cell identifierat som meddelandet, "Jag råkade få in en ny leverans i går kväll. Du har tur. Hur mycket behöver du?"
Slutsats
Freeblocks är ett kraftfullt verktyg i kriminaltekniska utredningar, eftersom de ger en inblick i raderade poster och oallokerade data. Genom att behärska dessa tekniker kan utredare avslöja de digitala spår som databaser lämnar efter sig.
Är du redo att ta dina SQLite-forensiktiga färdigheter till nästa nivå? Utforska våra avancerade utbildningsprogram eller kontakta oss för att få veta hur vi kan hjälpa dig att bli en kriminalteknisk expert.