记一次定制机的破解
最近有朋友公司发了一台老旧的安卓机,但开机后强行要求注册设备,经久失修也不知道如何注册,无法正常使用,让我来帮忙看看,最后帮他搞定了。
背景
第1天,如图所示,朋友说无论如何操作都跳不出去,手机无法使用。
第2天,朋友问我能不能刷机,我说等我有空给你看看。然后他自己进入了recovery模式,恢复出厂设置,然后就能正常使用了。
第3天,朋友说手机没电重启了,重启后再次触发了该界面。再次恢复出厂设置,但是没有效果。我说好,给我留着,我慢慢看看。
思路
分析这个表现,只能在某个APP内活动,猜测:可能是该APP覆盖了界面,接管了各种操作,表现出来就是和锁机软件一模一样,用户无法使用。
恢复出厂设置后就好了,猜测:它很可能是一个APP,是后期被安装上去的。(我本以为这时候就万事大吉了)
重启后再次触发,猜测:这个APP可能有开机自启动,需要注意。
再次恢复出厂设置,无法解决,猜测:卧槽,有挂!
经过上面的猜想,我有上中下三策:
上策:众所周知啊,很多有问题的设备我摸一摸就会恢复正常,万一自己就好了呢?
中策:找到这个APP,卸载掉。(可能没这个机会)
下策:找到ROM包,进入bootloader刷机。(可能系统签名会校验失败)
实操
上策?高兴太早
这是一台华为mate10,属于大厂常见机型,唯一区别在于它开机后先展示 "picc",后展示 "Huawei",看起来定制程度很高。
我开机后,确实没有看到桌面,直接进入了锁机APP里。
想尽各种办法,进入了recovery,恢复出厂设置后,重启,此时出现了初始化引导,火速完成后,桌面可以正常进入了,哦吼,果然还得是我,很多设备我摸一摸就好了。高兴了还没一分钟,锁机APP又来了,好吧,“上策”直接失败。
再次重启,发现可以进入桌面,但数秒后,锁机 APP 就会被启动,多次重启后亦如此,稳定hang。
中策?一线生机
这时候聪明的读者就知道了,手速快的话可以在锁机 APP 启动前把它干掉,但我没这个实力,我手慢,想到一个笨办法:既然每次开机只有几秒的操作时间,开启开发者模式,adb连进去,就可以获得无限的操作时间。
第一次开机:狂点版本号;第二次开机:迅速开启 USB 调试;第三次开机:授权 adb 调试,还好定制机没有把这个功能砍掉。
此时我已经获得一个稳定的shell,“我的双眼一片黑暗,但,我看到了更多!”
adb吧
轻瞥一眼
1 | ➜ ~ adb shell |
哦,原来是个mdm(Mobile Device Manager),给他 force-stop 试试看。
1 | HWALP:/ $ am force-stop com.justsy.mdmsys |
犯了,这个包停不掉,给他卸载试试。
1 | HWALP:/ $ pm uninstall com.justsy.mdmsys |
额,卸载不掉,这是个什么uid这么牛逼?
1 | HWALP:/ $ ps -A | grep com.justsy |
原来是个 system 进程,那有点难了。普通安卓选手这时候就懵逼了,但恰好我前些天新学了一招,shell权限可以禁用 APP,新版MIUI玩游戏会限制帧率,网上有一种方案就是使用 shell 来禁用掉"joyose"和"电量和性能",这样系统读不到数据就不会限制帧率了。效果示意:
1 | HWALP:/ $ pm disable-user com.justsy.mdmsys |
成功,效果如图
哦吼,搞定了,锁机APP被禁用掉,手机可以正常使用了。
凭什么是system?
这里还有一个疑点,为什么这种第三方 APP 会有 system 的权限?
出于好奇,我把 APP 拖了出来,它确实在 /system 分区。
1 | ➜ mate10 dp3 pull_package com.justsy.mdmsys |
查看签名,确实是华为官方的签名,那它有用system权限也是正常的。
稍微搜索后,发现开发者是嘉兴嘉赛信息技术有限公司,合作伙伴有华为,那就更合理了,APP 开发者委托华为进行机型定制,由华为出 ROM 包并把 APP 放进去,整包使用华为的签名,进行刷机。所以理论上,这台手机是可以刷到华为官方 ROM 的,我们的“下策”也是可以实施的。
想看看里面的逻辑,看看有没有后门,字符串被混淆了,懒得看了,有兴趣的自己看看,文件放在了github上,https://github.com/LeadroyaL/attachment_repo/tree/master/justsy 。