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】更多内容



四、修复建议


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


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

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值