Innledning
Da jeg analyserte en testenhet med et populært kommersielt verktøy for mobil kriminalteknikk, kom jeg over noe spennende - et låst Apple-notat som bare fremsto som "skjult". Verktøyet viste sammendraget av notatet (merket "Lance"), men det faktiske innholdet manglet. Det var ingen anelse om hva som skjulte seg under låsen, og jeg satt igjen med et brennende spørsmål: Kunne jeg avdekke hemmeligheten på innsiden? Jeg trengte en arbeidsflyt som kunne hjelpe meg med å dekryptere Apple Notes på iOS 16.
Enheten kjørte iOS 16.7.10Etter å ha gravd i NoteStore.sqlite-databasen, innså jeg at alle krypteringssporene lå der - og ventet på å bli dekodet. Ved hjelp av åpen kildekode-verktøy satte jeg i gang med å gjenopprette passordet og dekryptere innholdet i notatet.
Dette innlegget tar deg gjennom komplett rettsmedisinsk arbeidsflyt om hvordan man dekryptere Apple Notes på iOS 16:
- 🔓 Hashcat for å knekke passord
- 🗄️ DB-nettleser for SQLite for å utforske og hente ut krypteringsparametere
- 🐍 Python-skript for nøkkelderivasjon og AES-nøkkelutpakking
- 🔍 CyberChef for å dekryptere, dekomprimere og analysere den endelige protobuf-nyttelasten
⚠️ Viktig merknad: Denne arbeidsflyten gjelder spesielt for Apple Notes som er låst på iOS 16.x. Fra og med iOS 17 endret Apple hvordan krypterte notater lagres - og iOS 18 innebærer enda flere endringer.
La oss dykke inn og avsløre den skjulte meldingen i den låste Apple Note.
Grave i NoteStore.sqlite

I skjermbildet kan du se de rå heksadesimale verdiene for ZDATA. Disse dataene er effektivt kryptert av AES-krypteringmed kritiske metadata - som salter og iterasjonstall - lagret i andre deler av databasen. Fra en rettsmedisiner Når du oppdager at notatet er fullstendig kryptert, er det et tegn til å gå dypere inn i ZICCLOUDSYNCINGOBJECT-tabellen for å finne parametrene som trengs for å sprekk passordet og låse opp notatet 🔓.
Hvorfor er låste Apple-notater kryptert på iOS 16?
Apple Notes sikrer låste notater ved hjelp av en kombinasjon av PBKDF2 (nøkkelderivasjon) og AES (kryptering). Når et passord er aktivert på et notat, lagrer Apple viktige kryptografiske metadata i databasen - for eksempel:
- ZCRYPTOITERATIONCOUNT
- ZCRYPTOSALT
- ZCRYPTOWRAPPEDKEY
Disse verdiene sikrer at bare en person med riktig passord kan dekryptere innholdet i notatet.
Rettsmedisinsk tilnærming
Fra et rettsmedisinsk ståsted inkluderer trinnene vanligvis
- Identifisere de relevante låste notatoppføringene i ZICNOTEDATA og ZICCLOUDSYNCINGOBJECT.
- Utdrag de kryptografiske detaljene - som antall iterasjoner, salt og den innkapslede nøkkelen.
- Sprekk brukerens passord med Hashcat (eller et annet passordgjenopprettingsverktøy som John the Ripper eller Passware).
- Utlede de siste tastene i Python eller CyberChef og dekryptere notatets BLOB.
- Dekomprimere de ulåste protobuf-dataene (med CyberChef eller Python) for å avsløre den endelige klarteksten.
Knekke passordet til den låste Apple Note med Hashcat
Målet mitt var å simulere et realistisk kriminalteknisk scenario: Jeg hadde en låst Apple Note og trengte å gjenopprette passordet for å dekryptere innholdet. Det er her Hashcat kommer inn i bildet. Utnytter hash-modusen i Apple Secure Notes (ID 16200), forsøkte Hashcat systematisk å finne det riktige passordet helt til den fant det.
Trekke ut de nødvendige kolonnene
Jeg begynte med å åpne NoteStore.sqlite i DB Browser og målrette rader med ZISPASSWORDPROTECTED = 1 i ZICCLOUDSYNCINGOBJECT-tabellen. Jeg spurte deretter følgende kolonner:
- Z_PK - notatets unike identifikator.
- ZCRYPTOSALT - saltverdien for PBKDF2.
- ZCRYPTOWRAPPEDKEY - den innpakkede nøkkelen som senere skal pakkes ut.

Hashcat-inndatafilen ble generert av et lite Python-skript notes_to_hashcat.pysom formaterte disse verdiene til en enkelt linje som Hashcat kunne analysere, inkludert iterasjonstallet (fra ZCRYPTOITERATIONCOUNT).

Kjører Hashcat for å dekryptere det låste Apple Note-passordet
Med Hashcat-inndatafilen klar og en ordbok for hånden, kjørte jeg følgende kommando:
hashcat -m 16200 -a 0
Her:
- -m 16200 angir Apple Secure Notes-modus.
- -a 0 setter Hashcat i rett angrepsmodus (ordbok).
- Ordboken kan være noe sånt som rockyou.txt eller en egendefinert liste utledet fra enhetsartefakter.

Hashcat identifiserte det riktige passordet: royalewithcheese. I en faktisk etterforskning kan ordboken din være langt større, men dette resultatet bekreftet at Hashcat kunne håndtere de tunge løftene.
Utlede nøkkelkrypteringsnøkkelen (KEK) for å dekryptere Apple Notes
Med passordet i hånden var neste skritt å finne ut Nøkkelkrypteringsnøkkel (KEK)som brukes til å pakke inn den endelige AES-nøkkelen som krypterer innholdet i notatet. For å utlede KEK trengte jeg følgende verdier fra ZICCLOUDSYNCINGOBJECT-tabellen:
- Passordfrase (det knekte passordet)
- Antall iterasjoner (ZCRYPTOITERATIONCOUNT)
- Salt (ZCRYPTOSALT)
For eksempel, ved hjelp av DB Browser, spurte jeg:
SELECT ZCRYPTOITERATIONCOUNT, ZCRYPTOSALT FROM ZICCLOUDSYNCINGOBJECT WHERE Z_PK = ;

Deretter åpnet jeg CyberChef - et av mine favorittverktøy 🛠️ - og dro inn operasjonen "Derive PBKDF2 key". Ved å sette hashing-funksjonen til SHA-256 og skrev inn passord, salt og antall iterasjoner, produserte CyberChef 16-byte KEK:

For å automatisere denne prosessen opprettet jeg et Python-skript kalt get_key.pysom godtar databasestien, note PK og passord som argumenter. Når du kjører den, returneres KEK i hex.
python get_kek.py NoteStore.sqlite
Resultat:
Merk PK=16: KEK (hex) = a1dac1516302e1d3d73ad4fd4b6f8fef
Pakke ut AES-nøkkelen for å dekryptere låste Apple-notater på iOS 16
Neste skritt var å pakke opp nøkkelen som brukes til å kryptere notatets innhold. Den innpakkede nøkkelen lagres i kolonnen ZCRYPTOWRAPPEDKEY i ZICCLOUDSYNCINGOBJECT. Jeg spurte for eksempel::
SELECT ZCRYPTOWRAPPEDKEY FROM ZICCLOUDSYNCINGOBJECT WHERE Z_PK = 16;

Alternativer for utpakking
Alternativ 1: Pakke ut AES-nøkkelen for dekryptering av låste Apple-notater på iOS 16 med CyberChef
Jeg deaktiverte alle tidligere operasjoner, søkte etter "AES Key Unwrap" og dro den inn i oppskriftsvinduet. Ved å lime inn KEK og den innpakkede nøkkelen, fikk CyberChef ut den utpakkede AES-nøkkelen.

Alternativ 2: Automatisering av AES-nøkkelopprulling med unwrap.py
Jeg har også utviklet et Python-skript som heter unwrap.py som tar databasestien og KEK (i hex) som argumenter. Ved å kjøre dette skriptet ble nøkkelen pakket ut og skrevet ut i hex-format. I mitt tilfelle var den utpakkede nøkkelen
python unwrap.py NoteStore.sqlite

Dette er den endelige AES-nøkkelen som vil bli brukt til å dekryptere innholdet i den låste Apple-notaten.
Dekryptering av Apple Notes BLOB-er ved hjelp av AES-GCM på iOS 16
Nå som jeg hadde den utpakkede nøkkelen, var det på tide å dekryptere Apple Notes BLOB-en som var lagret i ZICNOTEDATA
tabell. Apple bruker AES i GCM-modus for å beskytte innholdet i låste notater, noe som betyr at jeg trengte fire viktige komponenter for å komme videre:
🔑 Uinnpakket AES-nøkkel
🔁 Initialiseringsvektor (IV) fra
ZCRYPTOINITIALISERINGSVEKTOR
🏷 GCM-autentiseringsmerke fra
ZCRYPTOTAG
💾 Kryptert BLOB fra
ZDATA
📤 Trekke ut IV- og GCM-taggen fra NoteStore.sqlite
For å lokalisere IV og GCM-tagåpnet jeg ZICNOTEDATA
tabellen i DB Browser for SQLite. Disse feltene lagres som binære verdier og kan finnes i enten ZICNOTEDATA
eller ZICCLOUDSYNCINGOBJECT
tabeller. Begge lagrer dataene under samme kolonnenavn.
IV:
5c0c0bde9b6801747ddad1115a422d05
GCM Tag:
b9087ba19e3c7deff2cb4b9b51e6aafa
Selve den krypterte BLOB-en var også synlig i ZDATA
kolonne. Jeg kopierte alle tre verdiene i heksadesimalformat, og forberedte meg på det siste dekrypteringstrinnet.



🧪 Dekryptering av notatet med CyberChef
Med alt i hendene vendte jeg meg til CyberChef. Dette verktøyet gjorde det enkelt å kombinere alle parameterne og avdekke det opprinnelige innholdet. Her er hva jeg gjorde:
Jeg la til "AES-dekryptering" operasjon.
Jeg limte inn uinnpakket AES-nøkkel i nøkkelfeltet.
Jeg satte modus til GCM.
Jeg satte inn IV og GCM Tag inn i sine respektive felt.
Til slutt kopierte jeg kryptert BLOB i inndatavinduet.

Pakke ut og analysere det endelige notatet (dekryptert protobuf fra Apple Notes)
Etter å ha dekryptert den AES-krypterte BLOB-en, lagret jeg utdataene i en fil med navnet dekryptert_blob.bin
og åpnet den i HxD. Filsignaturen 0x1F8B08
bekreftet at det var en GZIP-komprimert fil - Apple bruker dette til å komprimere protobuf-data.
For å hente ut klarteksten åpnet jeg CyberChef på nytt og la til Gunzip operasjonen til arbeidsflyten. Umiddelbart begynte kjente strenger å dukke opp i utdataene.

Etter å ha fjernet komprimeringen, brukte jeg Protobuf-avkoding i CyberChef. Resultatet ble en strukturert visning som lignet JSON, med nøkler og verdier som representerte innholdet i den låste Apple Note.

For å gjøre det enklere å lese, brukte jeg også et Python-skript som utnyttet backboxprotobuf
modulen til å analysere protobuf-filen og skrive ut resultatet i et rent, lesbart format.

Dette samsvarer med det brukeren skrev på sin låste Apple Note. Du har gått fra en skjult, passordbeskyttet oppføring til den faktiske meldingen i klartekst - et uvurderlig funn i enhver rettsmedisinsk sak.

🔚 Wrapping Up
Gratulerer 🎉 - du har nettopp fullført en fullstendig rettsmedisinsk arbeidsflyt for å dekryptere låste Apple Notes på iOS 16. Du hentet ut krypteringsparametere fra SQLite-databasen, knekte passordet med Hashcatavledet og pakket opp AES-nøkkelen ved hjelp av Pythonog til slutt dekrypterte og analyserte protobuf-filen med CyberChef. Hvert skritt brakte deg nærmere en avsløring av lappens skjulte innhold.
Denne praktiske gjennomgangen viser hvor kraftig verktøy med åpen kildekode kan være i digital kriminalteknikk. De hjelper etterforskere med å avdekke krypterte Apple Notes som kommersielle verktøy kanskje ikke fanger opp - spesielt på enheter som kjører iOS 16 eller tidligere.
🕵️ Bonus: Passordhintet
Her er en ekstra vri - jeg fant en passordhint i ZICCLOUDSYNCINGOBJECT
bord:
Quarter Pounder
Siden enheten tilhørte en person ved navn "Vincent", var det ikke vanskelig å gjette passordet: royalewithcheese - et nikk til Pulp Fiction. I virkelige tilfeller kan passordtips som dette akselerere arbeidsflyten når de kombineres med en strategisk knekkeprosess.
📱 En ting til ... om iOS 17 og iOS 18
Denne veiledningen gjelder spesielt hvordan du dekrypterer Apple Notes på iOS 16 og tidligere. Starter med iOS 17I løpet av det siste året har Apple innført betydelige endringer i Notes-krypteringsprosessen. Du kan støte på manglende nøkkelavledningsfelt, forskjellige kryptografiske strukturer eller notater som ikke lenger dekrypteres ved hjelp av de samme metodene.
Hvis du utforsker hvordan du kan dekryptere Apple Notes på iOS 17 eller iOS 18Jeg vil gjerne samarbeide. Del dine funn - la oss bryte ned den nye krypteringen sammen.
Takk for at du leser! Har du spørsmål eller innspill? Skriv dem i kommentarfeltet nedenfor, eller ta kontakt direkte. La oss fortsette å flytte grensene for rettsmedisinske funn. 🔍