[简单]记一次逆向去某学习机的ADB和APP安装限制
——可泺[luò]KoCleo
经常玩机捡各种垃圾安卓设备的我,一次入手了一台叫T1的MP4,美名其曰学习机。
几十到我手上了,很明显,厂商大概是死了的。
| 配置类型 |
参数 |
| RAM |
2GB |
| ROM |
16GB |
| 屏幕分辨率 |
720P |
| 后置摄像头 |
800W |
| TF扩展 |
支持 |
一上手,当即准备打开USB调试。开发者选项打开没问题,可进去,发现,USB调试开关置灰了。
好吧,没问题。顺便SP Flash Tool回读下字库cache分区前数据(这样速度快,不读冗余部分)之后使用WWR MTK切割一下分区出来就好了。
另外这里着重推荐 martin313 大佬改的WWR MTK,去除了所有未捐赠倒计时等待及广告,非常厉害好用!
修改boot的default.prop将adb默认开关打开(详情我其他文章),刷回,即可。
开机,授权,ADB正常,可是...安装软件却报错
没问题,换一个。还是报错...
看来是厂商在framework做了限制。
根据安卓7.1的APP安装流程,APK传入后最终会跑到PackageManagerServer那执行安装,位于/system/framework/services.jar里面。一般厂商都会对ROM预装APP和组件进行ODEX化以用体积换性能,解包该学习机system镜像,果然发现framework下的jar都只是各1kb的壳,实际代码在oat的odex里面。
将services.odex负优化为dex,即可进行反编译操作(这边笔者用MT管理器),一键转换odex -> dex。
另外ADB安装失败一般会返回一些错误信息,这些错误信息都会对应一个id方便回调,但是本次adb install 报错很明显为厂商自己写的,这种就好处理了,一般我会直接去services里直接搜索关键字。
这时候用一个工具——ClassyKitchen,导入system&boot在ROM那一栏,点deodex即可。
有些时候直接转services.odex打开会有依赖错误导致无法反编译,framework全部deodex是最稳妥的。
DeOdex后,直接把生成的services.jar拖进JADX,搜索报错关键字
"app is not in the whitelist"
很快就搜索到了
双击打开,限制条件判断就显而易见了
就算看不懂也没关系,一般厂商会留个prop或settings配置项,如这里SystemProperties开头的就是获取prop配置了(在system/build.prop文本文件里面的系统配置文件),所以,根据条件判断,把这个改成1就可以绕过限制了(吐槽一下,不用Boolean用int)。
修改这个配置文件有多种方法:
1.修改system/build.prop,添加sys.apk.install=1
2.ADB执行adb shell setprop sys.apk.install 1(前缀不能是ro.,有时候要su执行否则不生效)
3.修改boot镜像/default.prop,添加sys.apk.install=1(我比较崇尚,体积最小化,只需发布boot补丁即可,如ADB开启Magisk默认授权shell su也可以加入)
setprop临时测试,返回success,成功
好了,另外推荐个简单的办法,直接搜索关键字Setting&prop也可以暴力搜索出可能的调试值。但是并不是所有厂商都这么好心,还有一大部分写死在java,不留“后门”,下次我们唠一下如何反编译smail去除不同情况下的校验(不过这里应该人均会)。