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中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

Android自定义Scrollbar的两种实现方式

《Android自定义Scrollbar的两种实现方式》本文介绍两种实现自定义滚动条的方法,分别通过ItemDecoration方案和独立View方案实现滚动条定制化,文章通过代码示例讲解的非常详细,... 目录方案一:ItemDecoration实现(推荐用于RecyclerView)实现原理完整代码实现

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

Linux系统中配置静态IP地址的详细步骤

《Linux系统中配置静态IP地址的详细步骤》本文详细介绍了在Linux系统中配置静态IP地址的五个步骤,包括打开终端、编辑网络配置文件、配置IP地址、保存并重启网络服务,这对于系统管理员和新手都极具... 目录步骤一:打开终端步骤二:编辑网络配置文件步骤三:配置静态IP地址步骤四:保存并关闭文件步骤五:重

最新Spring Security实战教程之Spring Security安全框架指南

《最新SpringSecurity实战教程之SpringSecurity安全框架指南》SpringSecurity是Spring生态系统中的核心组件,提供认证、授权和防护机制,以保护应用免受各种安... 目录前言什么是Spring Security?同类框架对比Spring Security典型应用场景传统

MyBatis-Plus中静态工具Db的多种用法及实例分析

《MyBatis-Plus中静态工具Db的多种用法及实例分析》本文将详细讲解MyBatis-Plus中静态工具Db的各种用法,并结合具体案例进行演示和说明,具有很好的参考价值,希望对大家有所帮助,如有... 目录MyBATis-Plus中静态工具Db的多种用法及实例案例背景使用静态工具Db进行数据库操作插入

Android WebView无法加载H5页面的常见问题和解决方法

《AndroidWebView无法加载H5页面的常见问题和解决方法》AndroidWebView是一种视图组件,使得Android应用能够显示网页内容,它基于Chromium,具备现代浏览器的许多功... 目录1. WebView 简介2. 常见问题3. 网络权限设置4. 启用 JavaScript5. D

Android如何获取当前CPU频率和占用率

《Android如何获取当前CPU频率和占用率》最近在优化App的性能,需要获取当前CPU视频频率和占用率,所以本文小编就来和大家总结一下如何在Android中获取当前CPU频率和占用率吧... 最近在优化 App 的性能,需要获取当前 CPU视频频率和占用率,通过查询资料,大致思路如下:目前没有标准的

Apache伪静态(Rewrite).htaccess文件详解与配置技巧

《Apache伪静态(Rewrite).htaccess文件详解与配置技巧》Apache伪静态(Rewrite).htaccess是一个纯文本文件,它里面存放着Apache服务器配置相关的指令,主要的... 一、.htAccess的基本作用.htaccess是一个纯文本文件,它里面存放着Apache服务器