Wprowadzenie
Podczas analizy urządzenia testowego za pomocą popularnego komercyjnego mobilnego narzędzia kryminalistycznego natknąłem się na coś intrygującego - zablokowaną notatkę Apple Note, która wyglądała tylko jako "ukryta". Narzędzie pokazało podsumowanie notatki (oznaczone jako "Lance"), ale brakowało faktycznej treści. Nie było pojęcia, co kryje się pod blokadą, pozostawiając mnie z palącym pytaniem: czy mogę odkryć sekret w środku? Potrzebowałem przepływu pracy, który pomógłby mi odszyfrować Apple Notes na iOS 16.
Urządzenie było uruchomione iOS 16.7.10Po zagłębieniu się w bazę danych NoteStore.sqlite zdałem sobie sprawę, że wszystkie wskazówki dotyczące szyfrowania znajdują się właśnie tam - czekając na odszyfrowanie. Z pomocą narzędzi open-source postanowiłem odzyskać hasło i odszyfrować zawartość notatki.
Ten post przeprowadzi Cię przez Kompletny przepływ pracy kryminalistycznej w jaki sposób odszyfrować Apple Notes na iOS 16:
- 🔓 Hashcat do łamania haseł
- 🗄️ Przeglądarka DB dla SQLite aby zbadać i wyodrębnić parametry szyfrowania
- 🐍 Skrypty Python do wyprowadzania kluczy i rozpakowywania kluczy AES
- 🔍 CyberChef aby odszyfrować, zdekompresować i przeanalizować końcowy ładunek protobuf
⚠️ Ważna uwaga: Ten przepływ pracy dotyczy w szczególności Apple Notes zablokowanych na iOS 16.x. Począwszy od iOS 17, Apple zmieniło sposób przechowywania zaszyfrowanych notatek, a iOS 18 wprowadza jeszcze więcej zmian.
Zanurzmy się i ujawnijmy ukrytą wiadomość wewnątrz zablokowanego Apple Note.
Zagłębianie się w NoteStore.sqlite

Na zrzucie ekranu widać surowe wartości szesnastkowe dla ZDATA. Dane te są skutecznie szyfrowane przez Szyfrowanie AESz krytycznymi metadanymi, takimi jak sole i liczba iteracji, zapisanymi w innych częściach bazy danych. Od egzaminator kryminalistyczny Z perspektywy, rozpoznanie, że notatka jest w pełni zaszyfrowana, jest sygnałem do zagłębienia się w tabelę ZICCLOUDSYNCINGOBJECT w celu uzyskania parametrów potrzebnych do pęknięcie kod dostępu i odblokowanie nota 🔓.
Dlaczego zablokowane notatki Apple są szyfrowane w systemie iOS 16?
Apple Notes zabezpiecza zablokowane notatki za pomocą kombinacji PBKDF2 (wyprowadzanie klucza) i AES (szyfrowanie). Gdy hasło jest włączone w notatce, Apple przechowuje kluczowe metadane kryptograficzne w bazie danych - takie jak:
- ZCRYPTOITERATIONCOUNT
- ZCRYPTOSALT
- ZCRYPTOWRAPPEDKEY
Wartości te zapewniają, że tylko osoba z prawidłowym kodem dostępu może odszyfrować zawartość notatki.
Podejście kryminalistyczne
Z kryminalistycznego punktu widzenia, podejmowane kroki zazwyczaj obejmują:
- Identyfikacja odpowiednie wpisy zablokowanych notatek w ZICNOTEDATA i ZICCLOUDSYNCINGOBJECT.
- Wyciąg szczegóły kryptograficzne, takie jak liczba iteracji, sól i zawinięty klucz.
- Pęknięcie hasło użytkownika za pomocą Hashcat (lub inne narzędzie do odzyskiwania haseł, takie jak John the Ripper lub Passware).
- Pochodna końcowe klucze w Python lub CyberChef oraz odszyfrowywanie BLOB notatki.
- Dekompresja odblokowane dane protobuf (z CyberChef lub Python), aby ujawnić ostateczny tekst jawny.
Złamanie hasła zablokowanego Apple Note za pomocą Hashcat
Moim celem była symulacja realistycznego scenariusza kryminalistycznego: miałem zablokowany Apple Note i musiałem odzyskać jego kod dostępu, aby odszyfrować zawartość. W tym miejscu Hashcat wchodzi do gry. Wykorzystując tryb skrótu Apple Secure Notes (ID 16200), Hashcat systematycznie próbował haseł, aż znalazł prawidłowe.
Wyodrębnianie wymaganych kolumn
Zacząłem od otwarcia NoteStore.sqlite w DB Browser i kierowanie na wiersze z ZISPASSWORDPROTECTED = 1 w tabeli ZICCLOUDSYNCINGOBJECT. Następnie zapytałem o następujące kolumny:
- Z_PK - unikalny identyfikator noty.
- ZCRYPTOSALT - wartość soli dla PBKDF2.
- ZCRYPTOWRAPPEDKEY - zawinięty klucz, który zostanie później rozpakowany.

Plik wejściowy Hashcat został wygenerowany przez mały skrypt Pythona notes_to_hashcat.py, który sformatował te wartości w pojedynczy wiersz, który Hashcat mógł przeanalizować, w tym liczbę iteracji (z ZCRYPTOITERATIONCOUNT).

Uruchamianie Hashcat w celu odszyfrowania zablokowanego hasła Apple Note
Mając gotowy plik wejściowy Hashcat i słownik pod ręką, uruchomiłem następujące polecenie:
hashcat -m 16200 -a 0
Tutaj:
- -m 16200 określa tryb Apple Secure Notes.
- -a 0 ustawia Hashcat na tryb ataku prostego (słownikowego).
- Słownik może wyglądać następująco rockyou.txt lub niestandardową listę pochodzącą z artefaktów urządzenia.

Hashcat pomyślnie zidentyfikował prawidłowe hasło: royalewithcheese. W rzeczywistym dochodzeniu słownik może być znacznie większy, ale ten wynik potwierdził, że Hashcat poradzi sobie z ciężkim zadaniem.
Uzyskanie klucza szyfrowania (KEK) do odszyfrowania Apple Notes
Mając hasło w ręku, następnym krokiem było uzyskanie Klucz szyfrowania klucza (KEK)który jest używany do zawijania ostatecznego klucza AES, który szyfruje zawartość notatki. Aby uzyskać KEK, potrzebowałem następujących wartości z tabeli ZICCLOUDSYNCINGOBJECT:
- Hasło (złamane hasło)
- Liczba iteracji (ZCRYPTOITERATIONCOUNT)
- Sól (ZCRYPTOSALT)
Na przykład, używając DB Browser, zapytałem:
SELECT ZCRYPTOITERATIONCOUNT, ZCRYPTOSALT FROM ZICCLOUDSYNCINGOBJECT WHERE Z_PK = ;

Następnie otworzyłem CyberChef - moje ulubione narzędzie 🛠️ - i przeciągnąłem operację "Derive PBKDF2 key". Ustawiłem funkcję haszującą na SHA-256 i wprowadzając hasło, sól i liczbę iteracji, CyberChef wygenerował następujące dane 16-bajtowy KEK:

Aby zautomatyzować ten proces, stworzyłem skrypt Pythona o nazwie get_key.pyktóra jako argumenty przyjmuje ścieżkę do bazy danych, notę PK i hasło. Uruchomienie zwraca KEK w hex.
python get_kek.py NoteStore.sqlite
Wynik:
Uwaga PK=16: KEK (hex) = a1dac1516302e1d3d73ad4fd4b6f8fef
Rozpakowywanie klucza AES w celu odszyfrowania zablokowanych notatek Apple na iOS 16
Następnym krokiem było rozpakuj klucz używany do szyfrowania zawartości notatki. Zawinięty klucz jest przechowywany w kolumnie ZCRYPTOWRAPPEDKEY obiektu ZICCLOUDSYNCINGOBJECT. Na przykład, zapytałem::
SELECT ZCRYPTOWRAPPEDKEY FROM ZICCLOUDSYNCINGOBJECT WHERE Z_PK = 16;

Opcje rozpakowywania
Opcja 1: Rozpakowanie klucza AES w celu odszyfrowania zablokowanych notatek Apple Notes na iOS 16 za pomocą CyberChef
Wyłączyłem wszystkie poprzednie operacje, wyszukałem "AES Key Unwrap" i przeciągnąłem go do okna receptury. Wklejając KEK i zawinięty klucz, CyberChef wyświetlił rozpakowany klucz AES.

Opcja 2: Automatyzacja rozpakowywania klucza AES za pomocą unwrap.py
Opracowałem również skrypt Pythona o nazwie unwrap.py który jako argumenty przyjmuje ścieżkę do bazy danych i KEK (w formacie hex). Uruchomienie tego skryptu powoduje rozpakowanie klucza i wydrukowanie go w formacie hex. W moim przypadku rozpakowany klucz to:
python unwrap.py NoteStore.sqlite

Jest to ostateczny klucz AES, który zostanie użyty do odszyfrowania zablokowanej zawartości notatki Apple.
Odszyfrowywanie notatek Apple Notes BLOB przy użyciu AES-GCM w systemie iOS 16
Teraz, gdy miałem już rozpakowany klucz, nadszedł czas, aby odszyfrować plik Apple Notes BLOB przechowywany w folderze ZICNOTEDATA
tabela. Apple używa AES w trybie GCM aby chronić zawartość zablokowanych notatek, co oznacza, że potrzebowałem czterech podstawowych komponentów, aby kontynuować:
🔑 Rozpakowany klucz AES
🔁 Wektor inicjalizacji (IV) z
ZCRYPTOINITIALIZATIONVECTOR
🏷 Znacznik uwierzytelniania GCM z
ZCRYPTOTAG
💾 Zaszyfrowany BLOB z
ZDATA
📤 Wyodrębnianie znacznika IV i GCM z pliku NoteStore.sqlite
Aby zlokalizować IV oraz Znacznik GCMotworzyłem ZICNOTEDATA
w tabeli DB Browser dla SQLite. Pola te są przechowywane jako wartości binarne i można je znaleźć w sekcji ZICNOTEDATA
lub ZICCLOUDSYNCINGOBJECT
tabele. Obie przechowują dane pod tymi samymi nazwami kolumn.
IV:
5c0c0bde9b6801747ddad1115a422d05
Znacznik GCM:
b9087ba19e3c7deff2cb4b9b51e6aafa
Sam zaszyfrowany BLOB był również widoczny w pliku ZDATA
kolumna. Skopiowałem wszystkie trzy wartości w formacie szesnastkowym, przygotowując się do ostatniego etapu deszyfrowania.



Odszyfrowywanie notatki za pomocą CyberChef
Mając wszystko pod ręką, zwróciłem się do CyberChef. Narzędzie to ułatwiło połączenie wszystkich parametrów i ujawnienie oryginalnej zawartości. Oto co zrobiłem:
Dodałem "AES Decrypt" działanie.
Wkleiłem rozpakowany klucz AES w polu Klucz.
Ustawiłem tryb do GCM.
Włożyłem Znacznik IV i GCM w swoich dziedzinach.
Na koniec skopiowałem zaszyfrowany BLOB w oknie wprowadzania.

Rozpakowywanie i analizowanie końcowej notatki (odszyfrowany protobuf z Apple Notes)
Po odszyfrowaniu zaszyfrowanego AES BLOB, zapisałem dane wyjściowe do pliku o nazwie decrypted_blob.bin
i otworzył go w HxD. Sygnatura pliku 0x1F8B08
potwierdził, że był to plik skompresowany GZIP - Apple używa go do kompresji danych protobuf.
Aby wyodrębnić zwykły tekst, ponownie otworzyłem CyberChef i dodałem plik Gunzip do przepływu pracy. Natychmiast na wyjściu zaczęły pojawiać się znajome ciągi znaków.

Po rozpakowaniu zastosowałem Dekodowanie Protobuf w CyberChef. Rezultatem był ustrukturyzowany widok przypominający JSON, z kluczami i wartościami reprezentującymi zawartość zablokowanego Apple Note.

Aby ułatwić czytanie, użyłem również skryptu Pythona, który wykorzystuje funkcję backboxprotobuf
aby przeanalizować plik protobuf i wydrukować dane wyjściowe w czystym, czytelnym dla człowieka formacie.

Odpowiada to temu, co użytkownik wpisał w zablokowanym Apple Note. Przeszedłeś od ukrytego, chronionego hasłem wpisu do rzeczywistej, zwykłej wiadomości - bezcenne znalezisko w każdej sprawie kryminalistycznej.

Podsumowanie
Gratulacje 🎉 - właśnie ukończyłeś pełny kryminalistyczny workflow do odszyfrować zablokowane Apple Notes na iOS 16. Wyodrębniłeś parametry szyfrowania z bazy danych SQLite, złamałeś hasło za pomocą Hashcatwyprowadził i rozpakował klucz AES przy użyciu Pythoni ostatecznie odszyfrował i przeanalizował protobuf za pomocą CyberChef. Każdy krok przybliżał cię do ujawnienia ukrytej zawartości notatki.
Ten praktyczny przewodnik udowadnia, jak potężny narzędzia open source może być w kryminalistyce cyfrowej. Pomagają śledczym odkryć zaszyfrowane notatki Apple Notes, które komercyjne narzędzia mogą przeoczyć - zwłaszcza na urządzeniach z systemem operacyjnym. iOS 16 lub wcześniejszy.
🕵️ Bonus: Podpowiedź do hasła
Oto dodatkowy zwrot akcji - znalazłem podpowiedź do hasła w ZICCLOUDSYNCINGOBJECT
tabela:
Quarter Pounder
Ponieważ urządzenie należało do kogoś o imieniu "Vincent", odgadnięcie hasła nie było trudne: royalewithcheese - ukłon w stronę Pulp Fiction. W rzeczywistych przypadkach takie podpowiedzi haseł mogą przyspieszyć przepływ pracy w połączeniu ze strategicznym procesem łamania.
Jeszcze jedna rzecz... o iOS 17 i iOS 18
Ten przewodnik dotyczy w szczególności sposobu odszyfrowywania Notatki Apple na iOS 16 i wcześniejszych. Począwszy od iOS 17Apple wprowadziło znaczące zmiany w procesie szyfrowania aplikacji Notes. Można napotkać brakujące pola wyprowadzania klucza, różne struktury kryptograficzne lub notatki, które nie są już odszyfrowywane przy użyciu tych samych metod.
Jeśli zastanawiasz się, jak odszyfrować Apple Notes na iOS 17 lub iOS 18, chciałbym współpracować. Podziel się swoimi odkryciami - wspólnie przeanalizujmy nowe szyfrowanie.
Dzięki za przeczytanie! Masz pytania lub spostrzeżenia? Zostaw je w komentarzach poniżej lub skontaktuj się z nami bezpośrednio. Przesuwajmy granice odkryć kryminalistycznych. 🔍