Android静态安全检测 - PendingIntent误用风险

2024-08-29 03:08

本文主要是介绍Android静态安全检测 - PendingIntent误用风险,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

PendingIntent误用风险 - android.app.PendingIntent



一、API


1. 继承关系


【1】java.lang.Object

【2】android.app.PendingIntent


2. 主要方法


【1】getActivity(Context context, int requestCode, Intent intent, int flags)


【2】getBroadcast(Context context, int requestCode, Intent intent, int flags)


【3】getService(Context context, int requestCode, Intent intent, int flags)


【4】其他方法


https://developer.android.com/reference/android/app/PendingIntent.html


3. PendingIntent介绍


【1】使用方法类的静态方法getActivity,getBroadcast,getService,可以得到一个PendingIntent对象,分别对应着Intent的三个行为,跳转到一个activity组件、打开一个广播组件和打开一个服务组件


【2】参数有4个,比较重要的是第三个和第一个,可以看到,要得到PendingIntent对象,必须传入一个Intent作为参数


【3】PendingIntent是一种特殊的Intent,主要的区别在于Intent的执行是立刻的,而PendingIntent的执行不是立刻的,PendingIntent执行的操作实质上是参数传进来的Intent的操作


【4】使用PendingIntent的目的在于它所包含的Intent的操作的执行是需要满足某些条件的

  状态栏通知(Notification的发送)

  短消息发送(SmsManager)

  警报器执行(AlarmManager)


【5】参考链接


http://www.cnblogs.com/wjjair/p/3392031.html


二、触发条件


1. 定位关键API的位置


【1】Landroid/app/PendingIntent;->getActivity(

【2】Landroid/app/PendingIntent;->getBroadcast(

【3】Landroid/app/PendingIntent;->getService(


2. 判断第三参数是否为空Intent


【1】确定寄存器名称 v1

  初始化形式 Intent intent = new Intent()

  对应到smali语句的特征

 invoke-direct {v1}, Landroid/content/Intent;-><init>()V


【2】判断是否设置Action或者ComponentName

  Landroid/content/Intent;->setAction(

  Landroid/content/Intent;->setClass(

  Landroid/content/Intent;->setClassName(

  Landroid/content/Intent;->setComponent(

  Landroid/content/Intent;->setPackage(


三、漏洞原理


【1】使用PendingIntent的时候,如果使用了一个空Intent,会导致恶意用户劫持修改Intent的内容


【2】更多内容


http://drops.wooyun.org/papers/3912

四、修复建议


【1】禁止使用一个空Intent去构造PendingIntent


【2】构造PendingIntent的Intent一定要设置ComponentName或者action

这篇关于Android静态安全检测 - PendingIntent误用风险的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1116670

相关文章

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

Python脚本轻松实现检测麦克风功能

《Python脚本轻松实现检测麦克风功能》在进行音频处理或开发需要使用麦克风的应用程序时,确保麦克风功能正常是非常重要的,本文将介绍一个简单的Python脚本,能够帮助我们检测本地麦克风的功能,需要的... 目录轻松检测麦克风功能脚本介绍一、python环境准备二、代码解析三、使用方法四、知识扩展轻松检测麦

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

通过配置nginx访问服务器静态资源的过程

《通过配置nginx访问服务器静态资源的过程》文章介绍了图片存储路径设置、Nginx服务器配置及通过http://192.168.206.170:8007/a.png访问图片的方法,涵盖图片管理与服务... 目录1.图片存储路径2.nginx配置3.访问图片方式总结1.图片存储路径2.nginx配置

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

Nginx安全防护的多种方法

《Nginx安全防护的多种方法》在生产环境中,需要隐藏Nginx的版本号,以避免泄漏Nginx的版本,使攻击者不能针对特定版本进行攻击,下面就来介绍一下Nginx安全防护的方法,感兴趣的可以了解一下... 目录核心安全配置1.编译安装 Nginx2.隐藏版本号3.限制危险请求方法4.请求限制(CC攻击防御)

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操