VP-02 · Eğitmen notları

Android mesajlaşma veri tabanı ve WAL'ı: tartışmalı bir alım mesajı

Paketi bir grupla yürütmek için gereken her şey: 120 dakikalık bir plan, her sorunun cevabı ile nerede bulunduğu ve olağan hata, cevapların kurduğu kronoloji, puanlama ve kapanışta vurgulanacak noktalar.

Bu sayfa cevapları içerir. Katılımcılar önce paket sayfasından çalışmalıdır.

01Oturum planı

DakikaBölümNe yapılır
0–10Brifing ve kurallarSenaryoyu yüksek sesle okuyun. Cevapların çoğunu belirleyen kuralları söyleyin: yalnızca kopyalar, önce doğrulama, her zaman esasını okuma, dosyalar davranışı değil saklamayı gösterir.
10–30Bütünlük ve ana dosya (Q1–Q4)Hash kontrolü, ardından başlık baytları: günlük kipi ve sayfa boyutu. Q4, çıkarım günlüğündeki karışık zaman esaslarını çalıştırır.
30–65WAL yapısı (Q5–Q9)Elle ya da kısa bir betikle çalışın. Üç bölgeyi belirleyin: işlenmiş çerçeveler, geçerli ama işlenmemiş çerçeveler, önceki kuşaktan eski çerçeveler. Ardından sayfa 5 sorusu.
65–85İçerik: ana dosya ve işlenmiş durum (Q10–Q12)Ana dosyanın tek başına ve çiftin birlikte kopyaları. Dört satırlık fark paketin amacıdır.
85–110Kaydın neyi gösterip neyi gösteremediği (Q13–Q15)Alım mesajı, düzenleme ve işlenmemiş çerçeveler için raporun taşıyacağı cümleleri yazın. Seçenekleri çiftler hâlinde karşılaştırın.
110–120DeğerlendirmeDeğerlendirme sorularını yürütün. Her katılımcıdan imzalamayacağı bir cümle isteyin.

Malzemeler: her katılımcının bilgisayarında paket dosyaları, paket sayfasından yazdırılmış bir çalışma kağıdı ve bir inceleme günlüğü formu. Paket sayfası →

02Cevap anahtarı

  1. S011 puan

    chatstore.db-wal dosyasının SHA-256 değerini hesaplayın ve manifest.txt ile karşılaştırın. Hesapladığınız değerin ilk sekiz onaltılık karakterini girin.

    Cevapf54a0199

    Değer f54a0199 ile başlar ve bildirimle eşleşir. Rakamlardan çok alışkanlık önemlidir: WAL, açılmakla en kolay değişen dosyadır; bu yüzden hash'i, çifte herhangi bir araç dokunmadan önce kaydedilir.

    Nerede
    manifest.txt, chatstore.db-wal satırı; hash aracıyla ya da sha256sum ile yeniden hesaplayın.
    Olağan hata
    WAL'ı, çifti bir veri tabanı aracında açtıktan sonra hash'lemek; araç onu zaten yeniden yazmış ya da silmiş olabilir.

    Hash hesaplayıcıF-04 İnceleme günlüğüSOP-02 Delil kabul ve kayıt

  2. S021 puan

    chatstore.db dosyasının 18. ve 19. ofsetlerindeki baytlar (dosya biçimi yazma ve okuma sürümü) ikisi de 02. Bu ne söyler?

    CevapB — Veri tabanı WAL kipindedir: işlenmiş değişiklikler henüz ana dosyada değil, -wal dosyasında olabilir.

    1 değeri geri alma günlüğünü, 2 değeri WAL'ı gösterir. WAL kipinde ana dosya yalnızca WAL denetim noktasına alındığında (checkpoint) değişir; bu yüzden ana dosya tek başına işlenmiş durumdan eski olabilir.

    Nerede
    chatstore.db, 0x12 ve 0x13 numaralı baytlar (hex görünümü). Kaynak: https://www.sqlite.org/fileformat2.html (veri tabanı başlığı, 18 ve 19 numaralı ofsetler).
    Olağan hata
    Bir WAL olup olmadığını sormadan ana dosyayı veri tabanının tamamı saymak.

    Hex görüntüleyici ve veri denetçisiSOP-05 Mobil cihaz edinimi

  3. S031 puan

    Veri tabanı sayfa boyutu kaç bayttır? Ana dosyanın 16. ve 17. ofsetlerinde saklanır.

    Cevap4096

    İki bayt 10 00'dır; big-endian 0x1000 = 4096. Ana dosyadaki her sayfa ve WAL'daki her çerçeve gövdesi bu boyuttadır; sonraki tüm ofsetlerin birimi budur.

    Nerede
    chatstore.db, 0x10 ve 0x11 numaralı baytlar; dosya uzunluğu 32768'in bu değere bölümü sekiz sayfa verir.
    Olağan hata
    İki baytı little-endian okumak (0x0010 = 16).

    Hex görüntüleyici ve veri denetçisi

  4. S041 puan

    Çıkarım ne zaman yapıldı? Çıkarım satırındaki zamanı UTC olarak verin.

    Cevap2026-03-09 05:20:11 UTC

    Çıkarım satırı inceleme istasyonunun yerel saatini taşır: UTC+03:00'da 08:20:11, yani 05:20:11 UTC. Altındaki listedeki dosya zamanları zaten UTC'dir. Aynı günlük iki zaman esası kullanır.

    Nerede
    acquisition-log.txt, Extraction satırı; etiket yerel saati ve farkı belirtir.
    Olağan hata
    08:20:11'i UTC saymak ya da zaten UTC olan dosya zamanlarından fark çıkarmak.

    Yerel saatten UTC'yeSOP-08 İnceleme notları ve çalışma kaydı

  5. S051 puan

    chatstore.db-wal dosyası fiziksel olarak kaç tam çerçeve içerir? Bir WAL'ın 32 baytlık bir başlığı vardır; her çerçeve, 24 baytlık bir çerçeve başlığı ve ardından bir sayfadır.

    Cevap55

    (226632 − 32) ÷ (24 + 4096) = 55 çerçeve, sonda yarım çerçeve yok. Dosya boyutu bunların kaçının hâlâ geçerli olduğunu söylemez; bunu sonraki üç soru ayırır.

    Nerede
    Dosya boyutu acquisition-log.txt'den ya da dosya sisteminden; 4120 baytlık çerçeve boyutu Q3'teki sayfa boyutundan.
    Olağan hata
    Dosya boyutunu 4096'ya bölüp başlıkları yok saymak.

    SOP-05 Mobil cihaz edinimi

  6. S062 puan

    Dosyanın başından sayıldığında kaç çerçeve geçerli WAL kuşağına aittir? Bunlar, iki tuz (salt) değeri WAL başlığındaki tuz değerlerine eşit olan ve sağlama toplamları başlıktan zincirlenen çerçevelerdir.

    Cevap22

    1–22 numaralı çerçeveler başlığın tuzlarını ve geçerli bir sağlama zinciri taşır. 23. çerçeveden itibaren tuzlar farklıdır: bu 33 çerçeve önceki bir WAL kuşağında yazılmış ve üzerine yazılmamıştır. Okuyucu eşleşmeyen ilk çerçevede durur.

    Nerede
    chatstore.db-wal: 16–23 numaralı başlık ofsetleri tuzları tutar; her çerçeve başlığı bunları çerçeve başlığının 8–15 numaralı ofsetlerinde tekrarlar.
    Olağan hata
    55 çerçevenin hepsini saymak ya da tuza göre değil sayfa numarasına göre saymak.

    SOP-05 Mobil cihaz edinimi

  7. S072 puan

    Geçerli kuşağın son işleme (commit) çerçevesinin numarası nedir? İşleme çerçevesi, çerçeve başlığındaki 'işlem sonrası veri tabanı boyutu (sayfa)' alanı (çerçeve başlığı ofseti 4) sıfır olmayan çerçevedir.

    Cevap16

    İşleme çerçeveleri 3, 6, 9, 10, 11, 12, 15 ve 16'dır; her biri 8 sayfalık bir veri tabanı boyutu kaydeder. Sonuncusu 16. çerçevedir. Veri tabanının işlenmiş durumu, ana dosya ile WAL'ın 16. çerçeve dâhil olmak üzere okunmasıdır.

    Nerede
    chatstore.db-wal, her çerçeve başlığının 4. ofsetindeki 4 bayt (n numaralı çerçeve 32 + (n − 1) × 4120 ofsetinde başlar). Kaynak: https://www.sqlite.org/walformat.html (çerçeve başlığı, geçerlilik kuralı).
    Olağan hata
    Geçerli tuzları taşıyan son çerçeveyi, 22'yi, işlenmiş kısmın sonu saymak.

    SOP-05 Mobil cihaz edinimi

  8. S082 puan

    Geçerli kuşağın kaç çerçevesi son işleme çerçevesinden sonra yer alır? Doğru tuzları ve sağlama toplamlarını taşırlar ama işleme yoktur.

    Cevap6

    17–22 numaralı çerçeveler, işleme çerçevesi dosyaya hiç ulaşmayan bir işlemin geçerli çerçeveleridir. Veri tabanı durumunun parçası değildir. 17. çerçeve 1. sayfayı, 18–20 sayfa 5–7'yi, 21 sayfa 9'u, 22 sayfa 10'u tutar.

    Nerede
    chatstore.db-wal, 17–22 numaralı çerçeveler: tuzlar başlıkla eşleşir, 4. ofsetteki alan sıfırdır.
    Olağan hata
    33 eski çerçeveyi de saymak ya da 'işlemeden sonrası sayılmaz' diyerek hiç saymamak.

    SOP-05 Mobil cihaz edinimi

  9. S092 puan

    message tablosunun kökü 5. sayfadadır (ana dosyanın 1. sayfasındaki sqlite_schema'ya bakın). WAL'ın işlenmiş çerçeveleri arasında (1. çerçeveden son işleme çerçevesine kadar) 5. sayfa kaç çerçevede görünür?

    Cevap8

    5. sayfa 1, 4, 7, 10, 11, 12, 13 ve 16 numaralı çerçevelerde görünür. Okuyucuya 5. sayfayı yalnızca bunların en yenisi, 16. çerçeve, sağlar; diğer yedisi aynı sayfanın, dosya denetim noktasına hiç alınmadığı için tutulan önceki işlenmiş sürümleridir.

    Nerede
    chatstore.db-wal, her çerçeve başlığının ilk 4 baytı sayfa numarasını verir; chatstore.db 1. sayfa kök sayfaları gösterir.
    Olağan hata
    Sayfa 5'in sonraki, işlenmemiş sürümünü tutan 18. çerçeveyi saymak ya da yalnızca en yeni çerçeveyi saymak.

    SOP-05 Mobil cihaz edinimi

  10. S101 puan

    Yalnızca ana dosyada message tablosunda kaç satır vardır? chatstore.db'yi WAL olmadan boş bir klasöre kopyalayın ve satırları sayın.

    Cevap46

    46 satır, 1–46 numaralı mesajlar; sonuncusu 6 Mart'ta 06:52:30 UTC'de gönderildi. Ana dosya veri tabanını son denetim noktasındaki (günlükte dosyanın değişiklik zamanı 06:58:12 UTC) haliyle gösterir; işlenmiş durumuyla değil.

    Nerede
    Yalnızca chatstore.db: SELECT COUNT(*) FROM message;
    Olağan hata
    İki dosyayı birlikte açıp 50 saymak; bu bir sonraki sorunun cevabıdır.

    Android için WhatsApp mesajları (msgstore.db)SOP-05 Mobil cihaz edinimi

  11. S112 puan

    İşlenmiş durumda message tablosunda kaç satır vardır? İki dosyayı birlikte başka bir boş klasöre kopyalayın ve satırları sayın.

    Cevap50

    50 satır. 47–50 numaralı mesajlar yalnızca işlenmiş WAL çerçevelerinde bulunur. Yalnızca 16. çerçeveden sonraki çerçevelerde görünen stok listesi mesajları işlenmiş durumun satırı değildir: motor bunları yok sayar.

    Nerede
    chatstore.db ve chatstore.db-wal birlikte: SELECT COUNT(*) FROM message;
    Olağan hata
    Ham çerçeveleri okuyarak satır saymak (işlenmemişleri de içerir) ya da ana dosyadaki 46'da kalmak.

    Android için WhatsApp mesajları (msgstore.db)SOP-05 Mobil cihaz edinimi

  12. S122 puan

    Alım mesajı message tablosunun 49. satırıdır (1 numaralı sohbet, bu telefondan gönderilmiş). Veri tabanı bunun ne zaman gönderildiğini söylüyor? sent_ms değerini UTC'ye çevirin.

    Cevap2026-03-06 07:12:44 UTC

    sent_ms 1772781164000'dir, Unix epoch milisaniye: 2026-03-06 07:12:44 UTC; UTC+03:00'da yerel saat 10:12:44. Satır yalnızca işlenmiş WAL çerçevelerinde bulunur: ana dosya tek başına onu içermez.

    Nerede
    İşlenmiş durum, SELECT sent_ms FROM message WHERE _id = 49;
    Olağan hata
    Değeri yanlış bölmek, saniye saymak ya da yerel saati farkı olmadan vermek.

    Android için WhatsApp mesajları (msgstore.db)Zaman damgası çözücü

  13. S132 puan

    Şoför, yerel saatle 10:00'dan önce bir alım saati almadığını söylüyor. 06:26:48 UTC'de gönderilen 43 numaralı mesaj 'Friday: pickup at Dock 4 later today. Time follows.' diyor. Rapor, işlenmiş durumdan hangi ifadeyi destekleyebilir?

    CevapB — Uygulama, 16:00'yı belirten ilk mesajı bu telefonun saatine göre yerel saatle 10:12:44'te (07:12:44 UTC) gönderilmiş olarak sakladı; dosya şoförün bunu ne zaman gördüğünü göstermez.

    43 numaralı mesaj saatin sonra geleceğini söylüyor; 16:00'yı belirten daha önceki bir satır yok. c seçeneği gönderme zamanını alma zamanına çevirir, d seçeneği dosyaların göstermediği bir silme uydurur, a seçeneği satırla çelişir. b bile sınırlıdır: bu uygulamanın bu telefonun saatiyle neyi sakladığını anlatır.

    Nerede
    İşlenmiş durum, message tablosunun 43 ve 49 numaralı satırları (body, sent_ms).
    Olağan hata
    'Gönderildi'yi 'alındı' diye okumak ya da veri boşluğunu silme hikâyesiyle doldurmak.

    Android için WhatsApp mesajları (msgstore.db)SOP-09 Raporlama ve akran incelemesi

  14. S142 puan

    49 numaralı mesaj 'Pickup is 16:00 at Dock 4. Please confirm.' diyor ve edited_ms değeri 2026-03-06 07:14:20 UTC. WAL'da yapılan bir metin araması 7 ve 10 numaralı çerçevelerde 'Pickup moved to 16:00 at Dock 4. Please confirm.' ifadesini de buluyor. Rapor hangi ifadeyi destekleyebilir?

    CevapB — Dosya sayfanın iki işlenmiş sürümünü tutuyor: ilk ifade eski çerçevelerde, güncel ifade 16. çerçevede. edited_ms ile birlikte bu, uygulamanın kaydettiği bir düzenlemeyle uyumludur; dosyalar bunu kimin yaptığını, nedenini ya da şoförün ne gördüğünü göstermez.

    7 ve 10 numaralı çerçeveler, WAL hiç denetim noktasına alınmadığı için eski bir sayfa sürümünün geride bıraktığı geçerli, işlenmiş çerçevelerdir. Bunlar önceki durumlardır; silinmiş ya da kurtarılmış veri değildir ve yalnızca WAL onları tuttuğu sürece vardır: aynı telefonun başka bir toplaması bunları içermeyebilir. İfade yalnızca 'moved to' yerine 'is' olarak değişir; niyet dosyalarda yoktur.

    Nerede
    chatstore.db-wal 7, 10 ve 16 numaralı çerçeveler (sayfa 5); işlenmiş durum, 49 numaralı satır (body, edited_ms).
    Olağan hata
    Eski çerçevelere 'silinmiş veri' demek ya da bir düzenlemeye amaç yüklemek.

    F-04 İnceleme günlüğüSOP-09 Raporlama ve akran incelemesi

  15. S152 puan

    chatstore.db-wal üzerinde yapılan bir metin araması 18 ve 21 numaralı çerçevelerde 'Stock list part 1' ifadesini buluyor; ancak işlenmiş durumun sorgusu bunu döndürmüyor. 21. çerçeve ayrıca 49 numaralı satırı revoked sütunu 1 olarak gösteriyor; işlenmiş durumda revoked = 0. Rapor bunu nasıl ele almalı?

    CevapB — 17–22 numaralı çerçevelerin işlenmemiş bir işleme ait olduğunu ve veri tabanı durumunun parçası olmadığını belirtmek; bunları saklanmış mesaj ya da geri alma olarak saymadan tanımlamak ve işlemin neden tamamlanmadığını dosyaların göstermediğini not etmek.

    Son işleme çerçevesinden sonraki çerçeveler bitmemiş bir işlemin sonudur. Okuyucu bunları uygulamaz; veri tabanı bu satırları ya da bu bayrağı hiç tutmadı. Bunları dışarıda bırakmak (c) incelemecinin ihtiyaç duyduğu bir olguyu gizler; saymak (a) ya da açıklamak (d) dosyaların ötesine geçer. Neyin var olduğunu, hangi durumda olduğunu ve dosyaların neyi söyleyemediğini yazın.

    Nerede
    chatstore.db-wal 17–22 numaralı çerçeveler (16. çerçeveden sonra işleme işareti yok); 21. çerçeve 9. sayfadır.
    Olağan hata
    Bir hex düzenleyici gösteriyor diye işlenmemiş bir çerçevedeki ham sayfayı veri tabanı içeriği saymak.

    F-04 İnceleme günlüğüSOP-09 Raporlama ve akran incelemesiSOP-05 Mobil cihaz edinimi

03Kurulan kronoloji

Doğru cevapların kurduğu haliyle 14 Mart 2026 Cumartesi. Yerel saat UTC+3'tür.

UTCYerelOlayKaynak
06:26:4809:26:48Bu telefondan gönderilen 43 numaralı mesaj: 'Friday: pickup at Dock 4 later today. Time follows.'chatstore.db
06:58:1209:58:12Ana dosyanın son değişiklik zamanı (dosya sistemi): ana dosyaya son denetim noktasıacquisition-log.txt
07:12:4410:12:4449 numaralı mesaj gönderildi olarak saklandı: ilk ifade 'Pickup moved to 16:00 at Dock 4. Please confirm.' (işlenmiş çerçeve)chatstore.db-wal
07:12:4610:12:4649 numaralı mesajın received_ms değeri (sent_ms'den iki saniye sonra)chatstore.db-wal
07:14:2010:14:2049 numaralı mesajın edited_ms değeri: güncel ifade 'Pickup is 16:00 at Dock 4. Please confirm.'chatstore.db-wal
07:21:0510:21:0550 numaralı mesaj, alınan: 'Confirmed. I will be there at 15:50.'chatstore.db-wal
07:46:3110:46:31WAL dosyasının son değişiklik zamanı (dosya sistemi): chatstore.db-wal dosyasına son yazmaacquisition-log.txt

04Puanlama

1–11. sorular birer puan, 12. soru üç puan değerindedir: toplam 24 puan. Bulgu paragrafı puanla değerlendirilmez; aşağıdaki dört ölçüte göre işaretleyin ve değerlendirmede tartışın.

PuanSonraki adım
20–24Sağlam. Gerçek bir raporun gözetimli incelemesine geçin ya da yapmadıysanız VP-01'e geçin.
13–19Kaçırılan her soruyu açıklaması ve bağlantılı kütüphane kaydıyla gözden geçirin, ardından WAL sorularını Q6–Q9 baytlardan yeniden cevaplayın.
0–12Önce mobil ve zaman modüllerini çalışın, sonra paketi baştan tekrarlayın.

Bulgu paragrafı: ölçütler

  • ☐ Rapor ana dosyayı, işlenmiş durumu ve son işleme çerçevesinden sonraki çerçeveleri ayırır.
  • ☐ Her zaman kendi esasını taşır: Unix epoch milisaniye, UTC ya da farkıyla yerel saat.
  • ☐ İfade, bir kişinin ne yaptığını, amaçladığını ya da gördüğünü değil, uygulamanın neyi sakladığını anlatır.
  • ☐ Dosyaların yalnızca eskimiş ya da işlenmemiş olarak gösterdiği hiçbir şeye 'silinmiş' ya da 'kurtarılmış' denmez.

05Değerlendirme

  1. Hash'lemeden hiçbir şey açmayın. WAL çifti, bakılarak değişen bir delil türüdür: onu açan bir motor denetim noktası alıp WAL'ı silebilir ve önemli olan kısım gider.
  2. Üç bölge, üç cümle. İşlenmiş durum: veri tabanının tuttuğu. Son işlemeden sonraki çerçeveler: sayılmadan tanımlanan bitmemiş bir işlem. Önceki kuşağın eski çerçeveleri: artık, bu veri tabanı durumunun parçası değil.
  3. Eskimiş bir çerçeve, bir sayfanın önceki işlenmiş durumudur. Silinmiş veri değildir, kurtarılmış veri değildir ve yalnızca WAL denetim noktasına hiç alınmadığı için vardır. Bunu söyleyin ve başka bir toplamanın farklı olabileceğini de söyleyin.
  4. sent_ms, bu uygulamanın bu telefonun saatiyle sakladığı değerdir. Alma zamanı değildir, sunucu zamanı değildir ve şoförün telefonu hakkında bir ifade değildir. Ne received_ms ne edited_ms kimin ne yaptığını ya da nedenini söyler.
  5. Kopya, -shm dosyası olmadan yapılmış bir dosya sistemi çıkarımıydı. Bu olağandır: paylaşılan bellek dizini motor tarafından yeniden kurulur ve tek başına delil değildir. Yokluğunu açıklayıp geçmek yerine inceleme günlüğüne kaydedin.

06Örnek bulgu

chatstore.db ve chatstore.db-wal çifti (SHA-256 incelemeden önce kaydedildi) kopyalar üzerinde incelendi. Ana dosya WAL kipindedir, 4096 baytlık sayfalara sahiptir ve en son 6 Mart 2026'da 06:52:30 UTC'de gönderilen 46 mesaj içerir. WAL 55 tam çerçeve tutar: 1–16 numaralı çerçeveler işlenmiştir (son işleme çerçevesi 16, veri tabanı boyutu 8 sayfa), 17–22 numaralı çerçeveler işleme çerçevesi olmayan bir işlemin geçerli çerçeveleridir ve veri tabanı durumunun parçası değildir, 23–55 numaralı çerçeveler önceki bir WAL kuşağının tuz değerlerini taşır. İşlenmiş durum 50 mesaj içerir. Bu telefondan gönderilen 49 numaralı mesaj, o telefonun saatine göre sent_ms 07:12:44 UTC (yerel saat 10:12:44, günlükte belirtildiği gibi UTC+03:00) ile saklanmıştır; aynı sohbette alıma değinen önceki mesaj, yerel saat 09:26:48'deki 43 numaralı mesaj, saatin sonra geleceğini belirtir. 49 numaralı mesajın bir düzenlemesi 07:14:20 UTC'de kayıtlıdır. Dosyalar, şoförün telefonunun mesajı ne zaman aldığını ya da gösterdiğini, onu kimin düzenlediğini ya da sonraki işlemin neden tamamlanmadığını göstermez. Güven: yapı ve saklanan değerler için yüksek; davranış hakkında hiçbir sonuç çıkarılmaz.

Rapor anatomisi ve güven ölçeği →