记一次定制机的破解

最近有朋友公司发了一台老旧的安卓机,但开机后强行要求注册设备,经久失修也不知道如何注册,无法正常使用,让我来帮忙看看,最后帮他搞定了。

背景

第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
2
3
4
➜  ~ adb shell
HWALP:/ $ dumpsys activity top | grep ACTIVITY
ACTIVITY com.huawei.android.launcher/.unihome.UniHomeLauncher 30f75bc pid=2702
ACTIVITY com.justsy.mdmsys/.activity.FloatActivity d0cc0b8 pid=2537```

哦,原来是个mdm(Mobile Device Manager),给他 force-stop 试试看。

1
2
3
4
5
HWALP:/ $ am force-stop com.justsy.mdmsys
HWALP:/ $ dumpsys activity top | grep ACTIVITY
ACTIVITY com.huawei.android.launcher/.unihome.UniHomeLauncher 30f75bc pid=2702
ACTIVITY com.justsy.mdmsys/.activity.FloatActivity d0cc0b8 pid=2537

犯了,这个包停不掉,给他卸载试试。

1
2
HWALP:/ $ pm uninstall com.justsy.mdmsys
Failure [DELETE_FAILED_INTERNAL_ERROR]

额,卸载不掉,这是个什么uid这么牛逼?

1
2
HWALP:/ $ ps -A | grep com.justsy
system 2537 524 2964700 125436 0 0 S com.justsy.mdmsys

原来是个 system 进程,那有点难了。普通安卓选手这时候就懵逼了,但恰好我前些天新学了一招,shell权限可以禁用 APP,新版MIUI玩游戏会限制帧率,网上有一种方案就是使用 shell 来禁用掉"joyose"和"电量和性能",这样系统读不到数据就不会限制帧率了。效果示意:

1
2
HWALP:/ $ pm disable-user com.justsy.mdmsys
Package com.justsy.mdmsys new state: disabled-user

成功,效果如图

哦吼,搞定了,锁机APP被禁用掉,手机可以正常使用了。

凭什么是system?

这里还有一个疑点,为什么这种第三方 APP 会有 system 的权限?

出于好奇,我把 APP 拖了出来,它确实在 /system 分区。

1
2
3
4
5
6
7
8
➜  mate10 dp3 pull_package com.justsy.mdmsys
/system/app/MobileAssistant/MobileAssistant.apk: 1 file pulled, 0 skipped. 16.2 MB/s (594306 bytes in 0.035s)
pull vdex success
[INFO] Processing 1 file(s) from MobileAssistant.vdex
[INFO] 1 out of 1 Vdex files have been processed
[INFO] 1 Dex files have been extracted in total
[INFO] Extracted Dex files are available in '.'
got a dex

查看签名,确实是华为官方的签名,那它有用system权限也是正常的。

稍微搜索后,发现开发者是嘉兴嘉赛信息技术有限公司,合作伙伴有华为,那就更合理了,APP 开发者委托华为进行机型定制,由华为出 ROM 包并把 APP 放进去,整包使用华为的签名,进行刷机。所以理论上,这台手机是可以刷到华为官方 ROM 的,我们的“下策”也是可以实施的。

想看看里面的逻辑,看看有没有后门,字符串被混淆了,懒得看了,有兴趣的自己看看,文件放在了github上,https://github.com/LeadroyaL/attachment_repo/tree/master/justsy