Android自启动管控
1. 自启动管控需求来源
自启动、关联启动、交叉启动、推送启动等现象的泛滥除了对个人信息保护带来隐患外,还会导致占用过多的系统CPU和内存资源,造成系统卡顿、发热、电池消耗过快;还可能引入一些包含“恶意代码”的进程在后台隐蔽启动,避开了杀毒软件等的查杀,威胁到用户通信秘密、财产安全。
2. 关联启动现象
2.1 常见的问题
1.【全家桶启动现象】原生机器中,打开一个百度地图,放置一段时间后发现百度助手、百度新闻、去哪儿、美团等 APP后台自启动甚至弹出消息提醒?
·除此之外腾讯系、阿里系应用也会有。因为日活率是一款App的核心绩效指标,日活量不仅反应了应用的受欢迎程度,同时反应了产品的变现能力,进而直接影响盈利能力和企业估值。App会利用保活技术尽量可能自启动本身和家族内其他应用。
2.为什么应用可以在用户不知情的情况后台自动运行?
·因为Android的理念是开放的, 应用拥有太多自主权限:前台保活、系统唤醒、推送服务。下文会介绍。
2.2 关联启动的树形图
App启动基础:Android 四大组件Activity\BroadCast\Service\ContentProvid是App启动的基本单元,大部分APP会直接或间接地依赖于这四种方式进行启动。

启动分为用户知情和用户不知情2种情况:
·用户知情:
1.用户主动在Launcher界面打开APP
2.APP1 点击分享网页到 APP2
3.Android-语音助手打开 APP2
4.Android GCM 推送弹出 APP2 通知
5.等等 对于用户知情的场景,我们不需要进行管控。
·用户不知情:
1.APP1 利用1x1像素点创建很难被看见界面使用startActivity形式来启动 APP-X
2.APP1 利用开机、亮灭屏、解锁、push sdk、网络变化、USB插拔、时区变化、电量变化等广播事件使用sendBroadCast形式启动 APP-X
3.APP1 利用push sdk、同步服务、JobScheduler服务、服务重启等事件使用bindService/startService 启动 APP-X
4.APP1 利用push sdk、账号服务等事件使用contentProvider 启动 APP-X
即1个应用可以在不同事件以多种启动形式关联启动多个应用,像传染病一样在我们不知情的情况下在后台大量启动一些可能没必要启动的应用。这种滥用自启动的行为,危害系统性能,功耗和安全。
3. 自启动管控方案
3.1 方案集成形式
少量framework 插桩事件的patch +策略 jar包+apk 集成到项目
3.2 自启动工作流
自启动管控在AMS中Activity、BroadCast、ConcentProvider、Service等涉及应用启动相关的函数进行事件插桩(目前18处),且每个事件插桩对应一个拦截相关策略,汇合并构成自启动的拦截与放行方案。
拦截的思想:用户可见或可感知或进程优先级高的进程不管控。重点管控不可见且重要度低后台启动或关联启动其他应用的行为。

一些拦截日志
// 拦截 com.chaozh.iReaderFree 利用JobSchedulerService后台自启动
04-24 03:22:42.560 1329 1329 D Smart_Restrictor: restrict:true t=20 t={u:10216 pkg:com.chaozh.iReaderFree com.chaozh.iReaderFree/com.umeng.message.UmengMessageCallbackHandlerService label:job } c=null r=Malicious!
// 拦截 APP1 关联启动 APP2
04-24 03:22:46.844 1329 6418 D Smart_Restrictor: restrict:true t=21 t={u:10203 pkg:com.baidu.BaiduMap com.baidu.BaiduMap/com.baidu.android.pushservice.PushService } c={pkg:com.baidu.netdisk p:27975 u:10202 newj:800 oldj:800 jt:started-services s:false name:com.baidu.netdisk acts:false sers:true sui:false ic:false} r=Malicious!
05-27 20:42:59.511 25315 3864 D Smart_Restrictor: restrict:true t=1 t={com.tencent.karaoke.maindex.legend.Phosphene} c=com.anjuke.android.app r=null
05-27 20:43:00.122 25315 3847 D Smart_Restrictor: restrict:true t=1 t={com.cleanmaster.getui.InvokeActivity} c=com.anjuke.android.app r=null
// 拦截推送服务后台自启动
04-24 03:31:07.379 1337 1337 D Smart_Restrictor: restrict:true t=20 t={u:10208 pkg:com.autohome.usedcar com.autohome.usedcar/io.rong.push.rongpush.PushService label:job } c=null r=Malicious!
// 拦截空进程启动
05-27 20:41:30.443 25315 25377 D Smart_Restrictor: restrict:true start application t={com.anjuke.android.app} c=null r=Start empty app
3.3 例子-广播拦截机制

在广播拦截中我们分为应用未启动和应用运行时2种策略
·应用未启动时若存在以下情况会被拦截
1.一些系统发出的广播进行拉起,例如开机关播、网络和硬设变化相关广播、亮灭屏广播、锁屏广播、应用安装卸载等,会被拦截;其实谷歌每次大版本升级其实加强安全的优化,也包含广播使用权限的加强,例如从最开始从不限制任何广播,到限制部分静态广播,到限制部分动态广播。可能是借鉴了中国手机厂商自启动拦截的思路。
2.第三方应用后台关联拉起的行为,会被拦截。
3.白名单的应用不受限制;
·应用已启动且正在运行
1.应用处于不可感知状态,系统的一些广播拉起,会被拦截
2.应用使用自己的广播或stricky类型不受限制;
相关文章:
Android自启动管控
1. 自启动管控需求来源 自启动、关联启动、交叉启动、推送启动等现象的泛滥除了对个人信息保护带来隐患外,还会导致占用过多的系统CPU和内存资源,造成系统卡顿、发热、电池消耗过快;还可能引入一些包含“恶意代码”的进程在后台隐蔽启动&…...
把握鸿蒙生态崛起的机遇:开发者视角的探讨
大家好,我是程序员小羊! 前言: 近年来,鸿蒙系统(HarmonyOS)的发展备受瞩目。随着其在智能手机、智能穿戴、车载系统和智能家居等领域的广泛应用,鸿蒙系统正逐渐形成与安卓、iOS并列的三足鼎立…...
MySQL初学之旅(1)配置与基础操作
目录 1.前言 2.正文 2.1数据库的发展历程 2.2数据库的基础操作 2.2.1启动服务 2.2.2创建与删除数据库 2.2.3数据类型 2.2.4创建表与删除表 2.3MySQL Workbench基础使用简介 3.小结 1.前言 哈喽大家好吖,今天博主正式开始为大家分享数据库的学习ÿ…...
一款革命性的视频剪辑工具,AI剪辑新纪元:Clapper
如果说AI视频剪辑工具哪家强?还真想不出有什么让人眼前一亮的AI视频剪辑应用。 毕竟随着AI技术的发展越来越快,各种AI应用如雨后春笋般涌现,然而,真正能够在视频剪辑领域脱颖而出的工具却寥寥无几。 今天我要介绍的 Clapper 就是…...
HTML 区块
HTML 区块 HTML(HyperText Markup Language)是构建网页的标准语言,它定义了网页的结构和内容。在HTML中,区块元素是指那些能够定义较大块状结构的元素,比如段落、标题、列表、表格和 divis 等。这些元素通常对页面的布…...
复杂度的讲解
数据结构可以简单理解为在内存中管理数据 它具有速度快 带电存储的特点(临时存储) 如何衡量一个算法的好坏 因此衡量一个算法的好坏,一般是从时间和空间两个维度来衡量的,即时间复杂度和空间复杂度。 时间复杂度主要衡量一个算…...
[ Linux 命令基础 2 ] Linux 命令详解-系统管理命令
🍬 博主介绍 👨🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…...
使用docker部署Prometheus和Grafana去监控mysql和redis
自动化性能监控系统安装部署 相关工具的安装部署 服务工具分配 服务器工具端口10.0.20.9grafana300010.0.20.9prometheus909010.0.20.10mysql330610.0.20.10mysql-exporter910410.0.20.10redis330610.0.20.10redis_exporter9121 使用docker-compose安装prometheus 先拉取p…...
日志管理 | Log360 实现PCI DSS v4.0数据安全合规要求
PCI DSS 是一项网络安全标准,得到所有主要信用卡和支付处理公司的支持,旨在确保信用卡和借记卡号码的安全。最新的PCI DSS v4.0 代表支付卡行业数据安全标准。 任何依赖信用卡交易的企业都不能将数字安全视为一个偷工减料的领域,因为数据泄露…...
JAVA中的string和stringbuffer
【之前面试测试岗位的时候有被问到这个问题,面试结束后特地来学习一下】 目录 谁先被提出的String的使用StringBuffer的使用两者区别 谁先被提出的 String类先于StringBuffer被提出,作为Java语言的基础部分,而StringBuffer是为了解决实际开…...
轻型民用无人驾驶航空器安全操控------理论考试多旋翼部分笔记
官网:民用无人驾驶航空器综合管理平台 (caac.gov.cn) 说明:一是法规部分;二是多旋翼部分 本笔记全部来源于轻型民用无人驾驶航空器安全操控视频讲解平台 目录 官网:民用无人驾驶航空器综合管理平台 (caac.gov.cn) 一、轻型民用无人…...
计算用户订购率梧桐数据库和oracle数据库sql分析
一、背景说明 移动运营商平台提供多种类型的产品权益,用户可以通过订购来使用。平台需要定期统计各个产品的用户订购情况,以便了解各个产品的受欢迎程度。这些统计数据将用于优化产品、提升用户体验和制定市场推广策略。 二、表结构说明 梧桐数据库建…...
通过DNS服务器架构解释DNS请求过程
在前面的章节,这里,基于PCAP数据包和RFC文档详细介绍了DNS请求和响应的每个字段的含义。但是在现实的网络世界中,DNS请求和响应的数据包是怎么流动的,会经过哪些设备。本文将着重说明一下目前网络空间中DNS请求和响应的流动过程。 当前网络空间中比较常见DNS请求的流程如下…...
OKG Research:用户意图驱动的Web3应用变革
出品| OKG Research 作者|Samuel QIN 当前加密市场的快速演变中,用户增长成为行业可持续发展的基石。目前主流观点在推动行业前进的路上,从单纯的技术探索在向更注重应用价值的方向转变。尽管近年来Web3生态系统发展迅速…...
hbase 工具类
hbase 工具类 pom.xml <dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-client</artifactId><version>2.5.10-hadoop3</version> </dependency> <dependency><groupId>com.google.guava<…...
会议直击|美格智能受邀出席第三届无锡智能网联汽车生态大会,共筑汽车产业新质生产力
11月10日,2024世界物联网博览会分论坛——第三届无锡智能网联汽车生态大会在无锡举行,美格智能CEO杜国彬受邀出席,并参与“中央域控:重塑汽车智能架构的未来”主题圆桌论坛讨论,与行业伙伴共同探讨智能网联汽车产业领域…...
在 Jupyter Notebook 中使用 Matplotlib 进行交互式可视化的教程
在 Jupyter Notebook 中使用 Matplotlib 进行交互式可视化的教程 引言 数据可视化是数据分析的重要组成部分,能够帮助我们更直观地理解数据。Matplotlib 是 Python 中最流行的绘图库之一,而 Jupyter Notebook 则是进行数据分析和可视化的理想环境。本文…...
Android13 系统/用户证书安装相关分析总结(三) 增加安装系统证书的接口遇到的问题和坑
一、前言 接上回说到,修改了程序,增加了接口,却不知道有没有什么问题,于是心怀忐忑等了几天。果然过了几天,应用那边的小伙伴报过来了问题。用户证书安装没有问题,系统证书(新增的接口)还是出现了问题。调…...
【C++ 算法进阶】算法提升十三
目录标题 抽牌概率问题 (动态规划)动态规划题目分析代码 洗衣机问题 (贪心)题目题目分析 抽牌概率问题 (动态规划) 动态规划 假设现在有1~N N张牌 每张牌的序号就代表着他的大小 (1 2 … N&am…...
【计网不挂科】计算机网络期末考试(综合)——【选择题&填空题&判断题&简述题】完整试卷
前言 大家好吖,欢迎来到 YY 滴计算机网络 系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 本博客主要内容,收纳了一部门基本的计算机网络题目,供yy应对期中考试复习。大家可以参考 本章是去答案版本。带答案的版本在下…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...
论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...
抽象类和接口(全)
一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...
