本文主要是介绍Android静态安全检测 - Intent隐式调用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Intent隐式调用 - android.content.Intent
一、API
1. 继承关系
【1】java.lang.Object
【2】android.content.Intent
2. 主要方法
【1】构造方法
Intent()
Intent(String action)
Intent(Context context, Class cls)
其他:Intent(Intent o)等
【2】Intent.setAction(String action)
【3】Intent.setClass(Context context, Class cls)
【4】Intent.setClassName(String packageName, String className)
【5】Intent.setClassName(Context context, String className)
【6】Intent.setComponent(ComponentName component)
【7】Intent.setPackage(String packageName)
【8】其他方法
https://developer.android.com/reference/android/content/Intent.html
二、Intent的隐式调用与显示调用
1. 隐式调用
【1】setAction方法
【2】构造方法直接设置Action
2. 显示调用
【1】构造方法传入Component
【2】setComponent方法
【3】setClass/setClassName方法
【4】setPackage方法
3. 参考链接
http://blog.csdn.net/xiao__gui/article/details/11392987
三、触发条件
1. setAction方法
【1】对应到smali语句的特征:
Landroid/content/Intent;->setAction(Ljava/lang/String;)
Landroid/content/Intent;-><init>()
const-string v1, "abc"
去除系统Intent “android.”
显示调用的判断
- Landroid/content/Intent;->setComponent(
- Landroid/content/Intent;->setClass(
- Landroid/content/Intent;->setClassName(
- Landroid/content/Intent;->setPackage(
2. 构造方法直接设置Action
【1】对应到smali语句的特征:
Landroid/content/Intent;-><init>(Ljava/lang/String;)
const-string v1, "abc"
去除系统Intent “android.”
显示调用的判断
- Landroid/content/Intent;->setComponent(
- Landroid/content/Intent;->setClass(
- Landroid/content/Intent;->setClassName(
- Landroid/content/Intent;->setPackage(
四、漏洞原理
【1】隐式intent没有明确指明哪些接收方有权限接收,恶意程序指定action标识后,可以获取intent内容,导致数据泄露,intent劫持,仿冒,钓鱼应用等风险
【2】更多内容
http://blog.csdn.net/wulianghuan/article/details/8508848
http://drops.wooyun.org/mobile/15202
五、修复建议
【1】建议使用显示调用方式发送Intent
【2】使用Intent.setPackage、Intent.setComponent、Intent.setClassName、Intent.setClass、new Intent(context,Receivered.class)中任一种方法明确指定目标接收方,显式调用intent
这篇关于Android静态安全检测 - Intent隐式调用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!