Android组件安全

Android安全开发之Provider组件安全 如果在AndroidManifest文件中将某个Content Provider的exported属性设置为true,则多了一个攻击该APP的攻击点。如果此Content Provider的实现有问题,则可能产生任意数据访问、SQL注入、目录遍历等风险。 阅读详情

Android组件安全

做过Android开发的攻城狮都知道Android四大组件,在开发过程中打交道最多的也是这四大组件,在开发Android应用的过程中我们最基本的要求是要对这四大组件有一个清晰的认识,包括组件的功能特性、生命周期、与系统的交互模型,以及组件之间如何配合使用等等。本文内容主要是关于组件的安全模型以及如何正确的使用组件来降低应用的安全风险的一个学习笔记。

一、Android四大组件简介

1. Service组件

Service是没有界面且能长时间运行于后台的应用组件,是Android中实现程序后台运行的解决方案,非常适合用于去执行那些不需要和用户交互而且还要求长期运行的任务。这也是为了不阻塞主进程,然而主进程依然能够流畅的处理UI事件,提供良好的用户体验。

根据Service的生命周期不同又分为两种类型:

(1)start类型:应用程序组件(如activity)调用startService()方法启动服务时,服务处于started状态
(2)bound类型:组件调用bindService()方法绑定到服务时,服务处于bound状态

两者的区别:调用startService()启动的Service其生命周期与启动它的组件无关,调用bindService()启动的Service会在启动它的组件消亡后消亡

1.1 Service安全

关于Service安全规范请参照博客:http://www.droidsec.cn/android-service-security/

2. Activity组件

Activity是一个Android应用程序和用户进行交互界面的Android组件,相当于应用程序的一个交互屏幕,Activity之间通过Intent进行通信。下图是Activity的生命周期变迁图

2.1 Activity生命周期

onCreate : Activity被创建时调用,是生命周期第一个被调用的方法

onStart :表示Activity正在启动,还没有到达可见、交互的地步

onResume :表示Activity已在前台可见,可与用户交互

onPause : 表示Activity正在停止

onStop : 一般在onPause方法执行完成直接执行,表示Activity即将停止或者完全被覆盖,此时Activity不可见,仅在后台运行

onRestart :表示Activity正在重新启动,当Activity由不可见变为可见状态时,该方法被回调

onDestroy :此时Activity正在被销毁,也是生命周期最后一个执行的方法,一般我们可以在此方法中做一些回收工作和最终的资源释放。

2.2 Activity组件的加载模式

  • standard模式:无论Activity栈中是否存在改Activity实例,系统都将创建一个实例
  • singleTop模式:如果目标activity的实例已经存在于栈顶,系统会直接使用该实例,不会重新创建,否则会创建一个实例,入栈
  • singleTask模式:在同一应用程序中,如果目标activity的实例已经存在于栈顶,系统会直接使用该实例,不会重新创建,否则弹出栈顶实例,直到使目标activity位于栈顶,在不同应用程序中启动Activity时,会创建一个新的task栈,用于保存被启动的Activity实例
  • singleInstance模式:只有一个实例,并且这个实例独立运行在一个task栈中,这个task只有这个实例,不允许有别的Activity存在

2.2 Activity组件权限

Activity权限的使用主要用于从其他应用中调用该应用的Activity进行一些操作,比如第三方登录:进行权限的设置后可以调用该应用中的Activity进行操作。下图是权限的格式定义:

android:protectionLevel 一共有四种
  • normal:表示权限是低风险的,不会对系统、用户或其他应用程序造成危害

  • dangerous:比normal级别要高一等级,可能会赋予应用程序访问敏感数据或控制设备等功能

  • signature:表示只有当应用程序所用数字签名与声明该权限的应用程序所用数字签名相同时,才能将权限授给它

  • signatureOrSystem :表示将权限授给具有相同数字签名的应用程序或android 系统映像/系统app。这一保护级别适和于非常特殊的情况,比如多个供应商需要通过系统映像共享功能时

2.2 exported属性

一个Activity组件能否被外部应用启动取决于此属性,设置为true时Activity可以被外部应用启动,设置为false则不能,此时Activity只能被自身app启动。(同user id或者root也能启动)

没有配置intent-filter属性exported默认为false(没有filter只能通过明确的类名来启动activity故相当于只有程序本身能启动),配置了intent-filter属性exported默认为true。

exported属性只是用于限制Activity是否暴露给其他app,通过配置文件中的权限申明也可以限制外部启动activity。

2.3 activity的声明

<activity
        android:name="Activity"
        android:label="@string/title_activity"
        android:permission="packagename.permission.Activity"
        >
        <intent-filter>
            <category android:name="android.intent.category.DEFAULT"/>
            <action android:name="packagename.intent.action.Activity"/>
        </intent-filter>
    </activity>

配置了intent-filter属性,则exported为true,说明别的应用程序可以在外部启动该Activity,可根据action的name发起隐式intent,启动声明了该action的Activity

2.4 activity的分类

2.4.1 private activity

私有Activity不应被其他应用启动相对是安全的
关于private activity的使用和设置规范请参照:http://www.bugsec.org/7195.html

2.4.2 public activity

公开暴露的Activity组件,可以被任意应用启动
关于public activity的使用和设置规范请参照:http://www.bugsec.org/7195.html

3. Broadcast Recevier组件

Broadcast Recevier 广播接收器是一个专注于接收广播通知信息,并做出对应处理的组件,广播机制是一个典型的发布—订阅模式,即观察者模式。 广播接收器没有用户界面。然而,它们可以启动一个activity来响应它们收到的信息,或者用NotificationManager来通知用户。通知可以用很多种方式来吸引用户的注意力──闪动背灯、震动、播放声音等等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。

3.1 广播注册形式

静态注册:

静态注册是在AndroidManifest.xml中声明广播注册,直接在Manifest.xml文件的节点中配置广播接收者。

<receiver android:name=".MyBroadCastReceiver">  
        <!-- android:priority属性是设置此接收者的优先级(从-1000到1000) -->
        <intent-filter android:priority="20">
        <actionandroid:name="android.provider.Telephony.SMS_RECEIVED"/>  
        </intent-filter>  
</receiver>

还要在同级的位置配置可能使用到的权限

<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>

动态注册:

通过使用代码进行注册

区别:

  • 第一种是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行

  • 第二种是非常驻型广播,也就是说广播跟随程序的生命周期

关于Broadcast Recevier安全编码规范,参照:http://www.droidsec.cn/android-broadcast-security/

3. Content Provider组件

为存储和获取数据提供统一的接口,可以在不同的应用程序之间共享数据。使用ContentProvider,应用程序可以实现数据共享,android内置的许多数据都是使用ContentProvider形式,供开发者调用的(如视频,音频,图片,通讯录等)

关于Content Provider组件的安全问题,参照:http://blog.youkuaiyun.com/alimobilesecurity/article/details/51564968

参考博文

http://www.cnblogs.com/smyhvae/p/4070518.html

http://blog.youkuaiyun.com/javazejian/article/details/51932554

[车联网安全自学篇] Android安全之「组件安全攻防」组件暴露导致的安全问题「基础篇含案例实验」 Androdi APP 主要由JAVA编写,包括四大组件(Activity、Service、Content Provider、Broadcast Receiver)应用组件是组成安卓应用的关键部分。每个应用都是由一个或者多个组件组成,并且每个都是单独调用。组件名描述Activities描述UI,并且处理用户与机器屏幕的交互Services处理与应用程序关联的后台操作处理Android操作系统和应用程序之间的通信处理数据和数据库管理方面的问题。... 阅读详情

相关推荐

ActivityFuzzer:检测Android Activity组件的安全漏洞

ActivityFuzzer:检测Android Activity组件的安全漏洞

Android组件安全详解

2016-09-03 简析Android组件安全 Mobile android 前言前段时间在学习github上DroidPlgin插件的时候接触到不少专业术语,诸如预先占坑、Activit

有图有真相 4886

工业场景落地:Java+PaddleOCR实现高性能OCR文字识别的终极方案

本文深度解析基于Java的高性能工业级OCR实现方案,集成PP-OCRv5深度学习模型,提供: ✅ 多场景支持:手写体、竖排文本、票据表格的精准识别 ✅ 工业级性能:毫秒级响应,支持GPU加速与高并发处理 ✅ 开箱即用:通过Maven快速集成,5行代码完成文字识别 ✅ 完整技术栈:覆盖文本检测、方向校正、识别后处理全流程 附可运行示例代码,助您快速构建企业级OCR系统!

deng775747758的博客 3611

android 组件安全,Android 组件安全

1、Activity、Service、BroadcastReceiver、ContentProvider是Android的四大组件,他们的安全性是非常重要的。四大组件的安全漏洞主要集中在是否可以被外部调用,外部调用是否存在风险。四大组件是否可以被外部调用,决定因素是在AndroidManifest.xml里面定义的四大组件的标签export的布尔值。如下:android:name=".PartAc...

weixin_34052529的博客 564

爬虫实战:抖音视频搜索数据爬虫开发实战(附完整Python源码)

【代码】抖音视频搜索数据爬虫开发实战(附完整Python源码)

weixin_61226361的博客 3597

从T型结到Wilkinson:5分钟搞懂功分器选型指南(附最新射频测试数据对比)

本文通过对比T型结、电阻型和Wilkinson三种功分器的核心原理与实测数据,提供了清晰的射频功分器选型指南。文章结合最新的2.4GHz ISM频段测试数据,分析了插入损耗、回波损耗和端口隔离度等关键指标,并针对窄带物联网、射频测试及合成系统等不同应用场景,给出了具体的选型建议和实战提醒,帮助工程师根据系统需求做出最优决策。

bush的博客 305

Android静态安全检测 -> Activity组件暴露

Activity组件暴露 - exported属性 1. android:exported 该属性用来标示,当前Activity是否可以被另一个Application的组件启动 true 表示允许被启动 false 表示不允许被启动,这个Activity只会被当前Application或者拥有同样user ID的Application的组件调用

4lwin博客 1万+

Protege本体建模实战:从零构建电影知识图谱并导入Neo4j

本体建模是知识图谱构建的基石,通过类、属性、实例和约束系统描述领域知识,为数据提供可复用的语义骨架。OWL作为本体描述语言的标准,配合Protege工具可实现可视化建模,并借助推理机验证逻辑一致性,提升模型可靠性。在工程落地中,本体模型常需导入图数据库如Neo4j,以支持高效的关联查询与业务应用。本文以影视领域为背景,完整演示Protege中定义类层级、创建对象/数据属性、填充实例,以及导出OWL文件并通过Python脚本转换为Neo4j节点与关系的全过程,同时梳理命名空间、匿名节点、编码等易踩坑点,帮助读

weixin_29047545的博客 281

移动安全学习笔记——组件安全之组件暴露导致的安全问题(含实验)

0x00 漏洞原理 exported的组件可以被第三方APP调用,在权限控制不当的情况下,可能导致敏感信息泄露、绕过认证、越权行为执行等风险。 0x01 检测方法 1、手动查看 1-反编译apk,查看AndroidManifest.xml。 2-查看组件是否被导出或默认导出。 具有intent-filter标签时,默认为exported=true 不具有intent-filter标签时,默认为exported=false 导出的组件是否有Signature以上级别的权限控制。 2、利用Drozer

0nc3的博客 2148

国产上位机软件突围:适配统信UOS/麒麟OS的跨平台开发技术与实践(2026年信创实战指南)

(航天科技集团CTO):“在信创战场上,1ms的延迟意味着1个卫星的控制失效。2026年,C#/.NET MAUI不是选择,而是我们守护卫星的‘生命线’。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 409

Python爬虫实战:逆向工程与异步爬虫技术,高效抓取国家知识产权局专利数据

相比于传统的Selenium,Playwright由微软开发,支持多浏览器(Chromium, Firefox, WebKit),API更现代,执行速度更快,并且能轻松录制用户操作生成代码。通常,列表中的摘要信息是缩略的,我们需要进入每个专利的详情页获取完整信息(如主权要求、法律状态等)。我们的第一步是手动操作一遍搜索流程,并用Playwright的“录制”功能或开发者工具,找出真正返回专利数据的那一个或多个网络请求。以友好的、对人类行为模拟的方式爬取数据是基本的网络礼仪,也能有效避免你的IP被封锁。

2201_76125261的博客 2419

安全测试-Drozer安全测试框架实践记录篇

二、环境部署一、Drozer简介Drozer是MWR Labs开发的一款Android安全测试框架。是目前最好的Android安全测试工具之一。其官方文档说道:“Drozer允许你一一个普通android应用的身份与其他应用和操作系统交互。”在Web世界已经有了许多安全测试工具了,我们只需要给出一个目标,这些工具就会自动为我们安全测试报告。但Drozer与这样的自动化扫描器不同,Drozer是一种交互式的安全测试工具。......

qq_34381178的博客 5537

基于MATLAB的变分模态分解(VMD)算法详解

变分模态分解(VMD)是一种先进的信号处理方法,通过变分框架将复杂信号分解为多个模态分量。相比传统经验模态分解(EMD),VMD具有坚实的数学基础,能有效抑制模态混叠和端点效应。其核心思想是将信号分解转化为约束优化问题,通过交替方向乘子法迭代求解各模态的中心频率和带宽。VMD在机械故障诊断、生物医学信号处理等领域展现出优越性能,尤其适合处理非平稳非线性信号。该算法通过严格的数学模型实现自适应频谱优化,为信号分析提供了更可靠的工具。

qq_42212808的博客 735

Android 安全开发之 exported 组件安全

Android exported 组件是一种强大的工具,可以使应用之间共享功能和数据。然而,如果exported组件的安全措施没有得到妥善实现,则可能会导致严重的安全漏洞。

特立独行的博客 1745

yolov26改进 | 检测头篇 | 利用渐近特征金字塔网络AFPN改进yolov26检测头融合P2网络结构(让小目标无所遁形,全网独家首发)

本文介绍一种基于AFPN渐近特征金字塔网络改进的YOLOv26四检测头Detect_FPN。AFPN通过逐级融合底层细节、中层结构与高层语义特征,缩小不同尺度特征之间的语义差距,减少直接融合带来的信息冲突,使检测头获得更稳定、更充分的多尺度表达。本文进一步增加高分辨率小目标检测分支,强化对微小目标、密集目标和复杂背景目标的感知能力,适合工业缺陷、遥感及无人机等场景。文中将展示基础模型与改进模型的训练对比结果,并提供完整代码、配置文件、模块注册方法及Codex修改思路,方便直接复现和二次创新。

Snu77的博客 371

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【Android】组件安全

【Android客户端漏洞挖掘】组件安全 本文主要在实战过程中的一些经验总结,长期更新,目前状态是初学,目前实战中会挖一些webview沙箱任意读、lauchanywhere等比较常见的问题,其他类型的漏洞还在不断地学习中。 drozer 通过drozer可以看出apk有哪些组件可导出 下载 https://labs.f-secure.com/tools/drozer/ 常用命令 run app.activity.info -a com.xxx run app.service.info -a com

HWHXY的博客 6052

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Android研发安全1-Activity组件安全(上)

Activity组件是用户唯一能看见的组件,作为软件所有功能的显示载体,其安全性不言而喻。针对Activity组件安全,作为一个安卓开发者来讲需要在日常开发过程中注意两点: - Activity访问权限的控制 - Activity被劫持 本篇文章将分享Activit...

213

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

android应用组件安全,基于组件间通信的Android应用安全分析

Android application security analysis based on inter-component communicationHuang Yanyi1黄炎裔(1994-),女,硕士研究生,主要研究方向:软件安全,移动互联网安全Guo Yanhui1郭燕慧(1974-),女,副教授、硕导,主要研究方向:移动互联网安全Li Qi1李祺(1981-),女,副教授,主要研究方向:...

weixin_35733790的博客 174

Android安全开发之启动私有组件漏洞浅谈

如何解决私有组件被导出组件启动带来的安全问题?

AliMobileSecurity的博客 1894

Android暴露组件——被忽略的组件安全

Intent 简介: Intent(意图),负责完成Android应用、组件之间的交互与通信。 常见的Activity的调用、Receiver的发送、Service的启动都需离不开Intent。 Intent通常包含的信息: Categpry:种类、归类。 Action:表明要做什么?通常代表了一个组件具有的能力。 Data/Extras:通信的数据。 Flags:规定了系统如何去启动一个Act...

Lance_W 6223

android 组件暴露风险,全面理解 Android 安全机制(组件安全)

本片博客主要跟大家谈谈 Android 基本组件的安全问题。每个组件都可在 AndroidManifest.xml 里通过属性 exported 被设置为私有或公有。私有或公有的默认设置取决于此组件是否被外部使用;例如某组件设置了 intent-filter 意味着该组件可以接收 intent,可以吧被其他应用访问,则默认的 exported 属性为 true(没有 filter 只能通过明确的类...

weixin_32285357的博客 1000

Android安全开发之 Provider 组件安全

Android Provider组件是一种强大的工具,可以用于在不同应用之间共享数据。然而,如果Provider组件的安全措施没有得到妥善实现,则可能会导致严重的安全漏洞

特立独行的博客 2466

Android中的组件安全漏洞介绍和检测

首先我们介绍下我们常见的Android的activity组件, Activity是Android四大组件之一,它用于展示界面。Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务。Activity中所有操作都与用户密切相关,是一个负责与用户交互的组件,可以通过setContentView(View)来显示指定控件。在一个android应用中,一个Activity通常

nextdoor6的博客 1万+

android 组件导出安全,App安全检测实践基础:组件安全(二)

系列文章目录Activity简述Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务。Activity中所有操作都与用户密切相关,是一个负责与用户交互的组件,可以通过setContentView(View)来显示指定控件。在一个android应用中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。Activity之...

weixin_29044713的博客 752
上一篇: Redis底层数据结构之链表
下一篇: Analysis of Code Heterogeneity for High-Precision Classification of Repackaged Malware
code&poetry
博客等级 码龄14年 134粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值