众所周知,Android系统基于Linux内核,虽然Google Android已经对Linux Kernel作了很多修改,但是底层的基本架构与Linux基本一致。
在Linux系统中,对设备管控基于Device Mapper机制实现,在Android系统中,也是基于此种机制实现系统对设备的操作。通过查看Android官方文档中的描述”This is because the encryption is done by the dm-crypt layer in the kernel, which works at the block device layer“,可以知道Android系统与2.6以后的Linux Kernel一样也是在block层工作,通过Device Mapper机制中的dm-crypt实现。
在了解了Android系统与Linux系统类似之后,接下来就可以正式进入今天的主题Andorid系统上使用Cryptsetup加密存储设备,主要是对Android系统中挂载的SdCard进行加密。由于Google对Linux Kernel的阉割修改,Linux系统中的很多功能Android系统不能直接支持,所以我们可以通过adb调试,将所需要的功能编译之后push进入Android Kernel,并添加可执行权限,那么我们所需要的功能就可以在Android系统中使用了。本次所介绍的方法就是基于此种思路。
1 PC通过adb连接Android系统,我这里使用的Win7+Android AVD,emulator 一个Android系统之后,就可以直接通过adb shell连接,至于其他连接方式这里不作介绍,有疑问的读者可以通过查阅其他资料解决,网上此类资料很多。
2 使用如下命令挂载Android系统/system,并添加可读写权限。
adb shell mount -o remount,rw /system无报错说明命令/system挂载成功。我第一次挂载时,命令无效,通过重启Android AVD成功解决。
3 将已经编译好的cryptsetup通过adb shell push到Android系统中。我的cryptsetup放在当前DOS所在路径下,所以可以直接输入文件名push,其他路径下可以在cryptsetup前加入系统绝对路径,如 adb push C:/users/moonsea/desktop/android/cryptsetup /system/bin。
adb push cryptsetup /system/bin4 接下来可以通过adb连接Android系统。
adb shell5 adb连接Android系统后,运行cryptsetup命令可以发现系统提示没有可执行权限,所以需要需要进入/system/bin文件夹下给cryptsetup添加可执行权限。
cd /system/bin chmod 755 cryptsetup成功添加可执行权限之后,运行如下命令可以看到Linux环境中相同的运行提示,说明cryptsetup已经push成功。
cryptsetup --help
6 与Linux系统一样,接下来就是要查看挂载的SdCard的设备号了。Android系统中已经没有fdisk -l命令了,所以只能通过其他方式查看,我是通过通过查看文件来确定设备号的,而且在Android系统中设备号一般为“179:0”这种形式,与Linux系统下“/dev/sdb4”不同,两者的具体区别可以参见这篇BLOG。
cd /dev/block/vold
ls如果初次启动的话,这里可能只能查看到一个设备号,即只有一个“179:0”这种形式,我是通过在Android系统中先将SdCard卸载掉,然后重新挂载,再ls查看当前目录下的文件,可以看到这里新增了一个设备号,我的是“179:1”,如下图所示。如果仍然在该目录下查看不到多个设备号,可以尝试将SdCard通过Android系统重新格式化再挂载一下。
7 现在已经得到了要进行加密的设备号,接下来就可以对设备进行加密了。具体的加密过程与Linux系统下类似,这里只进行简单介绍,具体说明可以参见我的另一篇BLOG——Cryptsetup加密存储设备之一(Linux篇)。
cryptsetup -y create myEncryptedFilesystem /dev/block/vold/179:1 //建立myEncryptFilesystem逻辑设备输入加密密码进行设备加密,然后切换到mapper目录下查看新建的逻辑设备
cd /dev/mapper
ls在这里可以查看到刚才新建的myEncryptedFilesystem,接下来可以对myEncryptedFilesystem格式化建立文件系统
mkfs.ext3 /dev/mapper/myEncryptedFilesystem //文件系统创建为ext3文件系统文件系统创建后,创建相应的挂载点进行挂载就可以使用了,因为我们一开始只挂载了/system文件夹的可读写权限,所以这里在该目录下创建挂载目录
cd /system mkdir myfilesystem mount /dev/mapper/myEncryptedFilesystem /system/myfilesystem现在加密的文件系统已经创建成功了,接下来就可以进行使用了。
版权声明:本文为博主原创文章,未经博主允许不得转载。