VI-02 · Mobil cihaz incelemesi

Bir sohbet veri tabanından silinmiş mesajların kurtarılması

Android uygulamasında mesajlar silindi. İnceleme, bazı satırların SQLite günlüğünden ve boş sayfalardan nasıl kurtarıldığını ve neden kısmi kaldığını açıklar.

Eğitim amaçlı sentetik vaka. Kuruluşlar, kişiler, numaralar ve hash değerleri uydurmadır.

01Soru

Bir kişiyle yapılan sohbetten silinen mesajlar cihazdan kurtarılabilir mi ve kurtarma hangi dönem için güvenilirdir?

02Arka plan

Delta Lojistik'te kurgusal bir anlaşmazlıkta, bir taraf bir sohbet dizisinin silindiğini söyler. Android cihazın tam dosya sistemi çıkarımı sağlanmıştır. İnceleme, veri tabanının kurtarılması ve yorumlanmasıyla sınırlıdır; çıkarımın nasıl elde edildiğini ele almaz.

03Sınırlar

  • Fiziksel imaj değil, yalnızca dosya sistemi çıkarımı mevcuttu; bu nedenle ayrılmamış flash alanı taranamadı.
  • Veri tabanı WAL günlüklemesi kullanıyor; kurtarma, bir kontrol noktasının günlüğü boşaltıp boşaltmadığına bağlı.
  • Uçtan uca aktarım şifrelemesi cihaz üzerinde kurtarmayı etkilemez; yerel veri tabanı mesajları uygulama için okunabilir biçimde saklar.

04Alınan delil

ÖğeFormHashNot
Android cihazın dosya sistemi çıkarımıF-03sha256: 2a7f…c410Çıkarım paketi alındığında hash değeri hesaplandı.
msgstore.db, msgstore.db-wal ve msgstore.db-shmF-04sha256: e5d9…b832WAL ve paylaşılan bellek dosyaları ana veri tabanıyla birlikte tutuldu; üçü de hash'lenip kopyalar üzerinde çalışıldı.

05İnceleme yöntemi

  1. Veri tabanını ve günlüğünü birlikte koruyun

    Ana veri tabanı ve -wal ile -shm eşleri bir küme olarak kopyalanıp hash'lendi. Veri tabanını WAL olmadan açmak eski bir görünüm gösterirdi; WAL, henüz ana dosyaya geri yazılmamış sayfaları tutar.

    Android için WhatsApp mesajları (msgstore.db)Hash hesaplayıcı

  2. Canlı satırları ve şemayı okuyun

    Mesaj tablosunun sütunları (tanımlayıcı, sohbet anahtarı, yön, milisaniye cinsinden zaman damgası, metin, medya başvurusu) okundu ki kurtarılan parçalar canlı satırlarla aynı biçimde yorumlanabilsin. Kişiyle sohbet, sohbet listesindeki kişinin satırıyla belirlendi.

    Android için WhatsApp mesajları (msgstore.db)

  3. WAL'dan ve boş listeden silinmiş satırları kurtarın

    Bir mesajı silmek, satırının hücresini b-ağacı sayfası içinde boş olarak işaretler; baytlar sayfa yeniden kullanılana kadar çoğu zaman kalır. Normal bir sorguda artık görünmeyen mesaj metnini ve zaman damgalarını kurtarmak için WAL çerçeveleri ve ana dosyadaki boş blok zincirleri ayrıştırıldı. Her kurtarılan satır, geldiği sayfa ve ofsetle etiketlendi.

    Android için WhatsApp mesajları (msgstore.db)Hex görüntüleyici ve veri denetçisiZaman damgası çözücü

  4. Zaman damgalarını çevirin ve güvenilir dönemi sınırlayın

    Milisaniye zaman damgaları UTC'ye çevrildi. Canlı satırlar bir noktaya kadar kesintisiz bir kayıt verdi; kurtarılan satırlar boşluğun bir kısmını doldurdu. Güvenle kurtarılabilen en eski mesaj, güvenilir pencerenin başlangıcını belirledi; sayfaları üzerine yazılmış daha eski silmeler kurtarılamadı ve mesajların yokluğu olarak değil, bir boşluk olarak raporlandı.

    Android için WhatsApp mesajları (msgstore.db)Zaman damgası çözücüYerel saatten UTC'ye

06Bulgular

  • Sağlam

    Kişiyle alışverişi yapılan silinmiş mesajlar, metin, yön ve UTC zaman damgalarıyla sınırlı bir dönem için kurtarıldı.

    DayanakKurtarılan satırlar canlı tablo şemasıyla eşleşir ve sayfa/ofset referansları taşır; zaman damgaları çevredeki canlı satırlarla tutarlıdır.

  • Sağlam

    Dizideki bazı önceki mesajlar, veri tabanı sayfaları yeniden kullanıldığı için kurtarılamadı.

    DayanakBoş liste ve WAL artık o sayfaların önceki içeriğini tutmuyordu.

  • Olası

    Dizi, zaman içinde mesaj mesaj değil, bir blok olarak silindi.

    DayanakKurtarılan satırlar, yakın boşaltma zamanlarıyla küçük bir boş sayfa kümesinde yoğunlaşır; bu, dağınık silmelerden çok tek bir toplu silmeye daha iyi uyar.

07Sınırlılıklar

  • Kurtarma doğası gereği kısmidir; bir mesajın kurtarılamaması, hiç var olmadığının kanıtı değildir.
  • Fiziksel imaj olmadan, veri tabanı dosyası dışındaki ayrılmamış flash alanındaki veri incelenemedi.
  • Kurtarılan metin cihazdaki hesaba atfedilir; tek başına telefonu kimin tuttuğunu kanıtlamaz.
  • Bir mesajın yerel zaman damgası, yanlış olabilen ya da değiştirilebilen cihaz saatini yansıtır.

08Rapor alıntısı

Normal bir sorguda görünmeyen kırk bir mesaj, msgstore.db'nin boşaltılmış sayfalarından ve WAL çerçevelerinden kurtarıldı; her biri sayfa ve ofsetiyle etiketli. 2026-… ile 2026-… arasını kapsıyorlar. Bu dizide o tarihten önceki mesajlar kurtarılamadı: sayfaları yeniden kullanılmıştı, bu yüzden yokluk değil, boşluk bildiriyoruz.

09Çıkarımlar

  • -wal ve -shm dosyalarını her zaman veri tabanıyla birlikte koruyun; onlar olmadan görünüm eskidir.
  • Kurtarmanın tekrarlanıp denetlenebilmesi için her kurtarılan satırı sayfa ve ofsetiyle etiketleyin.
  • Kurtarılamamayı, nedeniyle birlikte bir boşluk olarak bildirin; asla bir mesajın var olmadığının kanıtı olarak değil.

10Kaynaklar

  1. SQLite — Write-Ahead Logging
  2. SQLite — Database File Format