CyanogenMod 12和12.1 “加密电话”设置已损坏,并且已经存在了一段时间。有什么方法可以以其他方式加密电话吗?CM可以侧面加载到带有加密的/ data目录的电话上吗?还有其他方法可以确保您的数据安全可靠吗?我正在使用的设备是Verizon LG G3。
CyanogenMod 12和12.1 “加密电话”设置已损坏,并且已经存在了一段时间。有什么方法可以以其他方式加密电话吗?CM可以侧面加载到带有加密的/ data目录的电话上吗?还有其他方法可以确保您的数据安全可靠吗?我正在使用的设备是Verizon LG G3。
Answers:
在外壳程序中可以使用较低级别的命令来加密用户数据分区。免责声明/警告:以下说明将擦除您的数据,并确保在需要时进行备份。
按照以下步骤操作,您应该可以擦除数据分区并在以后对其进行加密(类似于恢复出厂设置):
adb root
然后输入adb shell
。adb logcat
另一个shell来查看日志。输入此命令,输入密码,然后按Enter。这实际上将设置您的密码。此命令读取输入(head -1
)的一行,从Enter(tr -d '\n'
)删除尾随的换行符,并将其转换为十六进制表示形式(hexdump ...
)。如果它看起来很吓人,或者您不确定此命令的作用,请参见下文。
vdc cryptfs enablecrypto wipe password $(head -1 | tr -d '\n' | hexdump -ve '1/1 "%.2x"')
vdc
与vold
(卷守护程序)通信的上述命令(“卷守护程序客户端” )具有一些cryptfs
用于加密的子命令。该enablecrypto
子命令有两种模式:wipe
(清除/data
完全)和inplace
(据说将加密,而复制原来的/data
容器内)。
然后,从Android 5.0开始有四个选项,其中一个选项是password
接受单个十六进制序列作为键。因此,如果你的密码是foo
,那么十六进制表示的666f6f
(f
是66
十六进制,o
则6f
见http://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
如果存在特殊字符串footer
(encryptable=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
对我来说,原始答案没有按预期工作。看起来好像已成功加密,但是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
。
另一个更新- 2016年1月9日 使用努比亚Z7 Max和NX505J手机构建CM13
ln -s /sbin/mkfs.f2fs /system/bin/mkfs.f2fs
不再需要此命令(),因为文件再次位于此处。无需创建符号链接。
此命令不再需要使用十六进制,并且如果输入十六进制,则PW将为十六进制。
cryptfs enablecrypto wipe password 666f6f
-这从字面上对我的创建密码666f6f
不foo
我仍在研究此问题,因为我已经超出了元数据所需的额外块。现在,我需要克服以下事实:GUI和手动命令对两者进行加密都会导致加密仅在一个引导周期内才可行。成功加密后,我会报告。
现在,我进行加密,并且可以正常工作,并且第一次启动时,它说手机已加密。使用TWRP,我可以确认/ data已加密,但是我在TWRP中尝试的HEX和ASCI密码均无效。下次重新启动时,Android OS无法完全启动CM13。它确认我具有正确的加密密码,然后我仅获得1次加密启动。在第一次成功的加密启动后,此后它将锁定在启动周期的动画阶段。安全最佳做法现在建议使用AES256电话加密。
在运行Cyanogenmod 12.1的Moto X 2013上,我也无法对其进行加密。最后,我成功完成了以下步骤:
su
,然后确认root用户访问权限setenforce 0
经过6小时的精神痛苦和汗水,我可能偶然发现了对我有用的解决方案。这也是一次意外。我为带有CyanogenMod 13.0和Android 6.0.1的Samsung S4 Mini做到了这一点。这里重要的关键因素是,我是从干净的电话(新的固件且未扎根)开始的,因为当电话先前已扎根时,电话根本就无法工作。
我使用了Firelord和Lekensteyn的解决方案来解决问题,但是我设法从命令中忘记了一行。
这是我的做法:
我仅在“ 开发人员选项”中打开了Android调试和对ADB的Root访问权限。
在ADB命令提示符中,我使用了adb root
and adb shell
命令。之后,我打开了另一个ADB命令提示符并使用了该adb logcat
命令。
在第一个亚行壳,我去向前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无法加载。我设法很容易地解决了这个问题:
到那里,它应该可以工作。首先,当出现电话设置时,请等待一分钟。如果赶紧赶紧安装向导,可能会有些崩溃,但崩溃时它将自动重新启动。
就我对CyanogenMod和Android加密的工作原理了解甚少,我认为在格式化期间,它会删除一些重要的Cyanogen或Android文件,从而阻止了它的启动。
我的手机(SGS5; CM13,TWRP 3.0.2-2)无法进行加密-我总是黑屏。
我不想使用shell命令,所以找到了另一种方法:
我安装了SuperSU,然后在应用程序中将其卸载,然后刷新了SU-Remover。
之后,我可以使用菜单中的加密功能。
警告: