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