CyanogenMod 12 및 12.1 '전화기 암호화'설정이 손상 되어 꽤 오랫동안 사용되었습니다. 다른 방식으로 전화를 암호화하는 방법이 있습니까? 암호화 된 / data 디렉토리를 사용하여 CM을 전화기에 사이드로드 할 수 있습니까? 데이터를 안전하게 유지하는 다른 방법이 있습니까? 내가 작업하고있는 기기는 Verizon LG G3입니다.
CyanogenMod 12 및 12.1 '전화기 암호화'설정이 손상 되어 꽤 오랫동안 사용되었습니다. 다른 방식으로 전화를 암호화하는 방법이 있습니까? 암호화 된 / data 디렉토리를 사용하여 CM을 전화기에 사이드로드 할 수 있습니까? 데이터를 안전하게 유지하는 다른 방법이 있습니까? 내가 작업하고있는 기기는 Verizon LG G3입니다.
답변:
쉘에서 사용자 데이터 파티션을 암호화하는 데 사용할 수있는 하위 레벨 명령이 있습니다. 고지 사항 / 경고 : 다음 지침에 따라 데이터가 지워지고 필요한 경우 백업해야합니다.
다음 단계를 수행, 당신은 해야 데이터 파티션을 초기화 할 수 있습니다 그것은 나중에 (공장 초기화 유사) 암호화가 :
adb root
다음으로 루트 쉘을 입력하십시오 adb shell
.adb logcat
다른 쉘 을 호출 하여 로그를 감시하십시오 .이 명령을 입력하고 비밀번호를 입력 한 후 Enter를 누르십시오. 실제로 비밀번호가 설정됩니다. 이 명령은 한 줄의 입력 ( head -1
)을 읽고 Enter ( tr -d '\n'
) 에서 후행 줄 바꿈을 제거하고 16 진 표현 ( 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
16 진수 단일 키를 키로 허용하는 옵션입니다. 비밀번호는 따라서 경우 foo
, 다음 16 진수 표현이다 666f6f
( f
이다 66
, 진수에 o
있다 6f
, 참조 http://www.asciitable.com/ ). 이에 대한 명령은 다음과 같습니다.
vdc cryptfs enablecrypto wipe password 666f6f
메타 데이터 저장을위한 별도의 파티션이있는 Nexus 5 (코드 이름 망치 머리, 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가 매우 빠르게 돌아 왔으며 "암호화"설정에 장치가 암호화 된 것으로 표시되지 않았습니다. 그런 다음 update에 제공된 명령을 적용 했지만 여전히 작동하지 않습니다. 그런 다음 데이터 파티션의 크기 를 줄이고 성공적으로 암호화했습니다. 즉
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
.
현재 CM12.1 2015년 10월 15일 대답 Lekensteyn에 의해 더 이상 작동하지 않습니다.
분명히 mkfs.f2fs 파일 시스템을 만드는 데 필요한에서 이동되었습니다 /system/bin/
에/sbin/
또한 SELINUX와 경쟁해야합니다. 즉, 몇 가지 추가 단계를 수행해야합니다.
adb 루트
adb 쉘
setenforce 0
마운트 -oremount, rw / 시스템
ln -s /sbin/mkfs.f2fs /system/bin/mkfs.f2fs
vdc cryptfs enablecrypto 와이프 암호 666f6f
Nubia Z7 Max, NX505J 전화를 사용한 다른 업데이트 CM13 2016 년 1 월 9 일 빌드
ln -s /sbin/mkfs.f2fs /system/bin/mkfs.f2fs
파일이 다시 여기에 있으므로이 명령 ( )은 더 이상 필요하지 않습니다. 심볼릭 링크를 만들 필요가 없습니다.
이 명령은 더 이상 HEX에있을 필요가 없으며 16 진수를 입력하면 PW가 16 진수가됩니다.
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
하고 루트 액세스를 확인 하십시오 .setenforce 0
6 시간 동안 정신적 고통과 땀을 흘린 후에 나는 나를 위해 일한 해결책을 발견했을 수도 있습니다. 그리고 그것은 사고이기도했다. CyanogenMod 13.0 및 Android 6.0.1이 설치된 Samsung S4 Mini 에서이 작업을 수행했습니다. 여기서 중요한 핵심 요소는 전화가 이전에 루팅되었을 때 전화가 전혀 작동하지 않기 때문에 깨끗한 전화 (새 펌웨어 및 루팅되지 않은)에서 시작한 것입니다.
나는 Firelord와 Lekensteyn의 솔루션을 문제에 사용했지만 명령에서 한 줄을 잊어 버렸습니다.
내가 한 방법은 다음과 같습니다.
나는 켜져 안드로이드 디버깅 및 루트 액세스 에 만 ADB 에서 개발자 옵션 .
ADB 명령 프롬프트에서 adb root
and adb shell
명령을 사용했습니다 . 그 후 다른 ADB 명령 프롬프트를 열고 명령을 사용했습니다 adb logcat
.
첫 번째 ADB 셸에서 나는 setenforce 0
그 이후로 갔다 vdc cryptfs enablecrypto wipe password YOUR-PASSWORD
.
중요 공지 : password 명령은 사용중인 Android 버전과 다를 수 있습니다. 당신이 사용하는 경우 안드로이드 5.X를 , 당신은 해야한다 사용 진수 시스템을합니다 (대하 라인에서 16 진수 값의 Hx 라인에 암호의 상징이다). Android 6.X를 사용하는 경우 YOUR-PASSWORD는 입력 한 비밀번호입니다.
알다시피 mount -oremount,rw /system
명령 을 사용하는 것을 잊었습니다 . 그 후 화면이 검게 변합니다. 내가 보았을 때, 로그가있는 ADB 쉘이 중지되고 완료 된 후 전화를 재부팅했습니다. 그러나 모든 사람에게 문제는 CyanogenMod 가로 드되지 않는다는 것입니다. 그리고 나는 그것을 매우 쉽게 고칠 수있었습니다.
거기 당신은 간다, 그것은 작동합니다. 처음에는 전화가 설정되면 잠시 기다리십시오. 너무 빨리 돌진하면 설치 마법사가 약간 충돌 할 수 있지만 충돌이 발생하면 자동으로 다시 시작됩니다.
CyanogenMod와 Android Encryption이 작동하는 방식에 대한 아주 작은 지식으로 포맷 중에 중요한 Cyanogen 또는 Android 파일을 삭제하여 부팅을 중지시키는 것으로 생각합니다.
휴대 전화에서 암호화가 작동하지 않습니다 (SGS5; CM13, TWRP 3.0.2-2). 나는 항상 검은 색 화면을 받았습니다.
쉘 명령을 사용하고 싶지 않았으므로 다른 방법을 찾았습니다.
SuperSU를 설치하고 앱에서 제거한 다음 SU-Remover 를 플래시했습니다 .
그 후 메뉴에서 암호화를 사용할 수있었습니다.
경고: