最新要闻
- 韩国最大在野党:IAEA评估报告未验证福岛核污水安全性
- 天天动态:卖得太火 魅族20 PRO严重缺货!晨曦紫、曙光银今日开启预定
- 全球快播:9.99万价格屠夫!长安第二代UNI-T尊享型上市:入门就有骁龙8155
- 每日速读!小憩、露营、洗车模式上线 岚图梦想家发布OTA2.0版本
- 奔驰变法拉利!男子107万提新车发现竟是翻新车:退一赔三获赔428万_动态焦点
- 新资讯:盘点10款最美游戏:《最后生还者》《艾尔登法环》等入选
- 水深火热成语接龙_热字开头的成语
- 《巨齿鲨2:深渊》最新预告出炉:杰森·斯坦森、吴京大战海底怪兽
- 双泵水冷力压13900KS 310W功耗!超频三DE360水冷散热器评测:静音水泵也很重要 即时焦点
- 头条焦点:华裔学者出手!50年零进展算法难题被突破
- 不顾国内外强烈反对!日本拟最早8月核污水排海|当前观察
- 环球最资讯丨故宫门票提前7天抢不到 黄牛要价翻6倍!全国博物馆几乎都如此
- 世界简讯:突发!俄军一架战机坠毁
- 【天天速看料】火狐发布115版本更新:支持Win7/8最后版本
- 天天微资讯!女子半夜拍蚊子走出158步吓坏母亲:通过微信步数了解家人起居
- 男孩被锁车内父母心疼玻璃不愿砸 路人做好事反被责怪:网友看怒|热资讯
手机
光庭信息跌4.57% 2021上市超募11亿2022扣非降74% 时快讯
搜狐汽车全球快讯 | 大众汽车最新专利曝光:仪表支持拆卸 可用手机、平板替代-环球关注
- 光庭信息跌4.57% 2021上市超募11亿2022扣非降74% 时快讯
- 搜狐汽车全球快讯 | 大众汽车最新专利曝光:仪表支持拆卸 可用手机、平板替代-环球关注
- 视点!美国首位女总统即将诞生?拜登恐怕要提前下岗,美政坛迎来变局?
- 当前速递!用理想仪器实现更好的颗粒 德国新帕泰克亮相CPHI & PMEC China获好评
- 微粒贷怎么申请开通 开通方法如下
- 焦点简讯:心疼!这位40岁的云南缉毒警,已是满头白发
家电
当前滚动:Android Launcher apk 授信安装
对安装的apk进行校验,除了系统应用市场中下载的,其它渠道的apk都进行安装拦截,并且弹框提示。
(资料图)
首先需要把验证的证书保存在数据库本地,后面需要用到
然后注册系统广播,用于接收 apk 安装时的监听,这个广播由系统发出
新装时的
action ‘android.intent.action.PACKAGE_ADDED
替换时的 action
android.intent.action.PACKAGE_REMOVED
android.intent.action.PACKAGE_ADDED
android.intent.action.PACKAGE_REPLACED
删除时的 action
android.intent.action.PACKAGE_REMOVED
android.intent.action.PACKAGE_FULLY_REMOVED
安卓 4.0 新增了verifyPendingInstall,用于监听包管理,验证时发送广播
验证通过PackageManager.VERIFICATION_ALLOW 跟验证失败PackageManager.VERIFICATION_REJECT
在注册一个服务,用于 apk 安装接收到广播后的校验处理
接下来就是监听跟验证,首先在安装apk时会收到广播,然后可以拿到信息开启服务验证
public void onReceive(Context context, Intent intent) { Log.e(TAG, "onReceive: start"); String action = intent.getAction(); if (Intent.ACTION_PACKAGE_NEEDS_VERIFICATION.equals(action)) { Log.e(TAG, "onReceive: " + "ACTION_PACKAGE_NEEDS_VERIFICATION"); Intent verification = new Intent(); verification.setAction(VerifyConstant.VERIFY_SERVICE_ACTION); verification.setPackage(VerifyConstant.VERIFY_SERVICE_PACKAGE_NAME); Bundle sExtras = new Bundle(intent.getExtras()); sExtras.putInt(VerifyManager.Cmd.CMD_KEY, VerifyManager.Cmd.CMD_VERIFY); String path = intent.getData().getPath(); Log.e(TAG, "path: " + path); if (!path.endsWith(VerifyConstant.INSTALL_FILE_SUFFIX)) { path = path + "/base.apk"; } sExtras.putString("PACKAGE_PATH", path); verification.putExtras(sExtras); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { AppPlugins.appCtx().startForegroundService(verification); } else { AppPlugins.appCtx().startService(verification); } return; } if (Intent.ACTION_PACKAGE_VERIFIED.equals(action)) { Log.d(TAG, "onReceive: " + "ACTION_PACKAGE_VERIFIED"); return; } }
服务VerifyServiceextends IntentService
系统校验时间默认为10秒超时,如果下载的是大型游戏可能会anr,所以需要默认改下超时时间
并且在服务中需要弹框处理,这两个操作放到 onCreate 中
@Override public void onCreate() { super.onCreate(); Log.d(TAG, "onCreate"); Settings.Global.putLong(getContentResolver(), PACKAGE_VERIFIER_TIMEOUT, MAX_VERIFICATION_TIMEOUT); VerifyUtils.setVerifyInstallListener(isAllow -> { Log.d(TAG, "setVerifyInstallListener isAllow : " + isAllow); if (!isAllow) { ArchTaskExecutor.getInstance().postToMainThread(this::showInstallTipDialog); } }); }
然后处理具体的验证逻辑
@Override protected void onHandleIntent(@Nullable Intent intent) { if (intent == null) return; if (intent.getExtras() == null) return; int cmd = intent.getIntExtra(VerifyManager.Cmd.CMD_KEY, 0); switch (cmd) { case VerifyManager.Cmd.CMD_VERIFY: { Bundle extras = intent.getExtras(); int id = extras.getInt(PackageManager.EXTRA_VERIFICATION_ID); String pkgName = extras.getString(EXTRA_VERIFICATION_PACKAGE_NAME); String packagePath = extras.getString("PACKAGE_PATH", null); String installerPkg = extras.getString(EXTAR_VERIFICATION_INSTALLER_PKG); PackageManager pm = this.getPackageManager(); boolean isSystemApp = VerifyUtils.isSystemApp(pkgName); Log.e(TAG, "isSystemApp " + isSystemApp); if (isSystemApp) { pm.verifyPendingInstall(id, PackageManager.VERIFICATION_ALLOW); if (DEBUG) { Log.e(TAG, pkgName + " : System App ALLOW"); } return; } boolean isOverlayApp = VerifyUtils.isOverlayApp(packagePath); Log.e(TAG, "isOverlayApp " + isOverlayApp); if (isOverlayApp) { pm.verifyPendingInstall(id, PackageManager.VERIFICATION_ALLOW); if (DEBUG) { Log.e(TAG, pkgName + " : Overlay App ALLOW"); } return; } Log.e(TAG, "installerPkg " + installerPkg); if (DEVICESERVICE_PACKAGE_NAME.equals(installerPkg) && VerifyUtils.isSystemPackage(DEVICESERVICE_PACKAGE_NAME)) { pm.verifyPendingInstall(id, PackageManager.VERIFICATION_ALLOW); if (DEBUG) { Log.e(TAG, pkgName + " : Debugtool install App ALLOW"); } return; } String sha1 = getMd5VerifyResult(packagePath); boolean isLegal = VerifyUtils.isLegal(sha1, pkgName); Log.e(TAG, "isLegal " + isLegal); if (isLegal) { pm.verifyPendingInstall(id, PackageManager.VERIFICATION_ALLOW); if (DEBUG) { Log.e(TAG, pkgName + " : Legal App ALLOW"); } return; } VerifyUtils.verifyOnlineSign(id, packagePath, pkgName, sha1); return; } } }}
具体验证方法
public static void verifyOnlineResp(int id, String localSha1, String pkgName, SignatureResp signatureResp) { String signText = signatureResp.getSign(); int signType = signatureResp.getSignType(); String sha1 = signatureResp.getApkSign(); String content = generateContent(signType, pkgName, sha1); boolean verifyResult = VerifyUtils.verifySign(content, signText, publicKeyStr); if (verifyResult) { SignEntity signEntity = new SignEntity(pkgName, sha1, content, signType, signText); AppDatabase.getInstance().signDao().insertSignSync(signEntity); } reportVerifyResult(id, pkgName, verifyResult); } public static void reportVerifyResult(int id, String pkgName, boolean isAllow) { int resultCode = isAllow ? PackageManager.VERIFICATION_ALLOW : PackageManager.VERIFICATION_REJECT; String resultStr = isAllow ? "Allow" : "Reject"; AppPlugins.appCtx().getPackageManager().verifyPendingInstall(id, resultCode); if (listener != null) { listener.verifyResult(isAllow); } Log.e(TAG, pkgName + " : " + resultStr); }
关键词:
当前滚动:Android Launcher apk 授信安装
华为云GaussDB圈层活动走进香港,以技术创新构筑金融政企数智发展基石
基于袋鼠云实时开发平台开发 FlinkSQL 任务的实践探索
一种基于DeltaE(CIE 1976)的找色算法Cuda实现_即时看
世界通讯!复苏中的中国经济怎么看?2023上财宏观论坛在沪举办
韩国最大在野党:IAEA评估报告未验证福岛核污水安全性
天天动态:卖得太火 魅族20 PRO严重缺货!晨曦紫、曙光银今日开启预定
全球快播:9.99万价格屠夫!长安第二代UNI-T尊享型上市:入门就有骁龙8155
每日速读!小憩、露营、洗车模式上线 岚图梦想家发布OTA2.0版本
奔驰变法拉利!男子107万提新车发现竟是翻新车:退一赔三获赔428万_动态焦点
新资讯:盘点10款最美游戏:《最后生还者》《艾尔登法环》等入选
【AI新趋势期刊#2】AI发明计算机算法,如何给大模型排行,照片秒变二维码,视频一键动漫风 速看
焦点热讯:Java异常分类和常见异常
语音直播源码知识分享:探索新的沟通方式-全球微动态
水深火热成语接龙_热字开头的成语
《巨齿鲨2:深渊》最新预告出炉:杰森·斯坦森、吴京大战海底怪兽
双泵水冷力压13900KS 310W功耗!超频三DE360水冷散热器评测:静音水泵也很重要 即时焦点
头条焦点:华裔学者出手!50年零进展算法难题被突破
不顾国内外强烈反对!日本拟最早8月核污水排海|当前观察
环球最资讯丨故宫门票提前7天抢不到 黄牛要价翻6倍!全国博物馆几乎都如此
全球即时看!还分不清bin log 、redo log 跟 undo log?
全球快讯:前端Vue一款基于canvas的精美商品海报生成组件 根据个性化数据生成商品海报图 长按保存图片
世界简讯:突发!俄军一架战机坠毁
【天天速看料】火狐发布115版本更新:支持Win7/8最后版本
天天微资讯!女子半夜拍蚊子走出158步吓坏母亲:通过微信步数了解家人起居
男孩被锁车内父母心疼玻璃不愿砸 路人做好事反被责怪:网友看怒|热资讯
焦点热讯:比亚迪豪掷45亿巴西建三厂:年产15万辆、提供超5000个就业岗位
实时:西安饭庄长安礼记糕点礼盒大促:原价69.9 西安19.9包邮
【天天时快讯】法国总统马克龙:骚乱顶峰已过去 仍需保持警惕
债市开放新消息:离岸国债期货呼之欲出
环球快播:胡昌升会见俞敏洪一行
宁德时代科学家欧洲拿发明大奖!开发带盖的锂电池降低爆炸风险
全球微速讯:中国新能源汽车6月销量达到历史最高水平:比亚迪、特斯拉均创新高
广东一奥迪车嚣张 逆行还竖中指车主已被查处 大快人心
苹果打鸡血 电池激增!消息称iPhone 15系列存储加大 告别128GB 环球快报
《英雄联盟》LPL夏季赛TT战胜EDG:Uzi复出斩获第七次MVP_环球新动态
多省份上调最低工资标准,安徽等15省份第一档月最低工资超2000元 今日热文
在CentOS 7 mini版中使用ifconfig
世界球精选!年内券商债券承销金额超6万亿元 部分中小券商在不同类型债券承销方面展现出优势
医保谈判药品怎么续约?非独家药品如何竞价?国家医保局公开征求意见 环球快看
成都滴滴公司要注销?官方回应:非运营主体 公司一切正常 世界热门
3999元起口碑超稳!小米13官网评价超100万:99.9%好评率 全球新消息
没人买?RTX 4060大降价 降速让人惊叹:英伟达要出手了
杀入BBA腹地 30多万的比亚迪照样卖爆:腾势N7上市24小时大定11687辆
读发布!设计与部署稳定的分布式系统(第2版)笔记19_基础层之设备 环球讯息
俄外交部:目前没有理由延长黑海港口农产品外运协议-天天观点
重制版或将在今年8月公开,R星已找到作者联系
小米“掐架”华为!发起专利无效请求:到底发生了什么? 热门看点
阿里的AIGC数据库工具: Chat2DB的学习与使用
环球消息!国产汽水 凭啥喝不出一家上市企业
环球热头条丨为什么人类尾巴进化掉了?留下来不行吗?中国科学家新发现
四川惊现“蚊卷风” 大量蚊子聚集5米高?想干嘛?
全球报道:本来想用AI来打败AI:结果惨烈翻车
资讯推荐:深圳市监局回应山姆泡面桶被炒至1999元:没有恶意加价
每日速递:古代20岁到100岁的称呼(20岁到70岁在古代分别叫什么)
行使国家立法权的机关是人民代表大会_全国人民代表大会和行使国家立法权
【天天新视野】ons游戏该死的妹子官方(ons游戏该死的妹子)
文心一言 VS 讯飞星火 VS chatgpt (54)-- 算法导论6.2 6题
卖了一个多月后 RTX 4060 Ti太尴尬了:Steam玩家零人购
速看:你买的手机到底是不是正品?这么一查 全清楚了
16针供电口有毒!RTX 4090配90度拐弯电源线后:照烧不误
每日热门:一天吃透操作系统面试八股文
Linux raid-磁盘阵列-raid10搭建 今头条
热议:做个有出息的女姟_做个有出息的女孩
绝地求生大逃杀什么时候出的?绝地求生大逃杀按什么键说话?
藤蔓的拼音是什么?藤蔓的寓意和象征是什么?
身份证号码代表哪些信息?实名认证身份证号码的正确格式是什么?
iPhone 15全系电池容量曝光!续航稳了:只差一步就5000mAh|每日信息
到三份寿司只要12.9元:剩菜盲盒你会去购买吗? 全球要闻
电信手机积分是怎么来的?电信的手机积分怎么兑换话费?
如果的事原唱是谁?如果的事表达的是什么意思?
知名电动自行车品牌Urtopia推出新品 将ChatGPT融入其中
海南三亚一男子偷偷潜入别墅并喝掉主人的6瓶茅台 家政发现并报警
德国著名网红健身博主“拉丝哥”猝死离世 因硬货较多导致粉丝数量破千万
西安一母女在大雁塔内推开保护罩伸手触摸石刻 遭到网友唾弃
“广东人正式被确诊为依萍”登上热搜 今夏暴雨将增多
导致白癜风复发的因素有哪些呢 世界视点
焦点速递!拍3件39元到手!舒蕾参姜控油防断修护洗发水狂促(78元优惠券)
速看:全新阿尔法·罗密欧朱丽叶上市!售35.98万元起 买它还是宝马3系?
一图看懂iQOO 11S:首发超算独显、顶配1TB 4799元
最强天玑平板!iQOO Pad新配色发布:2399元起步 性能直接拉满-热点聚焦
泰坦号乘客的最后时刻:听音乐沉入海底 官方称比过马路更安全|天天时讯
【当前热闻】架构师常用的设计图
环球今头条!C#百度地图开放平台211sn校验失败解决方法
为什么是我为什么不是我作文指导(为什么是我)
矿难后矿卡公司神转型:3.8万张显卡打包提供AI算力 天天观速讯
“最像人”的机器人学会绘画:Ameca接入GPT-3生成式AI模型|全球快讯
焦点日报:安卓充电卷王 iQOO 11S要普及200W快充:放心用4年
观速讯丨立省231块!361度板鞋男新款休闲鞋大促:69元包邮到手
苹果回应Mac彻底抛弃Intel:给过机会 可处理器真没法用 世界滚动
记录--组件库的 Table 组件表头表体是如何实现同步滚动?|每日时讯
2023容器网络趋势:CNI网络插件逐渐普及,Kube-OVN受欢迎度持续攀升 今日最新
环球微动态丨手机刷了PE类原生系统后的体验
环球即时看!债市日报:7月4日
【聚看点】车评人怒批埃尔法不装防撞梁:一老板出车祸 后排都变形了
00后发明全新上班方式!谁说电动轮椅只适合老年人 天天快播报
比亚迪腾势N7正式上市 售价30.18万起 特斯拉Model Y还香吗
2023果冻行业市场现状分析-天天观速讯
每日消息!java基础之行为抽象
天天热资讯!华为云河图KooMap 共筑数字孪生底座 共建产业标杆