MTK 8.1 uncrypt流程
2019-04-28 14:31:37 0 举报
描述了Android 8.1平台解密的流程,方便学习记录。
作者其他创作
大纲/内容
ShutdownThread.beginShutdownSequence(context);
ShutdownThread.uncrypt();
重启
成功返0,失败返1
设置重启进度条
否
recovery.img依靠这个文件找到位于data分区的升级包CACHE_BLOCK_MAP = \"/cache/recovery/block.map\";
ShutdownThread.sInstance.start();开启线程,执行run方法
走到uncrypt.cpp,执行main函数
filename = \"@/cache/recovery/block.map\";final String filenameArg = \"--update_package=\" + filename + \"\\";final String localeArg = \"--locale=\" + Locale.getDefault().toLanguageTag() + \"\\";String command = filenameArg + localeArg;
注意
成功返回0
通过init建立一个socket连接,使得uncrypt和system_server可以通信
这个程序将会为分区的文件产生一系列的block块,使得不用挂载此分区便可以使用 block devices 读取此文件内容,最后得到的是称为\"block map\"的东西,recovery可以读取这个block map 文件并获取这个文件的数据作为升级包
RecoverySystemService.setupBcb(command)
SystemProperties.set(\"ctl.start\
// read next block to tail if (font color=\"#ff3333\
展示进度条,开启一个新线程进行解密
调用
/frameworks/base/services/core/java/com/android/server/power/ShutdownThread
PowerManager.reboot(PowerManager.REBOOT_RECOVERY_UPDATE);
返回true
\"block map\
向BCB中写入命令,使得重启进入recovery
/frameworks/base/services/core/java/com/android/server/power/PowerManagerService.java
成功返回true
是否有重启进度条(mRebootHasProgressBar)
init.rc
调用PowerManagerService.lowLevelShutdown(recovery);重启
通过解析fstab判断(data)分区是否加密,*encrypted = true; 是否支持加密, *encryptable = true;
上层应用
sInstance.mProgressDialog = showShutdownDialog(context);
RecoverySystem.setupBcb(command)
frameworks/base/core/java/android/os/RecoverySystem.java
是
/frameworks/base/core/java/android/os/PowerManager.java
/frameworks/base/services/core/java/com/android/server/RecoverySystemService.java
0 条评论
回复 删除
下一页