如何加密运行CyanogenMod 12.1的设备?


Answers:


6

在外壳程序中可以使用较低级别的命令来加密用户数据分区。免责声明/警告:以下说明将擦除您的数据,并确保在需要时进行备份。

按照以下步骤操作,您应该可以擦除数据分区并在以后对其进行加密(类似于恢复出厂设置):

  1. 正常启动手机(恢复无法正常工作,或者我遇到了其他问题)。
  2. 确保已启用USB调试模式(adb)和 ADB的根访问权限
  3. 输入root shell,adb root然后输入adb shell
  4. 可选:通过调用adb logcat另一个shell来查看日志。
  5. 输入此命令,输入密码,然后按Enter。这实际上将设置您的密码。此命令读取输入(head -1)的一行,从Enter(tr -d '\n')删除尾随的换行符,并将其转换为十六进制表示形式(hexdump ...)。如果它看起来很吓人,或者您不确定此命令的作用,请参见下文。

    vdc cryptfs enablecrypto wipe password $(head -1 | tr -d '\n' | hexdump -ve '1/1 "%.2x"')
    
  6. 如果一切正常,您的设备将设置密钥并重新启动以完成加密。

vdcvold(卷守护程序)通信的上述命令(“卷守护程序客户端” )具有一些cryptfs用于加密的子命令。该enablecrypto子命令有两种模式:wipe(清除/data完全)和inplace(据说将加密,而复制原来的/data容器内)。

然后,从Android 5.0开始有四个选项,其中一个选项是password接受单个十六进制序列作为键。因此,如果你的密码是foo,那么十六进制表示的666f6ff66十六进制,o6fhttp://www.asciitable.com/)。该命令是:

vdc cryptfs enablecrypto wipe password 666f6f

在Nexus 5(代号为Hammerhead,运行cm-12.1-20150814)上进行了测试,该设备具有用于存储元数据的单独分区。这是很重要的是,用户数据分区具有encryptable标志设置后跟一个路径,一个分区或特殊字符串footer。我/fstab.hammerhead文件中的(缩写)行:

/dev/block/platform/msm_sdcc.1/by-name/userdata / data ext4 ...,检查可加密 = /dev/block/platform/msm_sdcc.1/by-name/metadata

如果存在特殊字符串footerencryptable=footer),则将数据分区末尾的16 KiB用于存储加密元数据。

有关更多阅读,请参阅:


附录:从我执行加密命令起直至完成并重新引导的logcat摘录(末尾忽略无关的图形消息)。请注意,此Nexus 5具有硬件加速加密(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感谢您抽出宝贵的时间来撰写本文。这个周末我将不得不花一些时间来进行设置。以防万一,我可以擦除TWRP中的所有内容并重试,对吗?
Zlatty

1
是的,它只是数据分区。我在实验时故意擦了几次。
Lekensteyn

2
LPT:从6.0(Marshmallow)开始,vdc确实使用未将ascii编码为参数(= cleartext)的密码。一旦发现这件事,使用ASCII表进行练习就非常好-在要求我输入启动密码后的几分钟。由于我的错误,我不得不将密码输入ASCII
Denys Vitali

4

对我来说,原始答案没有按预期工作。看起来好像已成功加密,但是UI很快恢复,并且“ Encryption”设置未显示设备已加密。然后,我应用了更新中提供的命令,但仍然无法正常工作。然后,我减小了数据分区的大小,并成功加密了。即

mount | grep data查找数据分区的实际块设备。假设它是/dev/block/mmcblk0p26

umount /data 为外部工具工作。

e2fsck -f -p /dev/block/mmcblk0p26 不会给即将到来的调整大小带来麻烦。

tune2fs -l /dev/block/mmcblk0p26 获取块计数。假设它是3057395

resize2fs /dev/block/mmcblk0p26 3057375,即从原始块数中减去足够的数量(例如20)。

e2fsck -f -p /dev/block/mmcblk0p26 为我找到了错误放置的inode。

我还需要挂载该/system分区才能使用resize2fs。在我的系统上,该二进制文件与64位版本的libc链接,但是使用的TWRP我似乎没有提供该文件。所以我需要在命令前面加上env LD_LIBRARY_PATH=/system/lib64



2

2015年1月15日CM12.1起Lekensteyn答案不再有效。

显然,mkfs.f2fs这是创建文件系统所需要的,已经从移动/system/bin//sbin/

另外,我们必须与SELINUX竞争。这意味着我们需要执行几个附加步骤:

  1. 亚行根
  2. 亚行外壳
  3. setenforce 0
  4. 挂载-oremount,rw / system
  5. ln -s /sbin/mkfs.f2fs /system/bin/mkfs.f2fs
  6. vdc cryptfs enablecrypto擦除密码666f6f

2

另一个更新- 2016年1月9日 使用努比亚Z7 Max和NX505J手机构建CM13

ln -s /sbin/mkfs.f2fs /system/bin/mkfs.f2fs不再需要此命令(),因为文件再次位于此处。无需创建符号链接。

此命令不再需要使用十六进制,并且如果输入十六进制,则PW将为十六进制。
cryptfs enablecrypto wipe password 666f6f-这从字面上对我的创建密码666f6ffoo

我仍在研究此问题,因为我已经超出了元数据所需的额外块。现在,我需要克服以下事实:GUI和手动命令对两者进行加密都会导致加密仅在一个引导周期内才可行。成功加密后,我会报告。

现在,我进行加密,并且可以正常工作,并且第一次启动时,它说手机已加密。使用TWRP,我可以确认/ data已加密,但是我在TWRP中尝试的HEX和ASCI密码均无效。下次重新启动时,Android OS无法完全启动CM13。它确认我具有正确的加密密码,然后我仅获得1次加密启动。在第一次成功的加密启动后,此后它将锁定在启动周期的动画阶段。安全最佳做法现在建议使用AES256电话加密。


系统在CM13中使用AES256电话加密的可靠性如何?我开了一个关于这里的事情线程android.stackexchange.com/q/134981/9897
莱奥列奥波尔德·赫兹준 영

2

在运行Cyanogenmod 12.1的Moto X 2013上,我也无法对其进行加密。最后,我成功完成了以下步骤:

  1. 在电话的“开发人员设置”中启用root权限并打开外壳(终端应用程序,也可以在“开发人员设置”中启用)
  2. 输入su,然后确认root用户访问权限
  3. 输入 setenforce 0
  4. 现在打开“设置”,转到“ 安全性,然后选择“加密电话”。然后,Android将重新启动并开始对手机进行加密。

我通过结合Art的答案论坛主题来获得此解决方案。


没为我工作。顺便说一句,您可以在此之后将SELinux状态设置回1吗?
Marc.2377 '16

1

经过6小时的精神痛苦和汗水,我可能偶然发现了对我有用的解决方案。这也是一次意外。我为带有CyanogenMod 13.0和Android 6.0.1的Samsung S4 Mini做到了这一点。这里重要的关键因素是,我是从干净的电话(新的固件且未扎根)开始的,因为当电话先前已扎根时,电话根本就无法工作。

我使用了Firelord和Lekensteyn的解决方案来解决问题,但是我设法从命令中忘记了一行。

这是我的做法:

  1. 在“ 开发人员选项”中打开了Android调试和对ADB的Root访问权限

  2. 在ADB命令提示符中,我使用了adb rootand adb shell命令。之后,我打开了另一个ADB命令提示符并使用了该adb logcat命令。

  3. 在第一个亚行壳,我去向前setenforce 0和之后vdc cryptfs enablecrypto wipe password YOUR-PASSWORD

重要说明: password命令可能与您所使用的Android版本不同。如果您使用的是Android 5.X,则必须使用十六进制系统(在Chr行中,密码中的符号是Hx行中的十六进制值)。如果您使用的是Android 6.X,则您的密码将是您在此处输入的密码。

如您所知,然后我忘记使用该mount -oremount,rw /system命令。之后,我的屏幕将变黑。当我看到带有日志的ADB Shell停止并完成后,我重新启动了电话。但是对于每个人来说,问题是CyanogenMod无法加载。我设法很容易地解决了这个问题:

  1. 按住Vol Up和Home&Power,直到TWRP启动。它将要求您提供加密密码。
  2. 使用其他Google Apps 进行CyanogenMod安装部分(指南的第二部分)。
  3. 完成后,然后重新启动设备。当它启动时,将需要一段时间。首先它将启动电话,然后将询问加密密码,然后需要一段时间才能启动。

到那里,它应该可以工作。首先,当出现电话设置时,请等待一分钟。如果赶紧赶紧安装向导,可能会有些崩溃,但崩溃时它将自动重新启动。

就我对CyanogenMod和Android加密的工作原理了解甚少,我认为在格式化期间,它会删除一些重要的Cyanogen或Android文件,从而阻止了它的启动。


1

我的手机(SGS5; CM13,TWRP 3.0.2-2)无法进行加密-我总是黑屏。

我不想使用shell命令,所以找到了另一种方法:

我安装了SuperSU,然后在应用程序中将其卸载,然后刷新了SU-Remover

之后,我可以使用菜单中的加密功能。

警告:

  • 加密删除了我所有的数据和应用程序(包括内部SD上的文件),因此请先进行备份
  • 加密后,我只剩下2 GB的内部空间(通常为11 GB)-我必须进行完全擦除(还删除了Cyanogenmod本身),重新安装Cyanogenmod并进行另一次加密尝试以恢复我的空间。
  • 您还必须重新激活根,我为此使用了BETA-SuperSU-v2.68-20160228150503(带有twrp的闪存)。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.