Como você criptografa seu dispositivo executando o CyanogenMod 12.1?

9

A configuração 'Criptografar telefone' do CyanogenMod 12 e 12.1 está quebrada e já existe há um bom tempo. Existe alguma maneira de criptografar o telefone de alguma outra maneira? O CM pode ser carregado lateralmente em um telefone com um diretório criptografado / data? Existem outras maneiras de manter seus dados sãos e salvos? O dispositivo em que estou trabalhando é um Verizon LG G3.

Zlatty
fonte

Respostas:

6

Existem comandos de baixo nível (er) que podem ser usados ​​em um shell para criptografar sua partição de dados do usuário. Isenção de responsabilidade / aviso: as instruções a seguir limparão seus dados e , se necessário, faça um backup.

Após estas etapas, você deve ser capaz de limpar a sua partição de dados e tê-lo criptografado depois (semelhante a um reset de fábrica):

  1. Inicialize o telefone normalmente (a recuperação não funciona mais ou ocorreu um problema diferente).
  2. Verifique se o modo de depuração USB (adb) e o acesso raiz ao ADB estão ativados.
  3. Insira um shell raiz com adb rootseguido de adb shell.
  4. Opcional: observe os logs chamando adb logcatem outro shell.
  5. Digite este comando, digite sua senha e pressione Enter. Isso realmente definirá sua senha. Este comando lê uma linha de input ( head -1), retira a nova linha à direita de Enter ( tr -d '\n') e a converte em uma representação hexadecimal ( hexdump ...). Se parecer assustador ou se você não tiver certeza do que esse comando faz, veja abaixo.

    vdc cryptfs enablecrypto wipe password $(head -1 | tr -d '\n' | hexdump -ve '1/1 "%.2x"')
    
  6. Se tudo der certo, seu dispositivo definirá as chaves e reiniciará para concluir a criptografia.

O vdccomando acima ("Volume Daemon Client") comunicado com vold(Volume Daemon) possui alguns subcomandos, como cryptfspara criptografia. O enablecryptosubcomando possui dois modos: wipe(limpar /datacompletamente) e inplace(supostamente aplicar criptografia ao copiar o original /datadentro do contêiner).

Em seguida, quatro opções estão disponíveis a partir do Android 5.0, uma delas é a passwordque aceita uma única sequência hexadecimal como chave. Portanto, se sua senha é foo, então a representação hexadecimal é 666f6f( festá 66em hexadecimal, oé 6f, consulte http://www.asciitable.com/ ). O comando para isso é:

vdc cryptfs enablecrypto wipe password 666f6f

Isso foi testado em um Nexus 5 (nome de código hammerhead, executando cm-12.1-20150814) que possui uma partição separada para armazenar metadados. É importante que a partição de dados do usuário tenha o encryptableconjunto de sinalizadores seguido pelo caminho para uma partição ou pela sequência especial footer. Uma linha (abreviada) do meu /fstab.hammerheadarquivo:

/dev/block/platform/msm_sdcc.1/by-name/userdata / data ext4 ..., verifique, criptografável = /dev/block/platform/msm_sdcc.1/by-name/metadata

Quando a sequência especial footer( encryptable=footer) está presente, 16 KiB no final da partição de dados são usados ​​para armazenar metadados de criptografia.

Para leitura adicional, consulte:


Apêndice: trecho do logcat desde o momento em que executei o comando de criptografia até que ele termine e reinicie (omitindo mensagens gráficas não relacionadas no final). Observe que este Nexus 5 possui criptografia acelerada por hardware (QSEECom).

--------- beginning of main
08-16 12:57:15.459 W/DrmManagerClientImpl(Native)( 2108): DrmManager server died!
08-16 12:57:15.459 I/ServiceManager(  184): service 'drm.drmManager' died
08-16 12:57:15.467 D/Cryptfs (  186): Just asked init to shut down class main
08-16 12:57:15.470 D/Cryptfs (  186): unmounting /mnt/shell/emulated succeeded
08-16 12:57:15.599 I/ServiceManager(  184): service 'media.audio_flinger' died
08-16 12:57:15.599 I/ServiceManager(  184): service 'media.player' died
08-16 12:57:15.599 I/ServiceManager(  184): service 'media.camera' died
...
08-16 12:57:16.695 D/Cryptfs (  186): unmounting /data succeeded
08-16 12:57:16.695 D/QSEECOMAPI: (  186): QSEECom_get_handle sb_length = 0x2000
08-16 12:57:16.696 D/QSEECOMAPI: (  186): App is already loaded QSEE and app id = 2
08-16 12:57:16.697 I/Cryptfs (  186): keymaster version is 3
08-16 12:57:16.697 D/QSEECOMAPI: (  186): QSEECom_dealloc_memory 
08-16 12:57:16.697 D/QSEECOMAPI: (  186): QSEECom_shutdown_app, app_id = 2
08-16 12:57:16.697 D/QSEECOMAPI: (  186): QSEECom_get_handle sb_length = 0x2000
08-16 12:57:16.697 D/QSEECOMAPI: (  186): App is already loaded QSEE and app id = 2
08-16 12:57:18.058 D/QSEECOMAPI: (  186): QSEECom_dealloc_memory 
08-16 12:57:18.058 D/QSEECOMAPI: (  186): QSEECom_shutdown_app, app_id = 2
08-16 12:57:18.058 I/Cryptfs (  186): Using scrypt with keymaster for cryptfs KDF
08-16 12:57:18.208 D/BootAnimation( 2683): Use save memory method, maybe small fps in actual.
08-16 12:57:18.208 E/QCOM PowerHAL( 2683): Failed to acquire lock.
08-16 12:57:18.691 D/QSEECOMAPI: (  186): QSEECom_get_handle sb_length = 0x2000
08-16 12:57:18.691 D/QSEECOMAPI: (  186): App is already loaded QSEE and app id = 2
08-16 12:57:18.692 I/Cryptfs (  186): Signing safely-padded object
08-16 12:57:18.797 D/QSEECOMAPI: (  186): QSEECom_dealloc_memory 
08-16 12:57:18.797 D/QSEECOMAPI: (  186): QSEECom_shutdown_app, app_id = 2
08-16 12:57:20.056 I/Cryptfs (  186): Using scrypt with keymaster for cryptfs KDF
08-16 12:57:20.690 D/QSEECOMAPI: (  186): QSEECom_get_handle sb_length = 0x2000
08-16 12:57:20.691 D/QSEECOMAPI: (  186): App is already loaded QSEE and app id = 2
08-16 12:57:20.691 I/Cryptfs (  186): Signing safely-padded object
08-16 12:57:20.796 D/QSEECOMAPI: (  186): QSEECom_dealloc_memory 
08-16 12:57:20.796 D/QSEECOMAPI: (  186): QSEECom_shutdown_app, app_id = 2
08-16 12:57:21.429 I/Cryptfs (  186): Enabling support for allow_discards in dmcrypt.
08-16 12:57:21.429 I/Cryptfs (  186): load_crypto_mapping_table: target_type = crypt
08-16 12:57:21.429 I/Cryptfs (  186): load_crypto_mapping_table: real_blk_name = /dev/block/platform/msm_sdcc.1/by-name/userdata, extra_params = 1 allow_discards
08-16 12:57:21.431 I/Cryptfs (  186): Making empty filesystem with command /system/bin/make_ext4fs -a /data -l 13725837312 /dev/block/dm-0
08-16 12:57:21.447 I/make_ext4fs(  186): SELinux: Loaded file_contexts from /file_contexts
08-16 12:57:21.447 I/make_ext4fs(  186): Creating filesystem with parameters:
08-16 12:57:21.447 I/make_ext4fs(  186):     Size: 13725835264
08-16 12:57:21.448 I/make_ext4fs(  186):     Block size: 4096
08-16 12:57:21.448 I/make_ext4fs(  186):     Blocks per group: 32768
08-16 12:57:21.448 I/make_ext4fs(  186):     Inodes per group: 8144
08-16 12:57:21.448 I/make_ext4fs(  186):     Inode size: 256
08-16 12:57:21.448 I/make_ext4fs(  186):     Journal blocks: 32768
08-16 12:57:21.449 I/make_ext4fs(  186):     Label: 
08-16 12:57:21.449 I/make_ext4fs(  186):     Transparent compression: none
08-16 12:57:21.449 I/make_ext4fs(  186):     Blocks: 3351034
08-16 12:57:21.449 I/make_ext4fs(  186):     Block groups: 103
08-16 12:57:21.459 I/make_ext4fs(  186):     Reserved block group size: 823
08-16 12:57:21.465 I/make_ext4fs(  186): Created filesystem with 11/838832 inodes and 93654/3351034 blocks
08-16 12:57:21.465 I/make_ext4fs(  186):     Total files: 0
08-16 12:57:21.465 I/make_ext4fs(  186):     Total bytes: 0
08-16 12:57:42.926 D/Cryptfs (  186): Successfully created filesystem on /dev/block/dm-0
Lekensteyn
fonte
Wow @Lekensteyn, obrigado por dedicar um tempo para escrever isso. Vou ter que passar algum tempo neste fim de semana tentando configurar isso. No caso de melhorar, eu posso limpar tudo do TWRP e tentar novamente, certo?
Zlatty
11
Sim, é apenas a partição de dados. Eu deliberadamente limpei o meu várias vezes quando estava experimentando.
Lekensteyn
2
LPT: A partir do 6.0 (Marshmallow), o vdc usa a senha não ascii codificada como parâmetro (= texto não criptografado). Foi muito bom praticar com a tabela ASCII depois que descobri isso - apenas alguns minutos depois que me pediram para inserir minha senha na inicialização. Eu tive que colocar minha senha em ASCII por causa da minha lol culpa
Denys Vitali
4

Para mim, a resposta original não funcionou como esperado. Parecia criptografado com êxito, mas a interface do usuário voltou muito rapidamente e a configuração "Criptografia" não mostrou que os dispositivos estavam criptografados. Apliquei os comandos fornecidos na atualização , mas ainda não funcionou. Depois reduzi o tamanho da partição de dados e ela foi criptografada com sucesso. Ou seja,

mount | grep datapara encontrar o dispositivo de bloco real da partição de dados. Vamos assumir que é /dev/block/mmcblk0p26.

umount /data para que as ferramentas ext funcionem.

e2fsck -f -p /dev/block/mmcblk0p26 para não ter problemas no próximo redimensionamento.

tune2fs -l /dev/block/mmcblk0p26 para obter a contagem de blocos. Vamos assumir que é 3057395.

resize2fs /dev/block/mmcblk0p26 3057375, ou seja, subtrair uma quantidade suficiente, como 20, da contagem de blocos original.

e2fsck -f -p /dev/block/mmcblk0p26 encontrou um inode colocado incorretamente para mim.

Eu também precisava montar a /systempartição para me apossar resize2fs. No meu sistema, esse binário estava vinculado a uma versão de 64 bits da libc, mas o TWRP que eu usei parecia não fornecer isso. Então, eu precisava prefixar os comandos com env LD_LIBRARY_PATH=/system/lib64.

Frederick Nord
fonte
Para o sistema de arquivos F2FS: android.stackexchange.com/questions/146081/…
Marc.2377
2

A partir de CM12.1 15/10/2015, a resposta de Lekensteyn não funciona mais.

Aparentemente, o mkfs.f2fs necessário para criar o sistema de arquivos foi movido de /system/bin/para/sbin/

Também temos que lidar com o SELINUX. Isso significa que precisamos executar várias etapas adicionais:

  1. raiz adb
  2. shell adb
  3. setenforce 0
  4. mount -oremount, rw / system
  5. ln -s /sbin/mkfs.f2fs /system/bin/mkfs.f2fs
  6. vdc cryptfs enablecrypto limpe a senha 666f6f
Arte
fonte
2

Outra atualização - CM13 9 de janeiro de 2016 , usando o telefone Nubia Z7 Max, NX505J

Este comando ( ln -s /sbin/mkfs.f2fs /system/bin/mkfs.f2fs) não é mais necessário, pois o arquivo fica aqui novamente. Não há necessidade de criar um link simbólico.

Esse comando não precisa mais estar em HEX e, se você digitar hex, seu PW será hex.
cryptfs enablecrypto wipe password 666f6f- Isso literalmente criou uma senha para mim, 666f6fnãofoo

Ainda estou pesquisando esse problema porque superei os blocos extras necessários para os metadados. Agora, preciso superar o fato de que a GUI e os comandos manuais para criptografar resultam em criptografia viável apenas através de um ciclo de inicialização. Vou relatar quando tiver uma criptografia bem-sucedida.

No momento, eu criptografo e funciona bem. Inicializo pela primeira vez e diz que o telefone está criptografado. Usando o TWRP, posso confirmar / os dados estão criptografados, mas as senhas HEX e ASCI que tento no TWRP não funcionam. Na próxima reinicialização, o sistema operacional Android não pode inicializar completamente o CM13. Confirma que tenho a senha de criptografia correta e recebo apenas 1 inicialização criptografada. Após a primeira inicialização criptografada bem-sucedida, ela bloqueia o estágio de animação do ciclo de inicialização posteriormente. As melhores práticas de segurança agora recomendam a criptografia de telefone AES256.

George Davey
fonte
Qual a confiabilidade do sistema com a criptografia de telefone AES256 no CM13? Eu abri um tópico sobre a coisa aqui android.stackexchange.com/q/134981/9897
Léo Léopold Hertz 준영
2

Ter um Moto X 2013 rodando o Cyanogenmod 12.1 também não foi capaz de criptografá-lo. Finalmente, obtive sucesso com estas etapas:

  1. Ative a raiz nas Configurações do desenvolvedor no telefone e abra um shell (o aplicativo Terminal também pode ser ativado nas Configurações do desenvolvedor)
  2. Digite sue confirme o acesso root
  3. Entrar setenforce 0
  4. Agora abra Configurações , vá para Segurança e selecione Criptografar telefone . O Android reinicia e começa a criptografar o telefone.

Cheguei a esta solução combinando a resposta de Art e este tópico do fórum .

Prumo
fonte
Não funcionou para mim. Btw, você pode definir o status do SELinux de volta para 1 depois disso?
Marc.2377
1

Após 6 horas de dor mental e suor, eu poderia ter encontrado uma solução que funcionou para mim. E foi um acidente também. Eu fiz isso para o Samsung S4 Mini com CyanogenMod 13.0 e Android 6.0.1. O fator chave aqui é que eu comecei com um telefone limpo (firmware novo e não rooteado), porque quando o telefone estava anteriormente enraizado, o telefone não queria mais funcionar.

Usei a solução do Firelord e do Lekensteyn para o problema, mas consegui esquecer uma linha dos comandos.

Aqui está como eu fiz isso:

  1. Ativei a depuração do Android e o acesso root ao ADB apenas nas Opções do desenvolvedor .

  2. No prompt de comando do ADB, usei o comando adb roote adb shell. Depois disso, abri outro prompt de comando do ADB e usei o adb logcatcomando.

  3. No primeiro shell do ADB, fui adiante com setenforce 0e depois disso vdc cryptfs enablecrypto wipe password YOUR-PASSWORD.

AVISO IMPORTANTE: O comando da senha pode variar da versão do Android que você está usando. Se você estiver usando o Android 5.X , deverá usar o sistema hexadecimal (na linha Chr é o símbolo da sua senha, o valor hexadecimal está na linha Hx). Se você estiver usando o Android 6.X , a SUA-SENHA será a senha que você digitou lá.

Como você percebe, eu esqueci de usar o mount -oremount,rw /systemcomando. Depois disso, a tela ficará preta. Quando vi que o shell do ADB com o log parou e terminou, reiniciei o telefone. Mas, como para todos, o problema é que o CyanogenMod não carrega. E eu consegui consertar isso facilmente:

  1. Mantenha Vol Up e Home & Power pressionados até que o TWRP seja inicializado. Ele solicitará sua senha de criptografia.
  2. Faça a instalação do CyanogenMod com o Google Apps adicional (a segunda parte do guia).
  3. Depois disso, reinicie o dispositivo. Quando ele inicializar, levará um tempo. Primeiro, ele liga o telefone, depois solicita a senha de criptografia e demora um pouco até inicializar.

Lá vai você, deve funcionar. No início, quando o telefone for configurado, espere um minuto. Pode haver uma pequena falha no Assistente de instalação se você apressar muito rapidamente, mas ele será reiniciado automaticamente quando travar.

No meu conhecimento muito pequeno de como o CyanogenMod e a Criptografia Android funcionam, acho que durante o formato ele exclui alguns arquivos importantes do Cyanogen ou Android, o que impede a inicialização.

Andrei Viitel
fonte
1

A criptografia não funcionou no meu telefone (SGS5; CM13, TWRP 3.0.2-2) - sempre recebi uma tela preta.

Como não queria usar comandos de shell, encontrei outra maneira:

Eu tinha o SuperSU instalado, eu o desinstalei no aplicativo e depois atualizei o SU-Remover .

Depois disso, pude usar a criptografia no menu.

Atenção:

  • A criptografia excluiu todos os meus dados e aplicativos (incluindo arquivos no SD interno), então faça um backup primeiro !
  • Após a criptografia, restava apenas 2 GB de espaço interno (normalmente 11 GB) - tive que fazer uma limpeza completa (também removendo o próprio Cyanogenmod), reinstalar o Cyanogenmod e outra tentativa de criptografia para recuperar meu espaço.
  • Você também precisa reativar o root, usei BETA-SuperSU-v2.68-20160228150503 para isso (flash com twrp).
hinneLinks
fonte