Aventuren an WhatsApp DB - Messagen aus Backups extrahéieren (mat Code Beispiller)

Kritt Är Messagen ouni eng Drëtt Partei Är Umeldungsinformatiounen an Daten ze ginn

Dëse Post wäert erkläre wéi Messagen aus WhatsApp mat Python erholen. Besonnesch wäert ech erkläre wéi ech gaange sinn d'Gespréicher aus der WhatsApps SQLite-Datebank ze fannen an ze extrahéieren an d'Felder an d'Donnéeën do ze analyséieren. Dëst ass op kee Fall eng ëmfaassend Reverse-Engineering / Forensesch Analysaarbecht - deen eenzege Grond firwat ech dëst souguer publizéieren ass datt ech net fräi verfügbar Informatioun an / oder Open Source Tools fannt, déi Dir fir dësen Zweck traut, also hunn ech geduecht Ech hunn d'Aarbecht deelen, wat ech gemaach hunn fir anerer ze retten. Dir kënnt wahrscheinlech e ganz ähnleche Prozess benotze fir aner (Messagerie) Apps ze analyséieren.

TOC

  1. Schrëtt 1 - Backup an extrahéieren Dateien vun Ärem iPhone
  2. Schrëtt 2 - Verbindung mat der DB a liest d'Message Tabelle
  3. Schrëtt 3 - Extrait vu spezifesche Gespréicher
  4. Schlussend Wierder an eng Notiz op Medien

Ech benotze Jupyter Notizbicher a Pandas uechter dësen Artikel well et d'Liewe einfach mécht an visuell "léif" ass awer zimmlech all Code kann onofhängeg vu Jupyter benotzt ginn. D'Notizblock ass verfügbar hei op github.

Hannergrond (fillt sech gratis dëse Paragrap ze iwwersprangen)

Wéinst e puer gesetzleche Probleemer mat engem Wunnengsentwéckler (sinn do éierlech Entwéckler dobaussen?) Hunn ech endlech WhatsApp Messagen aus engem alen iPhone Apparat ze recuperéieren, dat zwee Joer an engem Schaf souz.

Ech sinn keen iPhone Benotzer normalerweis sou datt ech no Weeër gesicht hunn fir dëst ze maachen an ech entdeckt iCloud gëtt Iech net Zougang zum eigentleche Backupinhalt ausser wat Apple entscheet Dir braucht (op d'mannst net wann Dir an Ärem Online Kont surft) An. Wann Dir wëllt, ginn et Tools déi Är Login Umeldungsinformatiounen huelen an Iech erlaben de komplette Backup Inhalt ze duerchsichen, awer ech ginn net an onbekannte Tools meng (Fra's) Login Umeldungsinformatiounen. Also sinn ech viru gaang a hunn erausfonnt wéi ech dëst maache kënnen ouni d'Sécherheet vun deem Kont ze kompromittéieren deen zum Prozess hei ënnendrënner beschriwwen huet.

Als eng interessant Säit Notiz fir dësen Artikel hunn ech déi genannte iPhone Batterie erëmkritt, start et an entdeckt datt WhatsApp net funktionnéiert wéinst engem komeschen Message. Ären Telefonsdatum ass net korrekt! Ajustéiert Är Auer a probéiert et nach eng Kéier. Ech hu keng Ahnung wat hunn Date-Ausgaben ze dinn ouni WhatsApp unzefänken awer den Datum an d'Zäit fixéieren huet net gehollef a liesen iwwer dës meescht Léisungen schéngen uninstall-reinstall ze proposéieren wat ok allgemeng ass awer net eppes wat ech wollt riskéieren wann ech dës Messagen fir Beweiser viru Geriicht gebraucht hunn.

Schrëtt 1 - Backup an extrahéieren Dateien vun Ärem iPhone

Dëse Schrëtt ass méi Mac OS spezifesch, och wann et ähnlech an anere OS soll funktionnéieren. D'Iddi ass einfach:

  1. Erstellt eng virtuell Maschinn an installéiert iTunes derbäi. Gitt sécher datt de VM net mam Internet ugeschloss ass. (Wann Dir keng Ahnung hutt wéi Dir e VM erstellt, kënnt Dir dësen Artikel probéieren).
  2. Connect Ären iPhone mam VM. Follegt déi üblech Schrëtt fir de Backup vum iPhone lokal am VM. Fir déi interesséiert op Mac kënnt Dir d'Backups fannen op: ~ / Bibliothéik / Applikatioun Support / MobileSync / Backup De Backup Format gëtt hei beschriwwen
  3. Installéiert en iPhone Backup Extraktiounstool (wéi iExplorer by macroplant) am VM. Et ass egal wéi en Tool well et keen Internetzougang huet an dofir sinn Är Donnéeën sécher.
  4. Endlech benotzt de Backup Extraktiounstool fir ChatStorage.sqlite ze extrahieren dat ass d'Haapt WhatsApp Gespréichs Datebank. Fir dohinner ze kommen, musst Dir op "App Group" surfen → "group.net.whatsapp.WhatsApp.shared"
  5. Als Bonus kënnt Dir d'Medien och extrahieren andeems Dir den Dossier extrahieren: "App" → "net.whatsapp.WhatsApp" → "Bibliothéik" → "Media"
Notéiert

Schrëtt 2 - Verbindung mat der DB a liest d'Message Tabelle

WhatsApp schéngt all Gespréicher an engem Sqlite DB ze späicheren wat eist Liewen zimlech einfach mécht. Als éischte Schrëtt loosst eis probéieren d'SQLlite3 gebaut Python Bibliothéik + Pandas ze benotzen fir ze kucken ob mir mat der DB konnektéiere kënnen an d'Lëscht vun den Dëscher kréien:

Wéi Dir kënnt gesinn, sinn et 18 Dëscher. Duerch den Inhalt ze graven hunn ech fonnt datt deen Interessant (also dee mat Äre Messagen) ZWAMESSAGE schéngt. Loosst eis et opmaachen:

Erfolleg!

Et gëtt am Ganzen 34 Kolonnen déi mir kënne gesinn:

ZWMESSAGE Tabellenkolonn

Mol kucken wat mir hunn. Hei ënnen ass meng Analyse baséiert op den Daten, déi ech an den Dëscher a mengem eegenen DB fonnt hunn a meng Virstellungen doriwwer:

1. Z_PK - schéngt wéi eng Seriennummer 2. Z_ENT zu ZFILTEREDRECIPIENTCOUNT - schéngt manner wichteg 3. ZFLAGS - schéngt de Messagestatat ze weisen 4. ZGROUPEVENTTYPE - schéngt am Zesummenhang mat Gruppechats 5. ZISFROMME - Message ass vu mir… et ass 1 fir Messagen, déi vun dësem User geschéckt ginn an 0 fir Messagen, déi 6. kréien ZMESSAGEERRORSTATUS op ZSPOTLIGHTSTATUS - schéngt wéi allgemeng Statusen 7. ZSTARRED - hu mir de Message gestiermt 8. ZCHATSESSION - eenzegaartegen Identifizéierer deen e Chat Sessioun 9 weist. ZGROUPMEMBER - huet net gekuckt fir ze kucken op dëser nach 10. ZLASTSESSION - lescht Chat Sessioun? hu sech net an et verdaut 11. ZMEDIAITEM - schéngt mat Medien item Indexéierung ze sinn, ass vläicht en Identifizéierer fir eng vun deenen aneren Dëscher. 12. ZMESSAGEINFO an ZPARENTMESSAGE - schéngen einfach genuch aus den Nimm ze rechnen 13. ZMESSAGEDATE - Erstellungsdatum vum Message (kuckt den Datumformat Diskussioun hei drënner) 14. ZSENTDATE - Message verschéckt Datum méiglecherweis (kuckt d'Datumformat Diskussioun hei drënner) 15. ZFROMJID - vu wien hu mir et kritt (wann et en ukommende Message ass) 16. ZMEDIASECTIONID - schéngt a Medienlagerung ze hunn fir Mediemeldungen, weist net a Messagen ouni Medien 17. ZPHASH - hmmm ... net sécher 18. ZPUSHNAME - schéngt wéi de Kontakt Numm op Ärem Telefon 19. ZSTANZAID - e puer Gespréich / Medien ID Indikator. Format schéngt anescht a Mediemeldungen an SMSen 20. ZTEXT - Message Text 21. ZTOJID - un wiem hu mir en geschéckt (wann et en erauskommende Message ass)

Schrëtt 3 - Extrait vu spezifesche Gespréicher

Eist Basis Zil ass spezifesch Gespréicher oder Kommunikatiounen ze extrahieren. Also kënne mir e Kontakt mam Numm oder der Telefonsnummer sichen oder no engem spezifesche Gespréich duerch Messagen sichen, wa mir en Deel vum Text erënneren an eventuell de komplette Gespréich extrahéieren op Basis vum Gespréich ID.

Awer ier mir eppes dovunner maache solle mer erausfannen wéi d'Datume an d'Zäiten zu engem mënschlecht liesbarem Format kréien. Also intuitiv hunn ech ugeholl datt ZMESSAGEDATE en Unix-Zäit Zäitstempel ass. Also hunn ech en op en Datum konvertéiert an dat ass wat ech kritt hunn:

Huh ?! 1985?

Liesen ronderëm et schéngt datt Apple, an hirer onendlecher eenzeger Wäisheet decidéiert hunn Datumen ze benotzen ab dem 1.1.2001 um iPhone, also loosst eis kucken wat geschitt wann mir en Offset vun der Zäit 0 vun der Unix-Zäit bis den 1.1.2001 addéieren:

Dat schéngt de Problem geléist ze hunn. Ënnerwee hunn ech och en Dateindex an den Dateframe bäigebaut fir et méi bequem ze benotzen. Notiz datt wann Dir vun Android oder engem aneren OS importéiert, Dir braucht wahrscheinlech net dës Verréckelung vun Datumen ze benotzen.

Elo datt mir Datumen hunn léisst Gespréicher extrahieren. Als éischt loosst eis e Gespréich fannen deen eis besuergt, sou wéi duerch eng spezifesch Telefonsnummer ze sichen:

e Brochstéck vun der Telefonsnummer ass genuch

du solls bemierken datt d'Lamda, déi ech erstallt hunn, benotzt gëtt fir souwuel vun der wéi an op der Kolonn ze sichen. Eng interessant Säit Note ass datt et en enttäuschende Python "Wat" Moment hei gëtt well Falsch | Näischt! = Keen | Falsch déi just net Sënn mécht. Egal wéi weider, wann mer an der ZCHATSESSION Kolonn kucken, mierke mer datt a mengem Fall d 'Gespréichs ID "104.0" fir dës Nummer gëtt (wann et och Gruppechats sinn, kënnt Dir méi wéi eng Chat Sessiouns ID gesinn). Also den nächste Schrëtt wäert sinn fir all d'Messagen d'Chat Sessioun ze extrahieren. Fir dat ze maachen solle mer adäquat Accessoiren derfir an fir aner Sichmethoden déi ech uewen erwähnt hunn:

nëtzlech Accessoiren

Elo, fir alles zesummen ze summéieren, loosst eis all Messagen aus enger Chat-Sessioun kréien a weisen se (dat Multi-Line Format erlaabt fir all Text ze gesinn):

Elo gesi mer eng Chat-Session tëscht menger Fra an engem Spillschoul-Enseignant: P

Deel 4 - Schlusswierder an eng Notiz zur Extraktioun vu Medien

Mediendateien ginn am Ordner am Schrëtt 1 ernimmt gespäichert - sou gutt wéi ech kann soen datt d'Subfolders baséiert op der Telefonsnummer vum Kontakt deen e Datei gedeelt huet (an e Suffix dat Gruppechatschen bezeechent? - Dëst ass eng Rotschlag). D'Ënnerfolder ënner all Telefonsnummer schéngen eng ähnlech Logik dem iTunes Backupsatellit ze verfollegen an ech de Verdacht datt d'Message Tabelle e puer Referenzen op Links an der Medietafel hunn, awer ech hunn Zäit net verbraucht fir déi Detailer erauszefannen. Eng lescht Notiz puer Classeure enthalen och Daum Dateien déi tatsächlech just jpg Dateien sinn (se nennen an opmaachen normalerweis).

De Jupyter Notizblockcode fannt Dir hei op github

Ech hunn perséinlech Informatioune dovun ewechgeholl, awer de Code a Proben si genau d'selwecht. D'Notizblock kann och e puer Extra Detailer enthalen déi ech net gepost hunn hei abegraff.

Schlussendlech, wann Dir d'Gedold hutt a méi Detailer erausfonnt hutt oder Verbesserungen hutt fir de Code ze proposéieren schéckt eng Pull-Demande op github an ech si frou et mat relevante Krediter ze enthalen.

Gitt weg eng Bemierkung wann Dir dëst genoss hutt. Dir fannt mech @gal_diskin op Twitter oder @ Disk1n op github.