WhatsApp'ın yedekleme veritabanından mesajları ayıklayın

Bu yazıda, WhatsApp'tan Python kullanarak mesajları nasıl kurtaracağınızı göstereceğim. WhatsApp'ın sqlite veritabanından konuşmaları nasıl bulup çıkaracağımı ve oradaki alanları ve verileri nasıl ayrıştıracağımı açıklamaya odaklanacağım. Bu kesinlikle kapsamlı bir ters / adli analiz işi değildir - bu makaleyi yazmamın tek nedeni, bu amaçla güvenebileceğiniz ücretsiz bir bilgi ve / veya açık kaynak aracı bulamamış olmamdır. Bu yüzden, yaptığım şeyi paylaşabilirsem, başkalarına biraz zaman kazandıracağını düşünüyorum. Diğer (mesajlaşma) uygulamalarını analiz etmek için benzer bir işlem kullanabilirsiniz.

Bu yazıda Jupyter Not Defterlerini ve Pandaları kullanacağım, ancak hemen hemen tüm kod Jupyter'den bağımsız olarak kullanılabilir. WhatsApp sqlite DB'den (özellikle Jupyter not defteri için yazılmıştır) mesajları ayıklamak için kullanılan kod, github'dan alabilirsiniz.

arka fon

Emlak geliştiricileriyle ilgili bazı yasal sorunlar nedeniyle (dürüst geliştiriciler var mı?) WhatsApp bilgilerini iki yıldır dolapta olan eski bir iPhone cihazından kurtarmam gerekiyor.

Normal bir iPhone kullanıcısı değilim, bu yüzden bunu yapmanın bir yolunu düşünmeye başladım. İCloud'un gerçek yedekleme içeriğine erişim izni vermediğini öğrendim. Ancak, oturum açma kimlik bilgilerini elde etmenize yardımcı olabilecek ve tüm yedekleme içeriğine göz atmanıza olanak tanıyan bazı araçlar var, ancak (eşimin) oturum açma kimlik bilgilerini bu bilinmeyen araçlara ifşa etmek istemiyorum. Böylece hesap güvenliğinden ödün vermeden bunu nasıl yapacağımı araştırmaya başladım.

İPhone'u şarj edip açtıktan sonra WhatsApp'ın düzgün çalışmadığını fark ettim ve telefon tarihinizin yanlış olduğunu belirten garip bir mesaj belirdi! Saatinizi ayarlayın ve tekrar deneyin. Lütfen saatinizi ayarlayın ve tekrar deneyin. Tarih sorununun WhatsApp'ın başlatılmasıyla ne ilgisi olduğunu bilmiyorum, ancak tarih ve saati düzeltmek sorunu çözmedi.Kaldırmayı ve yeniden yüklemeyi öneren birçok çevrimiçi çözüm okudum. Ancak bu riski almak istemiyorum çünkü mahkemede kanıt olarak bu bilgiye ihtiyacım var.

Adım 1 - Dosyaları iPhone'dan yedekleyin ve sıkıştırın

Bu adım, diğer işletim sistemlerinde benzer şekilde çalışmasına rağmen, Mac OS için daha geçerlidir.

1. Bir sanal makine oluşturun ve üzerine iTunes'u kurun. VM'nin ağa bağlı olmadığından emin olun. (Bir sanal makinenin nasıl oluşturulacağını bilmiyorsanız, lütfen bu makaleye bakın).

2. iPhone'u VM'ye bağlayın. İPhone'u sanal makinede yerel olarak yedeklemek için olağan adımları izleyin. Mac ile ilgilenenler için yedekleme burada bulunabilir: ~ / Library / Application Support / MobileSync / Backup

Lütfen yedekleme biçiminin açıklaması için buraya bakın.

3. iPhone yedekleme çıkarma aracını (Macroplant'ın iExplorer gibi) sanal makineye kurun. İnternete erişemediği için hangi araç önemli değildir, bu nedenle verileriniz güvendedir.

4. Son olarak, ana whatsapp oturum veritabanı olan chattorage.sqlite'ı ayıklamak için yedekleme çıkarma aracını kullanın. Erişmek için "Uygulama Grubu" "group.net.whatsapp.WhatsApp.shared" adresine gitmeniz gerekir

5. Ek olarak, şu klasörü çıkararak da medyayı çıkarabilirsiniz: "Uygulama" "net.whatsapp.WhatsApp" "Kitaplık" "Medya"

Adım 2-Veritabanına bağlanın ve mesaj tablosunu okuyun

WhatsApp, tüm konuşmaları Sqlite DB'de saklıyor gibi görünüyor. İlk adım olarak, veritabanına bağlanıp bağlanamayacağımızı ve tablonun sütunlarını alıp alamayacağımızı görmek için yerleşik python kitaplığı + sqlite3 Pandas'ı kullanmayı deneyelim:

Gördüğünüz gibi 18 masa var. Dikkatimi çeken tablolardan birine daha yakından baktığımda (mesajınızın olduğu tablo) ZWAMESSAGE gibi görünüyor. Onu açalım:

Tabloda 34 sütun olduğunu görebilirsiniz:

Bakalım elimizde ne var. Aşağıda, veritabanımdaki tablolarda bulduğum verilere ve çıkarımlarıma dayalı analizim yer almaktadır:

1. Z_PK - seri numarası gibi görünüyor 2. Z_ENT - ZFILTEREDRECIPIENTCOUNT - daha az önemli görünüyor 3. ZFLAGS - mesaj durumunu gösteriyor gibi görünüyor 4. ZGROUPEVENTTYPE - grup sohbetleriyle ilgili görünüyor 5. ZISFROMME - mesaj benden bu kullanıcı tarafından gönderilen mesajlar için 1 ve alınan mesajlar için 06. ZMESSAGEERRORSTATUS'tan ZSPOTLIGHTSTATUS'a - genel durumlar gibi görünüyor 7. ZSTARRED - mesaja yıldız ekledik mi 8. ZCHATSESSION - bir sohbet oturumunu belirten benzersiz tanımlayıcı 9. ZGROUPMEMBER - buna henüz bakmadım 10. ZLASTSESSION - son sohbet oturumu derinlemesine incelemediniz mi? 11. ZMEDIAITEM - ortam öğesi indekslemeyle ilgili görünüyor, diğer tablolardan birinin tanımlayıcısı olabilir 12. ZMESSAGEINFO ve ZPARENTMESSAGE - isimlerden anlaşılabilecek kadar basit görünüyor 13. ZMESSAGEDATE - muhtemelen mesaj oluşturma tarihi (aşağıdaki tarih biçimi tartışmasına bakın) 14. ZSENTDATE - muhtemelen mesaj gönderme tarihi (aşağıdaki tarih biçimi açıklamasına bakın) 15. ZFROMJID - onu kimden aldık (eğer gelen bir mesajsa) 16. ZMEDIASECTIONID - medya mesajları için medya depolamayla ilgili görünüyor, medyasız mesajlarda gösterilmez 17. ZPHASH-hmmm ... emin değilim 18. ZPUSHNAME - telefonunuzdaki kişi adı gibi görünüyor 19. ZSTANZAID - bazı konuşma / medya kimliği göstergesi. Medya mesajlarında ve metin mesajlarında format farklı görünüyor 20. ZTEXT - mesaj metni 21. ZTOJID - onu kime gönderdik (eğer bu giden bir mesajsa)

3. Adım - Belirli konuşmaları ayıklayın

Temel hedefimiz belirli bir konuşma veya iletişimi ortaya çıkarmaktır. Bu nedenle, metnin bir kısmını hatırlarsak, bir kişiyi ada veya telefon numarasına göre arayabilir veya mesajla belirli bir sohbeti arayabilir ve son olarak konuşma kimliğine göre konuşmanın tamamını çıkarabiliriz.

Ancak bunu yapmadan önce, tarih ve saati insan tarafından okunabilir bir biçime nasıl dönüştüreceğimizi bulmalıyız. Sezgisel olarak, zmessagedate'in bir unix zaman damgası olduğunu varsayıyorum. Ben de bunu bir tarihe çevirdim ve elde ettiğim sonuç bu:

Apple, iPhone'da 1.1.2001'den başlayan tarihleri kullanmak için sonsuz ve benzersiz bilgeliğini kullanıyor gibi görünüyor, bu yüzden unix-time time0'ın ofsetini 1.1.2001'e eklersek ne olacağını görelim:

Bu sorunu çözüyor gibi görünüyor. Bu süreçte, kullanımını kolaylaştırmak için veri çerçevesine bir tarih dizini de ekledim. Android veya diğer işletim sistemlerinden içe aktarırsanız, bu tarih dönüşümünü kullanmanız gerekmeyebileceğini lütfen unutmayın.

Tarih orada ve şimdi konuşmayı çıkarmaya başlayabiliriz. Öncelikle, belirli bir sayı gibi önem verdiğimiz bir konuşmayı çıkaralım:

Oluşturduğum lambda'nın arama sütunları için kullanıldığını fark etmelisiniz. İşte hayal kırıklığı yaratan bir Python "Wat" anı, çünkü False | None! = None | False mantıksız. Her durumda, ZCHATSESSION sütununa bakmaya devam edin, örneğimde bu numaranın oturum kimliğinin "104.0" olacağını göreceğiz (grup sohbetleri varsa, birden fazla sohbet oturumu kimliği görebilirsiniz). Bu yüzden bir sonraki adım, sohbet oturumundaki tüm mesajları çıkarmak olacaktır. Bunun için, buna uygun erişimcileri ve yukarıda belirtilen diğer arama yöntemlerini ekleyelim:

Şimdi, sohbet oturumundaki tüm mesajları alalım ve gösterelim (tüm metni görüntülemek için çok satırlı biçimi etkinleştirin):

Bölüm 4 - Medya çıkarımı için son açıklamalar ve önlemler

Medya dosyaları, 1. adımda belirtilen klasörlerde depolanır ve alt klasörler, dosyayı paylaşan kişinin telefon numarasına (ve grup sohbeti için? -Bu bir tahmindir) dayanır. Her telefon numarasının altındaki alt klasörler iTunes yedekleme biçimine benzer bir mantığı izliyor gibi görünüyor.Mesaj tablosunun ortam tablosundaki bağlantıya başvurduğundan şüpheleniyorum, ancak gerçekten doğrulamak için zaman ayırmadım. Unutulmaması gereken son nokta, bazı klasörlerin aslında sadece JPG dosyaları olan bazı başparmak dosyalarını içereceğidir (normal olarak açılacak şekilde yeniden adlandırın).

Jupyter not defterinin kodu Github'da bulunabilir

Kişisel bilgileri ondan sildim, ancak kod ve örnek tamamen aynı. Ek olarak, dizüstü bilgisayar bazı ek bilgiler de içerebilir.

Son olarak, sabırlıysanız ve daha fazla bilgi edindiyseniz veya kodun iyileştirilmesi için herhangi bir öneriniz varsa, istediğiniz zaman github üzerinden bir çekme isteği gönderebilirsiniz! Okuduğunuz için teşekkürler!

* Referans kaynağı: FB editör sekisti tarafından derlenen araç, FreeBuf.COM'dan yeniden üretilmiştir

Şehitlerin İzinin İzinde Diz çöküp kendini devrime adamaktansa ölmeyi tercih eder Yenan, onun için anma töreni düzenledi
önceki
Li Chen ve Fan Bingbing'in üç "biz" i şimdi çok ironik görünüyor.
Sonraki
Song Zhongji, Liu Haoran, Fan Bingbing: Zhang Ruoyun'u utandırmak için bir grup mu düzenliyorsunuz?
"Şikayetiniz" çocuğunuzun duygusal yönetimini bozuyor ve çocuğunuzun hayatla olumlu bir şekilde yüzleşmesini engelliyor
Chongqing, ülkenin ilk 5G otonom sürüş kamu hizmeti platformunu kurdu etkisine bakın
Dönüşüm taktikleri: TA505'in son etkinliklerinde kullanılan HTML ve RAT gibi diğer teknolojileri ayrıştırın
Meixi Gölü 36: Jia Fan ve Cai Yao birbirlerinin sinirliliklerini bıraktılar ve Fang Shujian'a aşklarını verdiler
Çin-Rusya "Dostluk Köprüsü" etkinlikler dizisi ve "Gelecek için Hayal Kurmak" Uluslararası Sanat Festivali
Süper Lig'e Odaklanın Chongqing Sway yetkilisi Sui Weijie'nin fiziksel nedenlerden dolayı yedek takıma döndüğünü açıkladı. Gelecekte başlangıç kalecisi kim olacak?
Emziren iç çamaşırı ne kadar önemlidir? Giymekle giymemek arasındaki fark o kadar büyük ki inanma
Huang Zihongfan: Kendi çabalarıyla "Meixi Gölü'nde 35 ağır dayak" toplayan bir çocuk
Labirentler giyin, bloklar inşa edin, yerinde programlayın ve çocukların robot "savaşını" izleyin
"Kalbe Giden Ses" Li Xiangzhe: Huang Zihongfan'ı hedeflediğinizden ve elinizde kanıt olduğundan şüpheleniyorum
Basketball Morning Post: Lakers, Shen Rondo ve diğerlerini bile imzaladı, Westbrook yönetici ile takasları tartıştı
To Top