SQLite Veritabanı Kurtarma: Silinen Kayıtları Hex Dump'tan Geri Getirmek

SQLite veritabanlarında silinen veriler tamamen yok olmaz, disk üzerinde fragmente edilmiş halde kalır. Hex dump analizi ve uygun araçlarla bu verileri geri getirebilirsin. Adli bilişim çalışmalarında sık kullanılan bir tekniktir.

SQLite dosyası binary bir yapıya sahip. Silinen satırlar, disk bloklarında "free list" alanında bekler. Hex editörle bakıp manuel olarak kurtarmak zaman alıcı olduğundan, Python'la otomatize etmek pratiktir.

Önce veritabanı dosyasının hex dump'ını al:

1xxd -g 1 database.db > database.hex

Bu komut her byte'ı hex biçiminde gösterir. Silinen veriler genellikle NULL byte'larla doldurulmuş bölgelerde kalır.

Python'la silinen kayıtları analiz etmek için `sqlite3` ve `struct` modüllerini kullan:

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1import sqlite3
2import re
3
4def recover_deleted_records(db_path):
5with open(db_path, 'rb') as f:
6data = f.read()
7
8# SQLite sayfa boyutu (genellikle 4096 byte)
9page_size = 4096
10
11recovered = []
12
13# Silinen metni arayabilmek için pattern tanımla
14# Örnek: ASCII karakterler içeren dizileri bul
15pattern = rb'[\x20-\x7e]{10,}'
16matches = re.finditer(pattern, data)
17
18for match in matches:
19recovered.append(match.group().decode('ascii', errors='ignore'))
20
21return recovered
22
23if __name__ == '__main__':
24records = recover_deleted_records('database.db')
25for i, record in enumerate(records[:20], 1):
26print(f"{i}. {record}")

Bu kod veritabanı dosyasını binary olarak okuyor ve ASCII karakterlerden oluşan dizileri çıkarıyor. Beklenen çıktı silinen metin parçaları olacaktır.

Daha güçlü bir yöntem ise `sqlite3` command-line aracının recovery modunu kullanmaktır:

1sqlite3 database.db ".recover" | sqlite3 recovered.db

Bu komut `.recover` komutuyla silinen verileri tarar ve yeni bir veritabanına yazar. Sonra recovered.db'yi sorgulayabilirsin.

Eğer belirli bir tablo yapısını biliyorsan, `carving` tekniğiyle daha kesin sonuçlar alabilirsin. Örneğin, tablo başlığını (schema) bilerek, silinen satırların başını bulup parse edebilirsin.

Sık yapılan hata: Veritabanı dosyasını recovery işleminden sonra tekrar açmaya çalışmak. Orijinal dosyayı kopyala ve kopya üzerinde çalış. Ayrıca, silinen veriler zamanla üzerine yazılabilir; kurtarma işlemini mümkün olduğunca hızlı yap.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz