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.hexBu 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:
1import sqlite32import re34def recover_deleted_records(db_path):5with open(db_path, 'rb') as f:6data = f.read()78# SQLite sayfa boyutu (genellikle 4096 byte)9page_size = 40961011recovered = []1213# Silinen metni arayabilmek için pattern tanımla14# Örnek: ASCII karakterler içeren dizileri bul15pattern = rb'[\x20-\x7e]{10,}'16matches = re.finditer(pattern, data)1718for match in matches:19recovered.append(match.group().decode('ascii', errors='ignore'))2021return recovered2223if __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.dbBu 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.
0 yorum