Introdução
Ao analisar um dispositivo de teste com uma popular ferramenta forense móvel comercial, deparei-me com algo intrigante - um Apple Note bloqueado que aparecia apenas como "oculto". A ferramenta mostrava o resumo da nota (com a etiqueta "Lance"), mas o conteúdo real estava em falta. Não havia qualquer pista sobre o que estava por detrás do cadeado, o que me deixou com uma pergunta ardente: poderia eu descobrir o segredo que estava lá dentro? Precisava de um fluxo de trabalho que me ajudasse a desencriptar as Apple Notes no iOS 16.
O dispositivo estava a funcionar iOS 16.7.10e depois de investigar a base de dados NoteStore.sqlite, apercebi-me de que todas as pistas de encriptação estavam ali mesmo, à espera de serem descodificadas. Com a ajuda de ferramentas de código aberto, comecei a recuperar a palavra-passe e a desencriptar o conteúdo da nota.
Esta publicação apresenta-lhe as fluxo de trabalho forense completo sobre como descriptografar o Apple Notes no iOS 16:
- 🔓 Hashcat para decifrar palavras-passe
- 🗄️ Navegador DB para SQLite para explorar e extrair parâmetros de encriptação
- 🐍 Scripts Python para a derivação de chaves e o desdobramento de chaves AES
- 🔍 CyberChef para desencriptar, descomprimir e analisar a carga útil final do protobuf
⚠️ Nota importante: Este fluxo de trabalho aplica-se especificamente ao Apple Notes bloqueado em iOS 16.x. A partir do iOS 17, a Apple alterou a forma como as notas encriptadas são armazenadas - e o iOS 18 traz ainda mais alterações.
Vamos mergulhar e revelar a mensagem oculta no interior do Apple Note bloqueado.
Investigando o NoteStore.sqlite

Na captura de ecrã, pode ver os valores hexadecimais brutos para ZDATA. Estes dados são efetivamente codificados por Encriptação AES, com metadados críticos - como sais e contagens de iteração - guardados noutras partes da base de dados. A partir de um examinador forense Reconhecer que a nota está totalmente encriptada é a sua deixa para se aprofundar na tabela ZICCLOUDSYNCINGOBJECT para os parâmetros necessários para fenda o código de acesso e desbloquear a nota 🔓.
Porque é que as Apple Notes bloqueadas estão encriptadas no iOS 16?
O Apple Notes protege as notas bloqueadas utilizando uma combinação de PBKDF2 (derivação de chaves) e AES (encriptação). Quando uma palavra-passe é activada numa nota, a Apple armazena metadados criptográficos importantes na base de dados - tais como:
- ZCRYPTOITERATIONCOUNT
- ZCRYPTOSALT
- ZCRYPTOWRAPPEDKEY
Estes valores garantem que apenas alguém com a palavra-passe correta pode desencriptar o conteúdo da nota.
Abordagem forense
De um ponto de vista forense, os passos normalmente incluem:
- Identificar as entradas de notas bloqueadas relevantes em ZICNOTEDATA e ZICCLOUDSYNCINGOBJECT.
- Extrato os pormenores criptográficos - como a contagem de iterações, o sal e a chave de proteção.
- Crack a palavra-passe do utilizador com Hashcat (ou outra ferramenta de recuperação de palavras-passe como o John the Ripper ou o Passware).
- Derivar as chaves finais em Python ou CyberChef e decifrar o BLOB da nota.
- Descomprimir os dados desbloqueados do protobuf (com CyberChef ou Python) para revelar o texto simples final.
Decifrar a palavra-passe de um Apple Note bloqueado com o Hashcat
O meu objetivo era simular um cenário forense realista: tinha um Apple Note bloqueado e precisava de recuperar a sua palavra-passe para desencriptar o conteúdo. Foi aí que Hashcat entra em ação. Tirando partido do seu modo de hash Apple Secure Notes (ID 16200), o Hashcat tentou sistematicamente as senhas até encontrar a correta.
Extração das colunas necessárias
Comecei por abrir NoteStore.sqlite no DB Browser e selecionando linhas com ZISPASSWORDPROTECTED = 1 na tabela ZICCLOUDSYNCINGOBJECT. Em seguida, consultei as seguintes colunas:
- Z_PK - o identificador único da nota.
- ZCRYPTOSALT - o valor do sal para PBKDF2.
- ZCRYPTOWRAPPEDKEY - a chave envolvida que será posteriormente desembrulhada.

O ficheiro de entrada Hashcat foi gerado por um pequeno script Python notas_para_hashcat.pyque formatou estes valores numa única linha que o Hashcat podia analisar, incluindo a contagem de iterações (de ZCRYPTOITERATIONCOUNT).

Executar o Hashcat para desencriptar a palavra-passe bloqueada do Apple Note
Com o meu ficheiro de entrada Hashcat pronto e um dicionário à mão, executei o seguinte comando:
hashcat -m 16200 -a 0
Aqui:
- -m 16200 especifica o modo Apple Secure Notes.
- -a 0 coloca o Hashcat no modo de ataque Direto (dicionário).
- O dicionário pode ser algo como rockyou.txt ou uma lista personalizada derivada de artefactos do dispositivo.

O Hashcat identificou com sucesso a senha correta: royalewithcheese. Numa investigação real, o seu dicionário pode ser muito maior, mas este resultado confirmou que o Hashcat podia fazer o trabalho pesado.
Derivar a chave de encriptação de chaves (KEK) para desencriptar Apple Notes
Com a palavra-passe na mão, o passo seguinte foi derivar a Chave de encriptação de chaves (KEK)que é utilizada para envolver a chave AES final que encripta o conteúdo da nota. Para derivar a KEK, precisei dos seguintes valores da tabela ZICCLOUDSYNCINGOBJECT:
- Palavra-passe (a palavra-passe decifrada)
- Contagem de iterações (ZCRYPTOITERATIONCOUNT)
- Sal (ZCRYPTOSALT)
Por exemplo, utilizando o DB Browser, fiz uma consulta:
SELECT ZCRYPTOITERATIONCOUNT, ZCRYPTOSALT FROM ZICCLOUDSYNCINGOBJECT WHERE Z_PK = ;

Em seguida, abri o CyberChef - uma das minhas ferramentas favoritas 🛠️ - e arrastei a operação "Derive PBKDF2 key". Definindo a função de hashing para SHA-256 e introduzindo a palavra-passe, o sal e a contagem de iterações, o CyberChef produziu o KEK de 16 bytes:

Para automatizar este processo, criei um script Python chamado get_key.pyque aceita o caminho da base de dados, a nota PK e a palavra-passe como argumentos. A sua execução devolve o KEK em hexadecimal.
python get_kek.py NoteStore.sqlite
Resultado:
Nota PK=16: KEK (hex) = a1dac1516302e1d3d73ad4fd4b6f8fef
Desvendando a chave AES para descriptografar notas da Apple bloqueadas no iOS 16
O passo seguinte foi desembrulhar a chave utilizada para encriptar o conteúdo da nota. A chave envolvida é armazenada na coluna ZCRYPTOWRAPPEDKEY do ZICCLOUDSYNCINGOBJECT. Por exemplo, eu consultei::
SELECT ZCRYPTOWRAPPEDKEY FROM ZICCLOUDSYNCINGOBJECT WHERE Z_PK = 16;

Opções de desembrulhar
Opção 1: Desembrulhar a chave AES para descriptografar notas da Apple bloqueadas no iOS 16 com CyberChef
Desactivei todas as operações anteriores, procurei por "AES Key Unwrap" e arrastei-a para a janela da receita. Ao colar a KEK e a chave encapsulada, o CyberChef produziu a chave AES desencapsulada.

Opção 2: Automatizando a quebra de chaves AES com unwrap.py
Também desenvolvi um script Python chamado unwrap.py que recebe o caminho da base de dados e a KEK (em hexadecimal) como argumentos. Executando este script, a chave foi desembrulhada e impressa em formato hexadecimal. No meu caso, a chave desdobrada era:
python unwrap.py NoteStore.sqlite

Esta é a chave AES final que será utilizada para desencriptar o conteúdo da nota Apple bloqueada.
Descriptografar BLOBs do Apple Notes usando AES-GCM no iOS 16
Agora que eu tinha a chave desempacotada, era hora de descriptografar o BLOB do Apple Notes armazenado no ZICNOTEDATA
tabela. A Apple utiliza AES em modo GCM para proteger o conteúdo das notas bloqueadas, o que significa que precisava de quatro componentes essenciais para prosseguir:
🔑 Chave AES não encapsulada
🔁 Vetor de inicialização (IV) de
ZCRYPTOINITIALIZATIONVECTOR
🏷 Etiqueta de autenticação GCM de
ZCRYPTOTAG
💾 BLOB encriptado de
ZDATA
📤 Extrair a etiqueta IV e GCM de NoteStore.sqlite
Para localizar o IV e Etiqueta GCMabri o ZICNOTEDATA
no DB Browser para SQLite. Estes campos são armazenados como valores binários e podem ser encontrados em ZICNOTEDATA
ou ZICCLOUDSYNCINGOBJECT
tabelas. Ambas armazenam os dados com os mesmos nomes de colunas.
IV:
5c0c0bde9b6801747ddad1115a422d05
Etiqueta GCM:
b9087ba19e3c7deff2cb4b9b51e6aafa
O próprio BLOB encriptado também era visível no ZDATA
coluna. Copiei os três valores em formato hexadecimal, preparando-me para o passo final da desencriptação.



🧪 Desencriptar a nota com o CyberChef
Com tudo na mão, virei-me para CyberChef. Esta ferramenta permitiu combinar facilmente todos os parâmetros e revelar o conteúdo original. Eis o que fiz:
Acrescentei o "Descriptografia AES" operação.
Colei o chave AES não encapsulada no campo Chave.
Eu coloquei o modo para GCM.
Inseri o IV e GCM Tag nos seus respectivos domínios.
Por fim, copiei o ficheiro BLOB encriptado na janela de entrada.

Descompactando e analisando a nota final (Protobuf descriptografado do Apple Notes)
Depois de desencriptar o BLOB encriptado com AES, guardei o resultado num ficheiro com o nome descodificado_blob.bin
e abriu-o em HxD. A assinatura do ficheiro 0x1F8B08
confirmou que era um ficheiro comprimido GZIP - a Apple utiliza-o para comprimir dados protobuf.
Para extrair o texto simples, voltei a abrir o CyberChef e adicionei o ficheiro Gunzip para o fluxo de trabalho. Imediatamente, começaram a aparecer cadeias de caracteres familiares no resultado.

Depois de descomprimido, apliquei o Descodificação Protobuf no CyberChef. O resultado foi uma vista estruturada semelhante a JSON, com chaves e valores que representam o conteúdo da Apple Note bloqueada.

Para facilitar a leitura, também usei um script Python que aproveitou o backboxprotobuf
para analisar o arquivo protobuf e imprimir a saída em um formato limpo e legível por humanos.

Isto corresponde ao que o utilizador escreveu no seu Apple Note bloqueado. Passou de uma entrada oculta e protegida por palavra-passe para a mensagem real em texto simples - um achado inestimável em qualquer caso forense.

🔚 Conclusão
Parabéns 🎉 - acabou de concluir um fluxo de trabalho forense completo para desencriptar Apple Notes bloqueadas no iOS 16. Extraiu parâmetros de encriptação da base de dados SQLite, decifrou a palavra-passe com Hashcat, derivou e desembrulhou a chave AES utilizando Pythone, finalmente, desencriptou e analisou o protobuf com CyberChef. Cada passo aproximava-o mais da exposição do conteúdo oculto da nota.
Este passo-a-passo prático prova o quão poderoso é o ferramentas de código aberto pode ser na investigação forense digital. Ajudam os investigadores a descobrir Apple Notes encriptadas que as ferramentas comerciais podem não detetar - especialmente em dispositivos com iOS 16 ou anterior.
🕵️ Bónus: A dica da palavra-passe
Aqui está um toque extra - encontrei um dica de palavra-passe no ZICCLOUDSYNCINGOBJECT
mesa:
Um quarto de libra
Uma vez que o dispositivo pertencia a alguém chamado "Vincent", não foi difícil adivinhar a palavra-passe: royalewithcheese - um aceno para Pulp Fiction. Em casos reais, sugestões de palavras-passe como esta podem acelerar o fluxo de trabalho quando combinadas com um processo de cracking estratégico.
📱 Mais uma coisa... Sobre o iOS 17 e o iOS 18
Este guia aplica-se especificamente à forma de desencriptar Notas da Apple no iOS 16 e anteriores. Começando com iOS 17Em setembro de 2007, a Apple introduziu alterações significativas no processo de encriptação do Notes. Poderá encontrar campos de derivação de chave em falta, estruturas criptográficas diferentes ou notas que já não são desencriptadas utilizando os mesmos métodos.
Se está a explorar a forma de desencriptar Apple Notes no iOS 17 ou iOS 18Adoraria colaborar. Partilhe as suas descobertas - vamos analisar juntos a nova encriptação.
Obrigado pela leitura! Tem perguntas ou ideias? Deixe-as nos comentários abaixo ou contacte-nos diretamente. Vamos continuar a alargar os limites da descoberta forense. 🔍