小米多看1,相当廉价的6寸电子书;配置倒是Kindle的I.MX6 Solo阳间多了:全志B300,1+16的存储,Android 8.1
而多看/墨案似乎做的很草台班子:
由于墨案的系统签名使用的是testkey,因此用户可以使用公开的testkey对自己想刷入的包进行签名,从而通过系统recovery的检测,刷入magisk,成功root,小米多看电纸书系列也是使用testkey签名,方案通用。
所以我们可以提取Boot.img用Magisk修补后给升级包签名,步骤见此
然后你就获得了一个有root权限的电子书(还可以顺带按照此指南更换锁屏与关机画面)。
但是我们的探索不止于此——前几天心血来潮在闲鱼挂了一个救砖链接,于是有人前来询问是否能解锁密码(注:如果不需要保数据,直接用PhoenixSuit刷救砖包就完事了)。
遂探寻其解锁屏幕的详细过程,用adb shell dumpsys activity得知密码输入的activity是com.android.systemui/.keyguard.KeyguardService
于是去google一通,发现原生锁屏也是这个KeyguardService。但是很明显密码输入界面不是个原生(非MD主题,也只有数字密码支持——如果用activity Launcher启动原生的锁屏密码机制会导致com.android.settings登时崩溃)
前往/system/priv-app/
抓systemUI的原始apk,然后发现android 8.0开始使用vdex,将apk里的dex直接分拆以优化性能。于是提取systemui.vdex文件,用VdexExtractor将systemui.vdex拆成原始dex文件,再用dex2jar拆回jar文件:
./d2j-dex2jar.sh /home/***/sysui/SystemUI_classes.dex |
获得SystemUI_classes-dex2jar.jar
一份,使用JD-GUI反编译jar即可。
不过并没有获取到什么太有趣的内容(也许是水平不精)。
于是继续查找,发现多看的设置(com.mgs.settings
)并非系统原生设置(com.android.settings
),而原生设置诸多内容被阉割(会直接crash),遂继续提取其vdex拆回jar文件。
对jar分析可找到setPswActivity.class
等一系列设置密码的class,而其中最有趣的一段是:
private void clickEnter() { |
着眼于 Settings.Global.putString(getContentResolver(), "mas_lock_psw", this.mySecondPsw);
由此文章可知
Settings.Global:全局系统设置,包含始终以相同方式应用于所有已定义用户的偏好设置。 应用程序可以读取这些内容,但不允许写入;与“安全”设置一样,这些设置适用于用户必须通过系统 UI 或这些值的专用 API 显式修改的首选项。常用设置项有蓝牙开关状态、adb开关状态等。
于是可得
(背景知识:android6设置数据库从/data/data/com.android.providers.settings/databases/settings.db
迁移进了/data/system/users/0/settings_global.xml
等几个xml)
virgo-perf1:/data/system/users/0 # cat settings_global.xml |grep mas |
直接写了个明文密码
甚至更好玩的是在adb里可以直接settings get global mas_lock_psw
(直接获得密码)
乃至settings put global mas_lock_psw <数字密码>
难绷之至。