此报告版权归蒲公英所有

应用概述

应用名称:知评家

应用包名:com.izhiping

应用版本:1.0.0

应用大小:17898884

MD5:b21a17cb57568ecccbf20ec800852728

SHA1:1b58d3585214ef3bb2fcec0e91db94bc2f5110b8

SHA256:EEF1S2DFE5SDF1EF1S2DFE5SDF1F1S2DFE5SDF1

OWAS:M2,M4,M6,M7,M8,M9 被检测到

测试统计

漏洞等级分布

提示 (297)

低 (720)

中 (181)

高 (4)

风险细节分析

风险名称 WebView远程代码执行漏洞(addJavascriptInterface)
等级
总结 WebView addJavascriptInterface 远程代码执行漏洞可能允许任意 Java 代码执行。
详情 WebWiew是一个Java类(桥接模式),它采用WebKit渲染引擎来显示网页,包含有通过历史记录来进行前进和后退浏览、放大和缩小、执行文本搜索等方法。在安卓17级别之前,安卓API存在代码远程执行的漏洞,因为JavaScript和Java之间的交互没有正确的限制。WebView JavaScript桥接可以利用映像来获取运行时对象的引用,从而可能被用来执行任意的Java代码。应用可以通过"addJavascriptInterface"函数将Java对象注入到WebView之中,攻击者可用它来执行任意Java代码。详情请参照CVE-2012-6636
OWASP M7: 客户端注入
修复建议 仅在应用程序向WebView组件加载可信内容的时候使用 addJavascriptInterface函数。如果可能的话,还可使用removeJavascriptInterface("searchBoxJavaBridge_"), removeJavascriptInterface("accessibility")和removeJavascriptInterface("accessibilityTraversal")完全去除JavaScript和Java之间的桥接来减少面临攻击的风险。有些应用开发自定义的使用"shouldOverrideUrlLoading"函数的 JavaScript桥接模式,并使用输入验证和输出转码以避免常见的注入攻击方法。我们不建议这样做,因为这样一来,风险就转移到了第三方。
案例 4 查看
案例 收起
行号:170
路径:/com/renn/rennsdk/oauth/OAuthActivity.java
代码:android.webkit.WebView.addJavascriptInterface(java.lang.Object, java.lang.String):void
案例:1 / 4
行号:171
路径:/com/renn/rennsdk/oauth/OAuthActivity.java
代码:android.webkit.WebView.addJavascriptInterface(java.lang.Object, java.lang.String):void
案例:2 / 4
行号:102
路径:/bolts/WebViewAppLinkResolver/2.java
代码:android.webkit.WebView.addJavascriptInterface(java.lang.Object, java.lang.String):void
案例:3 / 4
行号:38
路径:/com/handmark/pulltorefresh/library/extras/PullToRefreshWebView2.java
代码:android.webkit.WebView.addJavascriptInterface(java.lang.Object, java.lang.String):void
案例:4 / 4
风险名称 证书验证漏洞
等级
总结 应用程序没有正确的校验服务器端的证书链,信任所有证书,可能会造成中间人攻击。
详情 很多情况下应用程序需要与远程服务器通讯来实现一些功能。明文传输的数据容易被窃听盗取,所以数据加密非常重要。Android为开发者提供HTTPS连接来实行一些对安全有高要求的操作,比如登录网页(比如输入用户名/密码)和网上银行(比如银行转账)。HTTPS使用安全套接字层 (SSL Secure Sockets Layer,SSL)或者传输层安全性(Transport Layer Security, TLS)来保证安全传输。SSL 是一种安全协议,为网络通信提供安全及数据完整性。使用SSL可以安全的传输登录信息,社会保险号以及信用卡号码/CVC号码等敏感信息。虽然SSL协议是用来提高安全性能的,但如果开发者对其库函数使用不恰当,可能会将应用程序置于风险中,遭受中间人(man-in-the-middle,MiTM)攻击。中间人攻击是指攻击者与通讯的两端分别建立独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。消极的中间人攻击者只是窃听通讯内容;而活跃份子则会破坏篡改通讯内容。

在使用Android SSL库的时候,开发者常犯的错误有: 1) 不检查远程服务器端的证书链,信任所有证书;
2) 不验证远程服务器端的主机名,允许所有主机名;
3) 使用WebKit来加载页面的时候,忽略SSL错误信息,继续加载不可信的页面。

SSL证书用来验证网址的身份以及加密所要传输的数据。SSL证书有三类:1)由可信任的证书授权中心(certificate authority,CA),比如ComodoSymantec,以及GoDaddy,签名的证书; 2)由不可信的证书授权中心签名的证书;3)自签名证书。Android只能直接认证由可信任的证书授权中心以及其下属证书授权中心签名的证书。目前Android所信任的证书授权中心超过100家

在进行SSL连接的时候,需要进行证书校验。Android平台使用两个类来校验SSL证书:1)X509TrustManager类检查证书是不是由合法的证书授权中心签名的,并且检查证书是否过期;2)HostnameVerifier 类检查证书中的主机名与使用该证书的服务器的主机名是不是一致。Android中默认的SSL证书验证机制不接受不可信的连接,因而是安全的,但是Android允许开发者自定义证书验证方法。为了成功的进行网络连接,开发者可能会重写X509TrustManager和HostnameVerifier类来绕过合法的证书校验的步骤,应用程序因此可能会遭受中间人攻击,攻击者可能会看到甚至修改本应被HTTPS保护的传输内容。中间人攻击的示例可以参照这个网址。在这个例子中,攻击者成功的截获了用户名和密码。

开发者常犯的一个错误是不对证书进行校验,盲目接受所有的证书,不去管证书签名者是谁。证书检查用来确认远程服务器的身份和合法性。如果信任了所有的证书,应用程序就完全暴露于中间人攻击的风险中。虽然这时候通讯的内容还是加密的,但是应用程序没法知道它在跟谁通讯。如果它信任的证书是无效的或者恶意的,就可能会上当受骗。它可能会被连接到一个恶意的服务器上,甚至接受一些杂七杂八的数据,同时还自以为它在跟它所信任的服务器打交道。
OWASP M9: 错误的会话(session) 处理
修复建议 建议开发者对服务端和客户端证书进行严格校验,确保签名证书授权中心合法、证书中的主机名与当前服务器主机名匹配、以及证书没有过期。不建议通过改写X509TrustManager和HostnameVerifier类来覆盖Google默认的证书认证机制。如果自定义证书认证方法,不要信任所有证书和允许所有主机名。用WebView显示页面的时候,不要忽略SSL错误。如果SSL证书校验失败,应该采用默认的处理方法handler.cancel(),来停止问题页面的加载;慎重使用handler.proceed()函数来加载问题页面。
案例 2 查看
案例 收起
行号:44
路径:/com/sina/weibo/sdk/net/SSLSocketFactoryEx/KeyStoresTrustManagerEX.java
代码:javax.net.ssl.X509TrustManager.checkServerTrusted(java.security.cert.X509Certificate[], java.lang.String):void
案例:1 / 2
行号:98
路径:/com/tencent/open/utils/HttpUtils/MyX509TrustManager.java
代码:javax.net.ssl.X509TrustManager.checkServerTrusted(java.security.cert.X509Certificate[], java.lang.String):void
案例:2 / 2
风险名称 备份标识设置漏洞
等级
总结 开发者将配置文件中"allowBackup"属性的值设为"true",允许数据的备份还原,可能会造成风险。
详情 配置文件AndroidManifest.xml中的"allowBackup"属性决定应用的数据能否被备份和恢复(安卓开发文档 查看 )。Android 2.2 (API level 8)及以上的Android系统开始引进这一属性。在默认的情况下,"allowBackup"的值为"true"。当"allowBackup"的值为"true"的时候,用户可以通过adb backup和adb restore命令来对应用数据进行备份和恢复。这可能会带来安全风险,因为如果攻击者可以接触到设备,他们就可以打开USB调试开关将应用的数据复制到其他设备中。当数据被备份并恢复后,攻击者就可以在其他设备或者模拟器上安装同一个应用。这会非常危险,因为原来应用上的数据暴露给了攻击者。如果应用里有用户私人信息和金融帐号之类的敏感数据,用户可能会蒙受巨大损失。
OWASP M8: 缺乏输入有效性验证
修复建议 由于共享应用程序数据可能造成安全风险,建议在配置文件AndroidManifest.xml中设置android:allowBackup="false" 来禁用备份和恢复功能,除非确定需要开启备份功能。
案例 1 查看
案例 收起
行号:
路径:AndroidManifest.xml
代码:
案例:1 / 1
风险名称 加密哈希函数不安全(MD5)
等级
总结 应用程序使用了不安全的加密哈希函数MD5算法,可能会造成敏感信息的泄漏。
详情 安卓为应用程序提供了信息摘要算法的功能(安卓文档)。信息摘要是安全的单向哈希函数,它接收任意大小的数据进行转换,输出固定长度的哈希值。常见的信息摘要算法有MD5,SHA-1,SHA-224,SHA-256,SHA-384和SHA-512,其中MD5和SHA-1都已经被认为是不安全的了。如果应用程序使用了不安全的加密哈希函数,可能会造成敏感信息的泄漏。

MD5算法是计算机安全领域广泛使用的一种哈希函数,它能够生成128-bit的哈希值。MD5算法最初是被当作加密哈希函数提出来的,但是现在它的安全系数已经大打折扣。MD5容易受到多种攻击。比如早在2004年,有人就发现MD5算法存在碰撞。因此,如果一个恶意文件的MD5哈希值与某个有效文件的MD5值相同,并进行了数字签名,那么这个恶意文件就可能绕过安全检测。此外,MD5算法也会受到暴力搜索手段攻击。通过一些在线彩虹表破解服务,攻击者就可以轻易拿到明文。
OWASP M6: 密码破解
修复建议 不要使用不安全的哈希函数MD5和SHA-1。推荐使用安全系数更高的SHA-256或者SHA-512。值得注意的是,SHA-512比SHA-256慢,因为SHA-256使用32-bit,而SHA-512使用64-bit。尽管SHA-512慢了些,但是也更安全,因为需要更多的时间来破解。
案例 29 查看
案例 收起
行号:13
路径:/com/alibaba/sdk/android/oss/common/utils/BinaryUtil.java
代码:java.security.MessageDigest.getInstance(java.lang.String):java.security.MessageDigest
案例:1 / 29
行号:23
路径:/com/alibaba/sdk/android/oss/common/utils/BinaryUtil.java
代码:java.security.MessageDigest.getInstance(java.lang.String):java.security.MessageDigest
案例:2 / 29
行号:7
路径:/com/alipay/security/mobile/module/commonutils/crypto/DigestUtil.java
代码:java.security.MessageDigest.getInstance(java.lang.String):java.security.MessageDigest
案例:3 / 29
行号:6
路径:/com/alipay/share/sdk/openapi/algorithm/MD5.java
代码:java.security.MessageDigest.getInstance(java.lang.String):java.security.MessageDigest
案例:4 / 29
行号:24
路径:/com/alipay/share/sdk/openapi/algorithm/MD5.java
代码:java.security.MessageDigest.getInstance(java.lang.String):java.security.MessageDigest
案例:5 / 29
行号:41
路径:/com/alipay/share/sdk/openapi/algorithm/MD5.java
代码:java.security.MessageDigest.getInstance(java.lang.String):java.security.MessageDigest
案例:6 / 29
行号:72
路径:/com/alipay/share/sdk/openapi/algorithm/MD5.java
代码:java.security.MessageDigest.getInstance(java.lang.String):java.security.MessageDigest
案例:7 / 29
行号:8
路径:/com/iflytek/sunflower/c/c.java
代码:java.security.MessageDigest.getInstance(java.lang.String):java.security.MessageDigest
案例:8 / 29
行号:16
路径:/com/iflytek/thridparty/R.java
代码:java.security.MessageDigest.getInstance(java.lang.String):java.security.MessageDigest
案例:9 / 29
行号:84
路径:/com/iflytek/thridparty/R.java
代码:java.security.MessageDigest.getInstance(java.lang.String):java.security.MessageDigest
案例:10 / 29
行号:12
路径:/com/iflytek/thridparty/a.java
代码:java.security.MessageDigest.getInstance(java.lang.String):java.security.MessageDigest
案例:11 / 29
行号:120
路径:/com/iflytek/thridparty/aa.java
代码:java.security.MessageDigest.getInstance(java.lang.String):java.security.MessageDigest
案例:12 / 29
行号:65
路径:/com/iflytek/thridparty/h.java
代码:java.security.MessageDigest.getInstance(java.lang.String):java.security.MessageDigest
案例:13 / 29
行号:406
路径:/com/izhiping/utils/StringFUtils.java
代码:java.security.MessageDigest.getInstance(java.lang.String):java.security.MessageDigest
案例:14 / 29
行号:17
路径:/com/sina/weibo/sdk/utils/MD5.java
代码:java.security.MessageDigest.getInstance(java.lang.String):java.security.MessageDigest
案例:15 / 29
行号:180
路径:/com/squareup/okhttp/internal/Util.java
代码:java.security.MessageDigest.getInstance(java.lang.String):java.security.MessageDigest
案例:16 / 29
行号:5
路径:/com/tencent/map/b/j.java
代码:java.security.MessageDigest.getInstance(java.lang.String):java.security.MessageDigest
案例:17 / 29
行号:7
路径:/com/tencent/mm/a/b.java
代码:java.security.MessageDigest.getInstance(java.lang.String):java.security.MessageDigest
案例:18 / 29
行号:92
路径:/com/tencent/open/utils/SystemUtils.java
代码:java.security.MessageDigest.getInstance(java.lang.String):java.security.MessageDigest
案例:19 / 29
行号:309
路径:/com/tencent/open/utils/Util.java
代码:java.security.MessageDigest.getInstance(java.lang.String):java.security.MessageDigest
案例:20 / 29
行号:399
路径:/com/tencent/open/utils/Util.java
代码:java.security.MessageDigest.getInstance(java.lang.String):java.security.MessageDigest
案例:21 / 29
行号:137
路径:/com/tencent/stat/common/k.java
代码:java.security.MessageDigest.getInstance(java.lang.String):java.security.MessageDigest
案例:22 / 29
行号:357
路径:/com/tencent/weibo/sdk/android/component/sso/tools/MD5Tools.java
代码:java.security.MessageDigest.getInstance(java.lang.String):java.security.MessageDigest
案例:23 / 29
行号:510
路径:/com/tencent/wxop/stat/b/l.java
代码:java.security.MessageDigest.getInstance(java.lang.String):java.security.MessageDigest
案例:24 / 29
行号:78
路径:/com/umeng/socialize/net/utils/AesHelper.java
代码:java.security.MessageDigest.getInstance(java.lang.String):java.security.MessageDigest
案例:25 / 29
行号:8
路径:/im/yixin/algorithm/MD5.java
代码:java.security.MessageDigest.getInstance(java.lang.String):java.security.MessageDigest
案例:26 / 29
行号:26
路径:/im/yixin/algorithm/MD5.java
代码:java.security.MessageDigest.getInstance(java.lang.String):java.security.MessageDigest
案例:27 / 29
行号:5
路径:/com/lidroid/xutils/cache/MD5FileNameGenerator.java
代码:java.security.MessageDigest.getInstance(java.lang.String):java.security.MessageDigest
案例:28 / 29
行号:1275
路径:/okio/Buffer.java
代码:java.security.MessageDigest.getInstance(java.lang.String):java.security.MessageDigest
案例:29 / 29
风险名称 PendingIntent权限泄露漏洞
等级
总结 应用程序使用空的Intent去构造PendingIntent,被第三方程序修改,造成权限泄露。
详情 PendingIntent是一种特殊的异步处理机制,用来指定以后要处理的行为。它可以将未来要处理的Intent传给其他应用(比如NotificationManager, AlarmManager, 主屏幕 AppWidgetManager, 以及第三方应用),并且允许这个应用以与自己相同的权限来执行这个Intent。即使创建Intent的原始应用进程不运行了,这个Intent都有可能被执行。在原始应用将PendingIntent传给其他应用之后,其他应用就可以以原始应用的身份来执行原始应用预设的操作,并拥有与原始应用相同的权限与ID(安卓文档)。因此,在原始应用创建PendingIntent的时候,要格外小心。

权限泄露的风险在于,其他应用得到这个PendingIntent之后,还可能对其原始Intent进行修改,并以原始应用的权限与ID来执行其他操作。如果PendingIntent的内容(action, data, categories等)为空,接收它的应用可以用Intent.fill函数来填充它。如果原始应用有系统权限,这个漏洞非常危险。一个有名的例子就是broadAnywhere漏洞(CVE-2014-8609)。BroadAnywhere的产生是因为Settings系统应用将PendingIntent传给不可信的第三方应用,第三方应用可修改PendingIntent参数,然后交还给系统执行。因为拥有了系统权限,恶意应用利用该漏洞,可以做很多坏事。比如通过发送"android.intent.action.ACTION_SHUTDOWN"广播,可以直接将设备关机。还可以通过发送"android.provider.Telephony.SMS_DELIVER"广播,来伪造接收短信。攻击者通过漏洞可以伪造亲朋好友或者银行电商的短信,跟正常的短信完全无异,普通用户根本无法甄别。通过发送"com.google.android.c2dm.intent.RECEIVE"广播,恶意程序还可以将安卓系统将会恢复至出厂设置,储存在设备里的数据,照片、视频、通讯录、短信等,都将消失不见。对于Android 5.0以及以上的版本,Google修复了broadAnywhere漏洞——将PendingIntent所关联的Intent中的component、action、action中初始化了一个无意义的值。这样一来第三方应用就不能够借助Intent.fillIn()对Intent的值进行二次填充了。
OWASP
修复建议 不要使用空Intent去构造PendingIntent。尽量把构造PendingIntent的Intent的内容(component, action, categories等)都填满,防止第三方应用修改数据或者恶意重定向。
案例 5 查看
案例 收起
行号:299
路径:/cn/jpush/android/service/DownloadService.java
代码:android.app.PendingIntent.getActivity(android.content.Context, int, android.content.Intent, int):android.app.PendingIntent
案例:1 / 5
行号:308
路径:/cn/jpush/android/service/DownloadService.java
代码:android.app.PendingIntent.getActivity(android.content.Context, int, android.content.Intent, int):android.app.PendingIntent
案例:2 / 5
行号:328
路径:/cn/jpush/android/service/DownloadService.java
代码:android.app.PendingIntent.getActivity(android.content.Context, int, android.content.Intent, int):android.app.PendingIntent
案例:3 / 5
行号:337
路径:/cn/jpush/android/service/DownloadService.java
代码:android.app.PendingIntent.getActivity(android.content.Context, int, android.content.Intent, int):android.app.PendingIntent
案例:4 / 5
行号:301
路径:/com/sina/weibo/sdk/cmd/AppInstallCmdExecutor.java
代码:android.app.PendingIntent.getActivity(android.content.Context, int, android.content.Intent, int):android.app.PendingIntent
案例:5 / 5
风险名称 WebView远程代码执行漏洞(accessibility)
等级
总结 这个漏洞允许代码的远程执行
详情 WebWiew是一个Java类(桥接模式),它采用WebKit渲染引擎来显示网页,包含有通过历史记录来进行前进和后退浏览、放大和缩小、执行文本搜索等方法。在安卓17级别之前,安卓API存在代码远程执行的漏洞,因为JavaScript和Java之间的交互没有正确的限制。WebView JavaScript桥接可以利用映像来获取运行时对象的引用,从而可能被用来执行任意的Java代码。应用可以通过"addJavascriptInterface"函数将Java对象注入到WebView之中。除此之外,WebView有三个隐藏的系统接口,"accessibility", "accessibilityTraversal"和 "searchBoxJavaBridge"。这三个隐藏的接口同样有可能造成代码的远程执行。详情请参照 CVE-2012-6636 , CVE-2013-4710 , CVE-2014-1939CVE-2014-7224CVE-2012-6636 介绍了代码远程执行的基本情况; CVE-2013-4710 描述了某些特定型号设备的攻击向量; CVE-2014-1939 主要是关于安卓某些版本中"searchBoxJavaBridge_"的攻击向量; CVE-2014-7224 确认了两个新的攻击向量,"accessibility"和"accessibilityTraversal"
OWASP M7: 客户端注入
修复建议 仅在应用程序向WebView组件加载可信内容的时候使用addJavascriptInterface函数。如果可能的话,还可使用removeJavascriptInterface("searchBoxJavaBridge_"), removeJavascriptInterface("accessibility")和removeJavascriptInterface("accessibilityTraversal")完全去除JavaScript和Java之间的桥接来减少面临攻击的风险。有些应用开发自定义的使用"shouldOverrideUrlLoading"函数的 JavaScript桥接模式,并使用输入验证和输出转码以避免常见的注入攻击方法。我们不建议这样做,因为这样一来,风险就转移到了第三方。
案例 42 查看
案例 收起
行号:102
路径:/bolts/WebViewAppLinkResolver.java
代码: view.loadUrl(WebViewAppLinkResolver.TAG_EXTRACTION_JAVASCRIPT);
案例:1 / 42
行号:135
路径:/cn/jpush/android/p003b/p004a/C0164c.java
代码: webView.loadUrl(this.f155b.m128a());
案例:2 / 42
行号:289
路径:/cn/jpush/android/ui/PushActivity.java
代码: pushActivity.f452c.loadUrl(str);
案例:3 / 42
行号:291
路径:/cn/jpush/android/ui/PushActivity.java
代码: pushActivity.f452c.loadUrl(str2);
案例:4 / 42
行号:246
路径:/cn/jpush/android/ui/FullScreenView.java
代码: this.mWebView.loadUrl(str);
案例:5 / 42
行号:301
路径:/cn/jpush/android/ui/C0217c.java
代码: webView.loadUrl(str);
案例:6 / 42
行号:297
路径:/cn/jpush/android/ui/PopWinActivity.java
代码: this.f447c.loadUrl(str2);
案例:7 / 42
行号:299
路径:/cn/jpush/android/ui/PopWinActivity.java
代码: this.f447c.loadUrl(str);
案例:8 / 42
行号:66
路径:/com/facebook/internal/FacebookWebFallbackDialog.java
代码: webView.loadUrl("javascript:" + "(function() { var event = document.createEvent('Event'); event.initEvent('fbPlatformDialogMustClose',true,true); document.dispatchEvent(event);})();");
案例:9 / 42
行号:442
路径:/com/facebook/internal/WebDialog.java
代码: this.webView.loadUrl(this.url);
案例:10 / 42
行号:172
路径:/com/sina/weibo/sdk/component/WeiboSdkBrowser.java
代码: this.mWebView.loadUrl(url);
案例:11 / 42
行号:51
路径:/com/handmark/pulltorefresh/library/extras/PullToRefreshWebView2.java
代码: ((WebView) getRefreshableView()).loadUrl(DEF_JS_READY_PULL_DOWN_CALL);
案例:12 / 42
行号:56
路径:/com/handmark/pulltorefresh/library/extras/PullToRefreshWebView2.java
代码: ((WebView) getRefreshableView()).loadUrl(DEF_JS_READY_PULL_UP_CALL);
案例:13 / 42
行号:14
路径:/com/alipay/sdk/auth/C0324c.java
代码: this.f817b.f808c.loadUrl("javascript:" + this.f816a);
案例:14 / 42
行号:99
路径:/com/izhiping/activity/improve/ImproveDetailActivity.java
代码: view.loadUrl(url);
案例:15 / 42
行号:236
路径:/com/izhiping/activity/improve/ImproveDetailActivity.java
代码: this.detail_wb.loadUrl(this.detailData.articleH5Url);
案例:16 / 42
行号:23
路径:/com/izhiping/activity/AgreeActivity.java
代码: this.webView.loadUrl("http://www.zhipingjia.com/licence.html");
案例:17 / 42
行号:73
路径:/com/izhiping/activity/BaseWebActivity.java
代码: BaseWebActivity.this.mWebView.loadUrl(url);
案例:18 / 42
行号:141
路径:/com/izhiping/activity/SimpleWebActivity.java
代码: this.mWebView.loadUrl(this.mUrl);
案例:19 / 42
行号:319
路径:/com/tencent/open/TDialog.java
代码: this.f3775i.loadUrl(this.f3771e);
案例:20 / 42
行号:414
路径:/com/tencent/open/yyb/AppbarActivity.java
代码: this.mWebView.loadUrl(this.url);
案例:21 / 42
行号:347
路径:/com/tencent/open/yyb/AppbarJsBridge.java
代码: this.f2421a.loadUrl(stringBuffer.toString());
案例:22 / 42
行号:297
路径:/com/tencent/open/PKDialog.java
代码: this.mWebView.loadUrl(this.mUrl);
案例:23 / 42
行号:303
路径:/com/tencent/open/PKDialog.java
代码: this.mWebView.loadUrl("javascript:" + str + SocializeConstants.OP_OPEN_PAREN + str2 + SocializeConstants.OP_CLOSE_PAREN);
案例:24 / 42
行号:59
路径:/com/tencent/open/web/security/C1998c.java
代码: webView.loadUrl(stringBuffer2);
案例:25 / 42
行号:45
路径:/com/tencent/open/C1164a.java
代码: webView.loadUrl("javascript:window.JsBridge&&JsBridge.callback(" + this.f2272b + ",{'r':0,'result':" + str + "});");
案例:26 / 42
行号:52
路径:/com/tencent/open/C1164a.java
代码: webView.loadUrl("javascript:window.JsBridge&&JsBridge.callback(" + this.f2272b + ",{'r':1,'result':'no such method'})");
案例:27 / 42
行号:59
路径:/com/tencent/open/C1164a.java
代码: webView.loadUrl("javascript:" + str);
案例:28 / 42
行号:119
路径:/com/tencent/weibo/sdk/android/component/Authorize.java
代码: Authorize.this.webView.loadUrl(Authorize.this.path);
案例:29 / 42
行号:208
路径:/com/tencent/weibo/sdk/android/component/Authorize.java
代码: this.webView.loadUrl(this.path);
案例:30 / 42
行号:151
路径:/com/tencent/connect/auth/AuthDialog.java
代码: this.f1891a.f1892a.f1906j.loadUrl(this.f1891a.f1892a.f1911o);
案例:31 / 42
行号:170
路径:/com/tencent/connect/auth/AuthDialog.java
代码: this.f1892a.f1906j.loadUrl(this.f1892a.f1897a);
案例:32 / 42
行号:174
路径:/com/tencent/connect/auth/AuthDialog.java
代码: this.f1892a.f1906j.loadUrl(optString);
案例:33 / 42
行号:245
路径:/com/tencent/connect/auth/AuthDialog.java
代码: this.f1892a.f1906j.loadUrl(this.f1892a.m2213a());
案例:34 / 42
行号:529
路径:/com/tencent/connect/auth/AuthDialog.java
代码: this.f1906j.loadUrl(this.f1897a);
案例:35 / 42
行号:565
路径:/com/tencent/connect/auth/AuthDialog.java
代码: this.f1906j.loadUrl("javascript:" + str + SocializeConstants.OP_OPEN_PAREN + str2 + ");void(" + System.currentTimeMillis() + ");");
案例:36 / 42
行号:328
路径:/com/umeng/socialize/view/OauthDialog.java
代码: this.f2866c.loadUrl(m3124a(this.f2875l));
案例:37 / 42
行号:21
路径:/com/umeng/socialize/handler/TwitterWebActivity.java
代码: view.loadUrl(url);
案例:38 / 42
行号:50
路径:/com/umeng/socialize/handler/TwitterWebActivity.java
代码: this.wv.loadUrl(getIntent().getStringExtra("auth_url"));
案例:39 / 42
行号:65
路径:/com/renn/rennsdk/oauth/OAuthActivity.java
代码: OAuthActivity.this.mWebView.loadUrl(new StringBuilder(Config.BASE_AUTH_URL_RELEASE).append(OAuthActivity.this.generateAuthorizationURLString()).toString());
案例:40 / 42
行号:160
路径:/com/renn/rennsdk/oauth/OAuthActivity.java
代码: OAuthActivity.this.mWebView.loadUrl(OAuthActivity.this.mRetryUrl);
案例:41 / 42
行号:226
路径:/com/renn/rennsdk/oauth/OAuthActivity.java
代码: this.mWebView.loadUrl(new StringBuilder(Config.BASE_AUTH_URL_RELEASE).append(generateAuthorizationURLString()).toString());
案例:42 / 42
风险名称 WebView远程代码执行漏洞(accessibilityTraversal)
等级
总结 这个漏洞允许代码的远程执行
详情 WebWiew是一个Java类(桥接模式),它采用WebKit渲染引擎来显示网页,包含有通过历史记录来进行前进和后退浏览、放大和缩小、执行文本搜索等方法。在安卓17级别之前,安卓API存在代码远程执行的漏洞,因为JavaScript和Java之间的交互没有正确的限制。WebView JavaScript桥接可以利用映像来获取运行时对象的引用,从而可能被用来执行任意的Java代码。应用可以通过"addJavascriptInterface"函数将Java对象注入到WebView之中。除此之外,WebView有三个隐藏的系统接口,"accessibility", "accessibilityTraversal"和 "searchBoxJavaBridge"。这三个隐藏的接口同样有可能造成代码的远程执行。详情请参照 CVE-2012-6636 , CVE-2013-4710 , CVE-2014-1939CVE-2014-7224CVE-2012-6636 介绍了代码远程执行的基本情况; CVE-2013-4710 描述了某些特定型号设备的攻击向量; CVE-2014-1939 主要是关于安卓某些版本中"searchBoxJavaBridge_"的攻击向量; CVE-2014-7224 确认了两个新的攻击向量,"accessibility"和"accessibilityTraversal"
OWASP M7: 客户端注入
修复建议 仅在应用程序向WebView组件加载可信内容的时候使用addJavascriptInterface函数。如果可能的话,还可使用removeJavascriptInterface("searchBoxJavaBridge_"), removeJavascriptInterface("accessibility")和removeJavascriptInterface("accessibilityTraversal")完全去除JavaScript和Java之间的桥接来减少面临攻击的风险。有些应用开发自定义的使用"shouldOverrideUrlLoading"函数的 JavaScript桥接模式,并使用输入验证和输出转码以避免常见的注入攻击方法。我们不建议这样做,因为这样一来,风险就转移到了第三方。
案例 42 查看
案例 收起
行号:102
路径:/bolts/WebViewAppLinkResolver.java
代码: view.loadUrl(WebViewAppLinkResolver.TAG_EXTRACTION_JAVASCRIPT);
案例:1 / 42
行号:135
路径:/cn/jpush/android/p003b/p004a/C0164c.java
代码: webView.loadUrl(this.f155b.m128a());
案例:2 / 42
行号:289
路径:/cn/jpush/android/ui/PushActivity.java
代码: pushActivity.f452c.loadUrl(str);
案例:3 / 42
行号:291
路径:/cn/jpush/android/ui/PushActivity.java
代码: pushActivity.f452c.loadUrl(str2);
案例:4 / 42
行号:246
路径:/cn/jpush/android/ui/FullScreenView.java
代码: this.mWebView.loadUrl(str);
案例:5 / 42
行号:301
路径:/cn/jpush/android/ui/C0217c.java
代码: webView.loadUrl(str);
案例:6 / 42
行号:297
路径:/cn/jpush/android/ui/PopWinActivity.java
代码: this.f447c.loadUrl(str2);
案例:7 / 42
行号:299
路径:/cn/jpush/android/ui/PopWinActivity.java
代码: this.f447c.loadUrl(str);
案例:8 / 42
行号:66
路径:/com/facebook/internal/FacebookWebFallbackDialog.java
代码: webView.loadUrl("javascript:" + "(function() { var event = document.createEvent('Event'); event.initEvent('fbPlatformDialogMustClose',true,true); document.dispatchEvent(event);})();");
案例:9 / 42
行号:442
路径:/com/facebook/internal/WebDialog.java
代码: this.webView.loadUrl(this.url);
案例:10 / 42
行号:172
路径:/com/sina/weibo/sdk/component/WeiboSdkBrowser.java
代码: this.mWebView.loadUrl(url);
案例:11 / 42
行号:51
路径:/com/handmark/pulltorefresh/library/extras/PullToRefreshWebView2.java
代码: ((WebView) getRefreshableView()).loadUrl(DEF_JS_READY_PULL_DOWN_CALL);
案例:12 / 42
行号:56
路径:/com/handmark/pulltorefresh/library/extras/PullToRefreshWebView2.java
代码: ((WebView) getRefreshableView()).loadUrl(DEF_JS_READY_PULL_UP_CALL);
案例:13 / 42
行号:14
路径:/com/alipay/sdk/auth/C0324c.java
代码: this.f817b.f808c.loadUrl("javascript:" + this.f816a);
案例:14 / 42
行号:99
路径:/com/izhiping/activity/improve/ImproveDetailActivity.java
代码: view.loadUrl(url);
案例:15 / 42
行号:236
路径:/com/izhiping/activity/improve/ImproveDetailActivity.java
代码: this.detail_wb.loadUrl(this.detailData.articleH5Url);
案例:16 / 42
行号:23
路径:/com/izhiping/activity/AgreeActivity.java
代码: this.webView.loadUrl("http://www.zhipingjia.com/licence.html");
案例:17 / 42
行号:73
路径:/com/izhiping/activity/BaseWebActivity.java
代码: BaseWebActivity.this.mWebView.loadUrl(url);
案例:18 / 42
行号:141
路径:/com/izhiping/activity/SimpleWebActivity.java
代码: this.mWebView.loadUrl(this.mUrl);
案例:19 / 42
行号:319
路径:/com/tencent/open/TDialog.java
代码: this.f3775i.loadUrl(this.f3771e);
案例:20 / 42
行号:414
路径:/com/tencent/open/yyb/AppbarActivity.java
代码: this.mWebView.loadUrl(this.url);
案例:21 / 42
行号:347
路径:/com/tencent/open/yyb/AppbarJsBridge.java
代码: this.f2421a.loadUrl(stringBuffer.toString());
案例:22 / 42
行号:297
路径:/com/tencent/open/PKDialog.java
代码: this.mWebView.loadUrl(this.mUrl);
案例:23 / 42
行号:303
路径:/com/tencent/open/PKDialog.java
代码: this.mWebView.loadUrl("javascript:" + str + SocializeConstants.OP_OPEN_PAREN + str2 + SocializeConstants.OP_CLOSE_PAREN);
案例:24 / 42
行号:59
路径:/com/tencent/open/web/security/C1998c.java
代码: webView.loadUrl(stringBuffer2);
案例:25 / 42
行号:45
路径:/com/tencent/open/C1164a.java
代码: webView.loadUrl("javascript:window.JsBridge&&JsBridge.callback(" + this.f2272b + ",{'r':0,'result':" + str + "});");
案例:26 / 42
行号:52
路径:/com/tencent/open/C1164a.java
代码: webView.loadUrl("javascript:window.JsBridge&&JsBridge.callback(" + this.f2272b + ",{'r':1,'result':'no such method'})");
案例:27 / 42
行号:59
路径:/com/tencent/open/C1164a.java
代码: webView.loadUrl("javascript:" + str);
案例:28 / 42
行号:119
路径:/com/tencent/weibo/sdk/android/component/Authorize.java
代码: Authorize.this.webView.loadUrl(Authorize.this.path);
案例:29 / 42
行号:208
路径:/com/tencent/weibo/sdk/android/component/Authorize.java
代码: this.webView.loadUrl(this.path);
案例:30 / 42
行号:151
路径:/com/tencent/connect/auth/AuthDialog.java
代码: this.f1891a.f1892a.f1906j.loadUrl(this.f1891a.f1892a.f1911o);
案例:31 / 42
行号:170
路径:/com/tencent/connect/auth/AuthDialog.java
代码: this.f1892a.f1906j.loadUrl(this.f1892a.f1897a);
案例:32 / 42
行号:174
路径:/com/tencent/connect/auth/AuthDialog.java
代码: this.f1892a.f1906j.loadUrl(optString);
案例:33 / 42
行号:245
路径:/com/tencent/connect/auth/AuthDialog.java
代码: this.f1892a.f1906j.loadUrl(this.f1892a.m2213a());
案例:34 / 42
行号:529
路径:/com/tencent/connect/auth/AuthDialog.java
代码: this.f1906j.loadUrl(this.f1897a);
案例:35 / 42
行号:565
路径:/com/tencent/connect/auth/AuthDialog.java
代码: this.f1906j.loadUrl("javascript:" + str + SocializeConstants.OP_OPEN_PAREN + str2 + ");void(" + System.currentTimeMillis() + ");");
案例:36 / 42
行号:328
路径:/com/umeng/socialize/view/OauthDialog.java
代码: this.f2866c.loadUrl(m3124a(this.f2875l));
案例:37 / 42
行号:21
路径:/com/umeng/socialize/handler/TwitterWebActivity.java
代码: view.loadUrl(url);
案例:38 / 42
行号:50
路径:/com/umeng/socialize/handler/TwitterWebActivity.java
代码: this.wv.loadUrl(getIntent().getStringExtra("auth_url"));
案例:39 / 42
行号:65
路径:/com/renn/rennsdk/oauth/OAuthActivity.java
代码: OAuthActivity.this.mWebView.loadUrl(new StringBuilder(Config.BASE_AUTH_URL_RELEASE).append(OAuthActivity.this.generateAuthorizationURLString()).toString());
案例:40 / 42
行号:160
路径:/com/renn/rennsdk/oauth/OAuthActivity.java
代码: OAuthActivity.this.mWebView.loadUrl(OAuthActivity.this.mRetryUrl);
案例:41 / 42
行号:226
路径:/com/renn/rennsdk/oauth/OAuthActivity.java
代码: this.mWebView.loadUrl(new StringBuilder(Config.BASE_AUTH_URL_RELEASE).append(generateAuthorizationURLString()).toString());
案例:42 / 42
风险名称 忽略SSL错误信息风险
等级
总结 应用程序在使用WebKit加载页面的时候,忽略SSL错误信息,继续加载不可信任的页面。
详情 很多情况下应用程序需要与远程服务器通讯来实现一些功能。明文传输的数据容易被窃听盗取,所以数据加密非常重要。Android为开发者提供HTTPS连接来实行一些对安全有高要求的操作,比如登录网页(比如输入用户名/密码)和网上银行(比如银行转账)。HTTPS使用安全套接字层 (SSL Secure Sockets Layer,SSL)或者传输层安全性(Transport Layer Security, TLS)来保证安全传输。SSL 是一种安全协议,为网络通信提供安全及数据完整性。使用SSL可以安全的传输登录信息,社会保险号以及信用卡号码/CVC号码等敏感信息。虽然SSL协议是用来提高安全性能的,但如果开发者对其库函数使用不恰当,可能会将应用程序置于风险中,遭受中间人(man-in-the-middle,MiTM)攻击。中间人攻击是指攻击者与通讯的两端分别建立独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。消极的中间人攻击者只是窃听通讯内容;而活跃份子则会破坏篡改通讯内容。

在使用Android SSL库的时候,开发者常犯的错误有: 1) 不检查远程服务器端的证书链,信任所有证书;
2) 不验证远程服务器端的主机名,允许所有主机名;
3) 使用WebKit来加载页面的时候,忽略SSL错误信息,继续加载不可信的页面。

SSL证书用来验证网址的身份以及加密所要传输的数据。SSL证书有三类:1)由可信任的证书授权中心(certificate authority,CA),比如ComodoSymantec,以及GoDaddy,签名的证书; 2)由不可信的证书授权中心签名的证书;3)自签名证书。Android只能直接认证由可信任的证书授权中心以及其下属证书授权中心签名的证书。目前Android所信任的证书授权中心超过100家

在进行SSL连接的时候,需要进行证书校验。Android平台使用两个类来校验SSL证书:1)X509TrustManager类检查证书是不是由合法的证书授权中心签名的,并且检查证书是否过期;2)HostnameVerifier 类检查证书中的主机名与使用该证书的服务器的主机名是不是一致。Android中默认的SSL证书验证机制不接受不可信的连接,因而是安全的,但是Android允许开发者自定义证书验证方法。为了成功的进行网络连接,开发者可能会重写X509TrustManager和HostnameVerifier类来绕过合法的证书校验的步骤,应用程序因此可能会遭受中间人攻击,攻击者可能会看到甚至修改本应被HTTPS保护的传输内容。中间人攻击的示例可以参照这个网址。在这个例子中,攻击者成功的截获了用户名和密码。

开发者常犯的一个错误是在使用WebKit加载页面的时候,忽略SSL错误信息。如果加载页面的时候出现SSL错误,可以用Android WebViewClient中的回调函数onReceivedSslError来通知应用程序。SSL错误通常是因为SSL证书验证没通过(十有八九是因为证书是自签名的,或者由不可信的证书授权中心签名的)。应用程序必须用handler.cancel()或者handler.proceed()函数来处理错误信息。默认的处理方式是取消加载请求,并且取消所有待处理的、跟这个错误信息有关的请求。开发者也可以重写处理过程,忽略错误信息、继续加载不安全的网址。这样一来,SSL协议所提供的安全机制基本上就被破坏殆尽了。中间人攻击者可以用一张冒牌的证书来修改通讯,盗取cookies,欺骗用户。如果这个攻击跟JavaScript Bridge漏洞结合在一起,风险就更大了。JavaScript Bridge允许应用程序将Java代码暴露给JavaScripit代码,意味着攻击者不仅能够执行JavaScript 代码,还可以执行应用程序中的代码。如果一个应用程序将通讯录暴露给JavaScript Bridge,同时忽略SSL错误信息,就会给攻击者造成可乘之机,盗取通讯录信息。因而,我们不建议忽略WebKit的SSL错误信息。
OWASP M9: 错误的会话(session) 处理
修复建议 建议开发者对服务端和客户端证书进行严格校验,确保签名证书授权中心合法、证书中的主机名与当前服务器主机名匹配、以及证书没有过期。不建议通过改写X509TrustManager和HostnameVerifier类来覆盖Google默认的证书认证机制。如果自定义证书认证方法,不要信任所有证书和允许所有主机名。用WebView显示页面的时候,不要忽略SSL错误。如果SSL证书校验失败,应该采用默认的处理方法handler.cancel(),来停止问题页面的加载;慎重使用handler.proceed()函数来加载问题页面。
案例 6 查看
案例 收起
行号:23
路径:/com/alipay/sdk/app/b.java
代码:android.webkit.SslErrorHandler.proceed():void
案例:1 / 6
行号:11
路径:/com/alipay/sdk/app/d.java
代码:android.webkit.SslErrorHandler.proceed():void
案例:2 / 6
行号:52
路径:/com/alipay/sdk/auth/AuthActivity/b.java
代码:android.webkit.SslErrorHandler.proceed():void
案例:3 / 6
行号:11
路径:/com/alipay/sdk/auth/f.java
代码:android.webkit.SslErrorHandler.proceed():void
案例:4 / 6
行号:58
路径:/com/izhiping/activity/BaseWebActivity/2.java
代码:android.webkit.SslErrorHandler.proceed():void
案例:5 / 6
行号:93
路径:/com/renn/rennsdk/oauth/OAuthActivity/AuthWebViewClient.java
代码:android.webkit.SslErrorHandler.proceed():void
案例:6 / 6
风险名称 WebView远程代码执行漏洞(searchBoxJavaBridge)
等级
总结 这个漏洞允许代码的远程执行
详情 WebWiew是一个Java类(桥接模式),它采用WebKit渲染引擎来显示网页,包含有通过历史记录来进行前进和后退浏览、放大和缩小、执行文本搜索等方法。在安卓17级别之前,安卓API存在代码远程执行的漏洞,因为JavaScript和Java之间的交互没有正确的限制。WebView JavaScript桥接可以利用映像来获取运行时对象的引用,从而可能被用来执行任意的Java代码。应用可以通过"addJavascriptInterface"函数将Java对象注入到WebView之中。除此之外,WebView有三个隐藏的系统接口,"accessibility", "accessibilityTraversal"和 "searchBoxJavaBridge"。这三个隐藏的接口同样有可能造成代码的远程执行。详情请参照 CVE-2012-6636 , CVE-2013-4710, CVE-2014-1939CVE-2014-7224CVE-2012-6636 介绍了代码远程执行的基本情况; CVE-2013-4710 描述了某些特定型号设备的攻击向量; CVE-2014-1939 主要是关于安卓某些版本中"searchBoxJavaBridge_"的攻击向量; CVE-2014-7224 确认了两个新的攻击向量,"accessibility"和"accessibilityTraversal"
OWASP M7: 客户端注入
修复建议 仅在应用程序向WebView组件加载可信内容的时候使用addJavascriptInterface函数。如果可能的话,还可使用removeJavascriptInterface("searchBoxJavaBridge_"), removeJavascriptInterface("accessibility")和removeJavascriptInterface("accessibilityTraversal")完全去除JavaScript和Java之间的桥接来减少面临攻击的风险。有些应用开发自定义的使用"shouldOverrideUrlLoading"函数的 JavaScript桥接模式,并使用输入验证和输出转码以避免常见的注入攻击方法。我们不建议这样做,因为这样一来,风险就转移到了第三方。
案例 41 查看
案例 收起
行号:102
路径:/bolts/WebViewAppLinkResolver.java
代码: view.loadUrl(WebViewAppLinkResolver.TAG_EXTRACTION_JAVASCRIPT);
案例:1 / 41
行号:135
路径:/cn/jpush/android/p003b/p004a/C0164c.java
代码: webView.loadUrl(this.f155b.m128a());
案例:2 / 41
行号:289
路径:/cn/jpush/android/ui/PushActivity.java
代码: pushActivity.f452c.loadUrl(str);
案例:3 / 41
行号:291
路径:/cn/jpush/android/ui/PushActivity.java
代码: pushActivity.f452c.loadUrl(str2);
案例:4 / 41
行号:246
路径:/cn/jpush/android/ui/FullScreenView.java
代码: this.mWebView.loadUrl(str);
案例:5 / 41
行号:301
路径:/cn/jpush/android/ui/C0217c.java
代码: webView.loadUrl(str);
案例:6 / 41
行号:297
路径:/cn/jpush/android/ui/PopWinActivity.java
代码: this.f447c.loadUrl(str2);
案例:7 / 41
行号:299
路径:/cn/jpush/android/ui/PopWinActivity.java
代码: this.f447c.loadUrl(str);
案例:8 / 41
行号:66
路径:/com/facebook/internal/FacebookWebFallbackDialog.java
代码: webView.loadUrl("javascript:" + "(function() { var event = document.createEvent('Event'); event.initEvent('fbPlatformDialogMustClose',true,true); document.dispatchEvent(event);})();");
案例:9 / 41
行号:442
路径:/com/facebook/internal/WebDialog.java
代码: this.webView.loadUrl(this.url);
案例:10 / 41
行号:51
路径:/com/handmark/pulltorefresh/library/extras/PullToRefreshWebView2.java
代码: ((WebView) getRefreshableView()).loadUrl(DEF_JS_READY_PULL_DOWN_CALL);
案例:11 / 41
行号:56
路径:/com/handmark/pulltorefresh/library/extras/PullToRefreshWebView2.java
代码: ((WebView) getRefreshableView()).loadUrl(DEF_JS_READY_PULL_UP_CALL);
案例:12 / 41
行号:14
路径:/com/alipay/sdk/auth/C0324c.java
代码: this.f817b.f808c.loadUrl("javascript:" + this.f816a);
案例:13 / 41
行号:99
路径:/com/izhiping/activity/improve/ImproveDetailActivity.java
代码: view.loadUrl(url);
案例:14 / 41
行号:236
路径:/com/izhiping/activity/improve/ImproveDetailActivity.java
代码: this.detail_wb.loadUrl(this.detailData.articleH5Url);
案例:15 / 41
行号:23
路径:/com/izhiping/activity/AgreeActivity.java
代码: this.webView.loadUrl("http://www.zhipingjia.com/licence.html");
案例:16 / 41
行号:73
路径:/com/izhiping/activity/BaseWebActivity.java
代码: BaseWebActivity.this.mWebView.loadUrl(url);
案例:17 / 41
行号:141
路径:/com/izhiping/activity/SimpleWebActivity.java
代码: this.mWebView.loadUrl(this.mUrl);
案例:18 / 41
行号:319
路径:/com/tencent/open/TDialog.java
代码: this.f3775i.loadUrl(this.f3771e);
案例:19 / 41
行号:414
路径:/com/tencent/open/yyb/AppbarActivity.java
代码: this.mWebView.loadUrl(this.url);
案例:20 / 41
行号:347
路径:/com/tencent/open/yyb/AppbarJsBridge.java
代码: this.f2421a.loadUrl(stringBuffer.toString());
案例:21 / 41
行号:297
路径:/com/tencent/open/PKDialog.java
代码: this.mWebView.loadUrl(this.mUrl);
案例:22 / 41
行号:303
路径:/com/tencent/open/PKDialog.java
代码: this.mWebView.loadUrl("javascript:" + str + SocializeConstants.OP_OPEN_PAREN + str2 + SocializeConstants.OP_CLOSE_PAREN);
案例:23 / 41
行号:59
路径:/com/tencent/open/web/security/C1998c.java
代码: webView.loadUrl(stringBuffer2);
案例:24 / 41
行号:45
路径:/com/tencent/open/C1164a.java
代码: webView.loadUrl("javascript:window.JsBridge&&JsBridge.callback(" + this.f2272b + ",{'r':0,'result':" + str + "});");
案例:25 / 41
行号:52
路径:/com/tencent/open/C1164a.java
代码: webView.loadUrl("javascript:window.JsBridge&&JsBridge.callback(" + this.f2272b + ",{'r':1,'result':'no such method'})");
案例:26 / 41
行号:59
路径:/com/tencent/open/C1164a.java
代码: webView.loadUrl("javascript:" + str);
案例:27 / 41
行号:119
路径:/com/tencent/weibo/sdk/android/component/Authorize.java
代码: Authorize.this.webView.loadUrl(Authorize.this.path);
案例:28 / 41
行号:208
路径:/com/tencent/weibo/sdk/android/component/Authorize.java
代码: this.webView.loadUrl(this.path);
案例:29 / 41
行号:151
路径:/com/tencent/connect/auth/AuthDialog.java
代码: this.f1891a.f1892a.f1906j.loadUrl(this.f1891a.f1892a.f1911o);
案例:30 / 41
行号:170
路径:/com/tencent/connect/auth/AuthDialog.java
代码: this.f1892a.f1906j.loadUrl(this.f1892a.f1897a);
案例:31 / 41
行号:174
路径:/com/tencent/connect/auth/AuthDialog.java
代码: this.f1892a.f1906j.loadUrl(optString);
案例:32 / 41
行号:245
路径:/com/tencent/connect/auth/AuthDialog.java
代码: this.f1892a.f1906j.loadUrl(this.f1892a.m2213a());
案例:33 / 41
行号:529
路径:/com/tencent/connect/auth/AuthDialog.java
代码: this.f1906j.loadUrl(this.f1897a);
案例:34 / 41
行号:565
路径:/com/tencent/connect/auth/AuthDialog.java
代码: this.f1906j.loadUrl("javascript:" + str + SocializeConstants.OP_OPEN_PAREN + str2 + ");void(" + System.currentTimeMillis() + ");");
案例:35 / 41
行号:328
路径:/com/umeng/socialize/view/OauthDialog.java
代码: this.f2866c.loadUrl(m3124a(this.f2875l));
案例:36 / 41
行号:21
路径:/com/umeng/socialize/handler/TwitterWebActivity.java
代码: view.loadUrl(url);
案例:37 / 41
行号:50
路径:/com/umeng/socialize/handler/TwitterWebActivity.java
代码: this.wv.loadUrl(getIntent().getStringExtra("auth_url"));
案例:38 / 41
行号:65
路径:/com/renn/rennsdk/oauth/OAuthActivity.java
代码: OAuthActivity.this.mWebView.loadUrl(new StringBuilder(Config.BASE_AUTH_URL_RELEASE).append(OAuthActivity.this.generateAuthorizationURLString()).toString());
案例:39 / 41
行号:160
路径:/com/renn/rennsdk/oauth/OAuthActivity.java
代码: OAuthActivity.this.mWebView.loadUrl(OAuthActivity.this.mRetryUrl);
案例:40 / 41
行号:226
路径:/com/renn/rennsdk/oauth/OAuthActivity.java
代码: this.mWebView.loadUrl(new StringBuilder(Config.BASE_AUTH_URL_RELEASE).append(generateAuthorizationURLString()).toString());
案例:41 / 41
风险名称 本地数据存储漏洞(Shared Preferences)
等级
总结 Java环境中的getSharedPreferences支持"MODE_WORLD_READABLE"(全局可读)和"MODE_WORLD_WRITABLE"(全局可写)模式。这些模式允许对安卓设备Shared Preferences中的文件进行读写,可能会造成数据的泄漏。
详情 Android提供了以下几种数据存储方式:Shared Preferences, Internal Storage(内部存储), External Storage(外部存储), SQLite Databases, 和 Network Connection(网络连接)。Shared Preferences (通过SharedPreferences类来实现)允许用户将私人数据存储为键值对(key-value)。SharedPreferences 类提供了通用框架,允许保存和获取持久的基本数据类型的键-值对,包括布尔值、浮点值、整型值、长整型值以及字符串。这些数据在整个用户会话期间持续存在,即使应用程序已经关闭。Shared Preference 漏洞源于:1)开发者在创建SharedPrefrences对象的时候,将模式设为全局可读(MODE_WORLD_READABLE) 或者全局可写(MODE_WORLD_WRITABLE)。创建全局可读和全局可写的文件会将应用置于风险中,因为其他应用也可以访问该应用的数据,该应用的敏感数据就有可能会暴露给其它应用程序。这样一来,其他人就有可能获取存储在Shared Preferences文件里的数据;2)开发者将用户名、密码等敏感信息明文存储在Shared Preferences文件中,攻击者可以通过root攻击来查看敏感信息。
OWASP M2: 不安全的数据存储
修复建议 1)开发者应避免将用户名、密码等敏感数据信息明文存储在Shared Preferences文件中。由于Android系统的安全机制,存储在Shared Preferences文件里的数据可以不让其他应用访问,但是在Android设备被root之后,该安全机制将失效而导致信息泄露。 2)如果开发者创建Shared Preferences文件,推荐将模式设为"MODE_PRIVATE"。开发者应避免使用全局可读模式和全局可写模式来创建进程间通信的Shared Preferences文件。如果需要与其他进程应用进行数据共享,推荐使用更加正式的机制,比如ContentProvider, BroadcastReceiver, 和Service。
案例 13 查看
案例 收起
行号:347
路径:/cn/jpush/android/util/p.java
代码:android.preference.PreferenceManager.getDefaultSharedPreferences(android.content.Context):android.content.SharedPreferences
案例:1 / 13
行号:18
路径:/com/alipay/sdk/app/statistic/b.java
代码:android.preference.PreferenceManager.getDefaultSharedPreferences(android.content.Context):android.content.SharedPreferences
案例:2 / 13
行号:31
路径:/com/alipay/sdk/data/c.java
代码:android.preference.PreferenceManager.getDefaultSharedPreferences(android.content.Context):android.content.SharedPreferences
案例:3 / 13
行号:6
路径:/com/alipay/sdk/util/i.java
代码:android.preference.PreferenceManager.getDefaultSharedPreferences(android.content.Context):android.content.SharedPreferences
案例:4 / 13
行号:14
路径:/com/alipay/sdk/util/i.java
代码:android.preference.PreferenceManager.getDefaultSharedPreferences(android.content.Context):android.content.SharedPreferences
案例:5 / 13
行号:25
路径:/com/alipay/sdk/util/i.java
代码:android.preference.PreferenceManager.getDefaultSharedPreferences(android.content.Context):android.content.SharedPreferences
案例:6 / 13
行号:33
路径:/com/alipay/sdk/util/i.java
代码:android.preference.PreferenceManager.getDefaultSharedPreferences(android.content.Context):android.content.SharedPreferences
案例:7 / 13
行号:111
路径:/com/iflytek/thridparty/aa.java
代码:android.content.Context.getSharedPreferences(java.lang.String, int):android.content.SharedPreferences
案例:8 / 13
行号:140
路径:/com/iflytek/thridparty/aa.java
代码:android.content.Context.getSharedPreferences(java.lang.String, int):android.content.SharedPreferences
案例:9 / 13
行号:17
路径:/com/tencent/stat/common/p.java
代码:android.preference.PreferenceManager.getDefaultSharedPreferences(android.content.Context):android.content.SharedPreferences
案例:10 / 13
行号:11
路径:/com/tencent/wxop/stat/b/q.java
代码:android.preference.PreferenceManager.getDefaultSharedPreferences(android.content.Context):android.content.SharedPreferences
案例:11 / 13
行号:15
路径:/com/tencent/a/a/a/a/d.java
代码:android.preference.PreferenceManager.getDefaultSharedPreferences(android.content.Context):android.content.SharedPreferences
案例:12 / 13
行号:23
路径:/com/tencent/a/a/a/a/d.java
代码:android.preference.PreferenceManager.getDefaultSharedPreferences(android.content.Context):android.content.SharedPreferences
案例:13 / 13
风险名称 Activity组件导出风险
等级
总结 使用到intent filters的Activity组件不恰当导出,会导致第三方应用越权访问本应用的敏感数据。
详情 Activity组件为用户提供交互界面。在定义某个activity的时候,"android:exported"属性用来指定这个activity是否可以被第三方应用中的组件启用。如果属性值为"true",说明这个activity可以被第三方应用调用;如果属性值为"false", 说明所定义的activity只能被本应用或者与本应用有相同用户ID的应用调用。

如果对被导出activity组件的访问限制不足,其他应用,包括恶意应用,可能会启动这个activity,从而导致恶意应用滥用权限、访问敏感信息、修改本应用的内部状态,或者欺骗用户与本应用互动。

"android:exported"属性的默认值依赖于该activity是否有intent filter。如果该activity没有用到intent filters,只有在指定精确类名的时候,该activity才会被启用,说明这个activity只能被应用内部的组件使用(因为其他应用不知道它的类名)。这种情况下,"android:exported"的默认值为。"false"。 另外一方面,如果activity有至少一个intent filters,说明这个activity可供外部使用,这种情况下的"android:exported"的默认属性值为"true"。

根据activity中是否使用intent filters,activity组件的不恰当导出造成的风险可以分为如下两类:

类别1: Activity中没有使用到intent filters。如果activity本来的意图仅是供应用内部、或者有相同用户ID的应用使用,推荐使用"android:exported"的默认值 ("false")。在AndroidManifest.xml中设置"android:exported=true"允许其他应用启动该activity,会导致难以预料的行为或者漏洞。如果该activity供相关应用外部使用,开发者可以通过设置权限范围来限制activity对其他应用的暴露。为此,开发者可设置"android:exported=true",同时通过在AndroidManifest.xml中设置"android:protectionLevel=signature"或者"android:protectionLevel=signatureOrSystem"来控制对应用的访问权限。

类别2: Activity中使用到intent filters(即当前所检测到风险对应的类别)。在Android平台上,在AndroidManifest.xml文件中为activity定义intent filter意味着该activity可能会被其他应用导出。如果定义某个intent filter的时候,没有在AndroidManifest.xml中明确设置"android:exported=false",该activity可能被其他应用(包括恶意应用)激活滥用,造成信息泄露或者精心构造的攻击。如果该activity供其它应用外部使用,开发者可以将这些应用的用户ID设置成与本应用一样的,并在AndroidManifest.xml中设置"android:exported=false"。
OWASP M4:无意识的数据泄露
修复建议 如果activity本来的意图仅是供应用内部、或者供有相同用户ID的应用使用,推荐使用"android:exported"的默认值 ("false")。如果该activity供相关应用外部使用(没有用到intent filters),开发者可以通过设置权限范围来限制activity对其他应用的暴露。为此,开发者可设置"android:exported=true",同时通过在AndroidManifest.xm中设置"android:protectionLevel=signature"或者"android:protectionLevel=signatureOrSystem"来控制对应用的访问权限。

如果该activity供其它应用外部使用(用到intent filters),开发者可以将这些应用的用户ID设置成与本应用一样的,并在AndroidManifest.xml中设置"android:exported=false"。
案例 6 查看
案例 收起
行号:47~52
路径:/AndroidManifest.xml
代码:
案例:1 / 6
行号:165~171
路径:/AndroidManifest.xml
代码:
案例:2 / 6
行号:215~219
路径:/AndroidManifest.xml
代码:
案例:3 / 6
行号:220~224
路径:/AndroidManifest.xml
代码:
案例:4 / 6
行号:225~232
路径:/AndroidManifest.xml
代码:
案例:5 / 6
行号:234~241
路径:/AndroidManifest.xml
代码:
案例:6 / 6
风险名称 日志信息泄漏
等级
总结 应用程序使用了安卓日志机制,可能会泄漏敏感信息,攻击者可趁机用来提取私人数据,分析破解代码。
详情 安卓给开发者提供了输出日志的API(安卓开发文档),总共有六种方法:Log.e(),Log.w(),Log.i(),Log.d(),Log.v(),和Log.wtf()。其中Log.e()用来输出ERROR信息,Log.w()用来输出WARN信息,Log.i()用来输出INFO信息,Log.d()用来输出DEBUG信息,Log.v()用来输出VERBOSE信息, Log.wtf()用来报告一个基本上不可能发生的错误。按照输出信息从简到繁,顺序为ERROR,WARN,INFO,DEBUG,VERBOSE。

Logging方法主要是供开发者在开发的过程中用来调试程序的。很多安卓应用程序,甚至包括Android本身,都会用这些方法来输出调试信息。但实际上,除了调试信息,很多私人信息(email地址,密码,联系人信息,短信/彩信等)都会被安卓应用程序、Android结构本身、以及预安装的应用程序输出到日志文件中。导航信息,蓝牙信息,Wi-Fi信息都有可能会发送到日志文件里。这样一来,攻击者会利用logging方法来窃取敏感信息,将Log类变成信息泄漏的绝佳之地。比如安卓Mozilla Firebox 38.0之前的版本将URL的信息写到安卓的日志系统里,给攻击者窃取敏感信息提供了可乘之机(详情请参照CVE-2015-2714)。

四种方法可以用来读取日志信息(并用来执行针对应用程序的潜在攻击)。

1. 通过Android开发工具提供的命令行logcat 可以看到内部日志,包括设备/模拟器抛出的错误信息、开发者通过Log类写的日志信息。当移动设备/模拟器连接到PC机上之后,通过adb logcat命令可以启动logcat工具。

2. 使用Eclipse之类的开发工具。在Eclipse IDE运行的时候,将移动设备/模拟器连接到PC机上。在应用程序运行的时候,所有的日志信息都可以在Ecplise的"LogCat"选项中看到。

3. 通过创建第三方应用,日志信息也可以被读取出来。如果第三方应用程序调用了函数Runtime.getRuntime().exec("logcat"),并在AndroidManifest.xml 中设置了READ_LOGS权限,它就可以很容易的拿到其他应用的日志。更加糟糕的是,如果某个恶意程序中设置了logcat -v time 命令,它就可以对其他应用的使用情况(打开蓝牙,载入某个网址等)进行实时追踪。
值得注意的是,从Android 4.1 版本(API级别16)起,READ_LOGS的权限保护级别从"高危权限"改成了"证书签名/系统/开发权限"。这意味着第三方应用不再能够读取系统或者其他应用写的日志文件了。但是这并不能解决所有的问题。一方面,有些设备一辈子都不会更新到4.1版本。另一方面,如果设备被root了,攻击者就可以照常运行攻击代码以及权限。

4. 除了以上方法外,如果开发者将配置文件中"debuggable"属性的值设为"true",允许应用被调试,也可以能会通过Log类泄漏信息,造成风险。配置文件AndroidManifest.xml中的"debuggable"属性决定应用能否被调试(即使当应用正在用户模型中运行的时候)(安卓开发文档)。在默认的情况下,这个属性的值为"false"。当"android:debuggable"的值设为"true"的时候,攻击者可以任意调试该应用,即使在没有root权限的情况下,也能控制该应用。这样一来,攻击者就可以很容易拿到敏感数据,分析破解代码。
OWASP M4:无意识的数据泄露
修复建议 作为开发者,永远不要将敏感信息写到日志中。我们推荐在应用程序的发行版本中,去掉所有不必要的Log函数。如果要打印敏感信息,可以使用Log.d(),因为这个函数可以编译,但在运行的时候会自动去掉。Log.v()函数只能在开发的时候用,在发行版本中一定要去掉。对于用户来说,要将设备升级到4.1或者更新的版本,来防止用到READ_LOGS权限的攻击。
案例 596 查看
案例 收起
行号:52
路径:/android/support/v4/app/ActionBarDrawerToggleHoneycomb.java
代码:android.util.Log.w(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:1 / 596
行号:57
路径:/android/support/v4/app/ActionBarDrawerToggleHoneycomb.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:2 / 596
行号:76
路径:/android/support/v4/app/ActionBarDrawerToggleHoneycomb.java
代码:android.util.Log.w(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:3 / 596
行号:114
路径:/android/support/v4/app/BackStackState.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:4 / 596
行号:138
路径:/android/support/v4/app/BackStackState.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:5 / 596
行号:19
路径:/android/support/v4/app/BundleCompatDonut.java
代码:android.util.Log.i(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:6 / 596
行号:35
路径:/android/support/v4/app/BundleCompatDonut.java
代码:android.util.Log.i(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:7 / 596
行号:47
路径:/android/support/v4/app/BundleCompatDonut.java
代码:android.util.Log.i(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:8 / 596
行号:65
路径:/android/support/v4/app/BundleCompatDonut.java
代码:android.util.Log.i(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:9 / 596
行号:89
路径:/android/support/v4/app/FragmentState.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:10 / 596
行号:29
路径:/android/support/v4/app/NavUtils/NavUtilsImplBase.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:11 / 596
行号:163
路径:/android/support/v4/app/NotificationCompatJellybean.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:12 / 596
行号:175
路径:/android/support/v4/app/NotificationCompatJellybean.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:13 / 596
行号:179
路径:/android/support/v4/app/NotificationCompatJellybean.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:14 / 596
行号:227
路径:/android/support/v4/app/NotificationCompatJellybean.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:15 / 596
行号:242
路径:/android/support/v4/app/NotificationCompatJellybean.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:16 / 596
行号:266
路径:/android/support/v4/app/NotificationCompatJellybean.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:17 / 596
行号:269
路径:/android/support/v4/app/NotificationCompatJellybean.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:18 / 596
行号:126
路径:/android/support/v4/app/NotificationManagerCompat/SideChannelManager.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:19 / 596
行号:133
路径:/android/support/v4/app/NotificationManagerCompat/SideChannelManager.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:20 / 596
行号:149
路径:/android/support/v4/app/NotificationManagerCompat/SideChannelManager.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:21 / 596
行号:158
路径:/android/support/v4/app/NotificationManagerCompat/SideChannelManager.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:22 / 596
行号:168
路径:/android/support/v4/app/NotificationManagerCompat/SideChannelManager.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:23 / 596
行号:185
路径:/android/support/v4/app/NotificationManagerCompat/SideChannelManager.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:24 / 596
行号:203
路径:/android/support/v4/app/NotificationManagerCompat/SideChannelManager.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:25 / 596
行号:209
路径:/android/support/v4/app/NotificationManagerCompat/SideChannelManager.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:26 / 596
行号:217
路径:/android/support/v4/app/NotificationManagerCompat/SideChannelManager.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:27 / 596
行号:231
路径:/android/support/v4/app/NotificationManagerCompat/SideChannelManager.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:28 / 596
行号:237
路径:/android/support/v4/app/NotificationManagerCompat/SideChannelManager.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:29 / 596
行号:240
路径:/android/support/v4/app/NotificationManagerCompat/SideChannelManager.java
代码:android.util.Log.w(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:30 / 596
行号:337
路径:/android/support/v4/app/ShareCompat/IntentReader.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:31 / 596
行号:349
路径:/android/support/v4/app/ShareCompat/IntentReader.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:32 / 596
行号:362
路径:/android/support/v4/app/ShareCompat/IntentReader.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:33 / 596
行号:117
路径:/android/support/v4/app/TaskStackBuilder.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:34 / 596
行号:135
路径:/android/support/v4/content/ContextCompat.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:35 / 596
行号:164
路径:/android/support/v4/content/LocalBroadcastManager.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:36 / 596
行号:183
路径:/android/support/v4/content/LocalBroadcastManager.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:37 / 596
行号:206
路径:/android/support/v4/content/LocalBroadcastManager.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:38 / 596
行号:215
路径:/android/support/v4/content/LocalBroadcastManager.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:39 / 596
行号:240
路径:/android/support/v4/content/LocalBroadcastManager.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:40 / 596
行号:276
路径:/android/support/v4/content/LocalBroadcastManager.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:41 / 596
行号:41
路径:/android/support/v4/content/WakefulBroadcastReceiver.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:42 / 596
行号:18
路径:/android/support/v4/graphics/drawable/DrawableCompatJellybeanMr1.java
代码:android.util.Log.i(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:43 / 596
行号:26
路径:/android/support/v4/graphics/drawable/DrawableCompatJellybeanMr1.java
代码:android.util.Log.i(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:44 / 596
行号:38
路径:/android/support/v4/graphics/drawable/DrawableCompatJellybeanMr1.java
代码:android.util.Log.i(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:45 / 596
行号:46
路径:/android/support/v4/graphics/drawable/DrawableCompatJellybeanMr1.java
代码:android.util.Log.i(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:46 / 596
行号:36
路径:/android/support/v4/graphics/drawable/RoundedBitmapDrawableFactory.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:47 / 596
行号:44
路径:/android/support/v4/graphics/drawable/RoundedBitmapDrawableFactory.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:48 / 596
行号:31
路径:/android/support/v4/media/MediaBrowserCompat/CallbackHandler.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:49 / 596
行号:454
路径:/android/support/v4/media/MediaBrowserCompat/MediaBrowserImplApi21.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:50 / 596
行号:472
路径:/android/support/v4/media/MediaBrowserCompat/MediaBrowserImplApi21.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:51 / 596
行号:487
路径:/android/support/v4/media/MediaBrowserCompat/MediaBrowserImplApi21.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:52 / 596
行号:503
路径:/android/support/v4/media/MediaBrowserCompat/MediaBrowserImplApi21.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:53 / 596
行号:524
路径:/android/support/v4/media/MediaBrowserCompat/MediaBrowserImplApi21.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:54 / 596
行号:552
路径:/android/support/v4/media/MediaBrowserCompat/MediaBrowserImplApi21.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:55 / 596
行号:608
路径:/android/support/v4/media/MediaBrowserCompat/MediaBrowserServiceImplBase/MediaServiceConnection/1.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:56 / 596
行号:642
路径:/android/support/v4/media/MediaBrowserCompat/MediaBrowserServiceImplBase/MediaServiceConnection.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:57 / 596
行号:680
路径:/android/support/v4/media/MediaBrowserCompat/MediaBrowserServiceImplBase.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:58 / 596
行号:700
路径:/android/support/v4/media/MediaBrowserCompat/MediaBrowserServiceImplBase.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:59 / 596
行号:770
路径:/android/support/v4/media/MediaBrowserCompat/MediaBrowserServiceImplBase.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:60 / 596
行号:785
路径:/android/support/v4/media/MediaBrowserCompat/MediaBrowserServiceImplBase.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:61 / 596
行号:799
路径:/android/support/v4/media/MediaBrowserCompat/MediaBrowserServiceImplBase.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:62 / 596
行号:809
路径:/android/support/v4/media/MediaBrowserCompat/MediaBrowserServiceImplBase.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:63 / 596
行号:824
路径:/android/support/v4/media/MediaBrowserCompat/MediaBrowserServiceImplBase.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:64 / 596
行号:840
路径:/android/support/v4/media/MediaBrowserCompat/MediaBrowserServiceImplBase.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:65 / 596
行号:845
路径:/android/support/v4/media/MediaBrowserCompat/MediaBrowserServiceImplBase.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:66 / 596
行号:850
路径:/android/support/v4/media/MediaBrowserCompat/MediaBrowserServiceImplBase.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:67 / 596
行号:895
路径:/android/support/v4/media/MediaBrowserCompat/MediaBrowserServiceImplBase.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:68 / 596
行号:901
路径:/android/support/v4/media/MediaBrowserCompat/MediaBrowserServiceImplBase.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:69 / 596
行号:902
路径:/android/support/v4/media/MediaBrowserCompat/MediaBrowserServiceImplBase.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:70 / 596
行号:903
路径:/android/support/v4/media/MediaBrowserCompat/MediaBrowserServiceImplBase.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:71 / 596
行号:904
路径:/android/support/v4/media/MediaBrowserCompat/MediaBrowserServiceImplBase.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:72 / 596
行号:905
路径:/android/support/v4/media/MediaBrowserCompat/MediaBrowserServiceImplBase.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:73 / 596
行号:906
路径:/android/support/v4/media/MediaBrowserCompat/MediaBrowserServiceImplBase.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:74 / 596
行号:907
路径:/android/support/v4/media/MediaBrowserCompat/MediaBrowserServiceImplBase.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:75 / 596
行号:908
路径:/android/support/v4/media/MediaBrowserCompat/MediaBrowserServiceImplBase.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:76 / 596
行号:909
路径:/android/support/v4/media/MediaBrowserCompat/MediaBrowserServiceImplBase.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:77 / 596
行号:910
路径:/android/support/v4/media/MediaBrowserCompat/MediaBrowserServiceImplBase.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:78 / 596
行号:138
路径:/android/support/v4/media/MediaBrowserServiceCompat/ServiceHandler.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:79 / 596
行号:183
路径:/android/support/v4/media/MediaBrowserServiceCompat/ServiceImpl/1.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:80 / 596
行号:188
路径:/android/support/v4/media/MediaBrowserServiceCompat/ServiceImpl/1.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:81 / 596
行号:198
路径:/android/support/v4/media/MediaBrowserServiceCompat/ServiceImpl/1.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:82 / 596
行号:222
路径:/android/support/v4/media/MediaBrowserServiceCompat/ServiceImpl/3.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:83 / 596
行号:235
路径:/android/support/v4/media/MediaBrowserServiceCompat/ServiceImpl/4.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:84 / 596
行号:237
路径:/android/support/v4/media/MediaBrowserServiceCompat/ServiceImpl/4.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:85 / 596
行号:499
路径:/android/support/v4/media/MediaBrowserServiceCompat/1.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:86 / 596
行号:609
路径:/android/support/v4/media/MediaBrowserServiceCompat/3.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:87 / 596
行号:208
路径:/android/support/v4/media/MediaMetadataCompat.java
代码:android.util.Log.w(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:88 / 596
行号:218
路径:/android/support/v4/media/MediaMetadataCompat.java
代码:android.util.Log.w(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:89 / 596
行号:91
路径:/android/support/v4/media/RatingCompat.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:90 / 596
行号:97
路径:/android/support/v4/media/RatingCompat.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:91 / 596
行号:105
路径:/android/support/v4/media/RatingCompat.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:92 / 596
行号:399
路径:/android/support/v4/media/session/MediaControllerCompat/MediaControllerImplBase.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:93 / 596
行号:413
路径:/android/support/v4/media/session/MediaControllerCompat/MediaControllerImplBase.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:94 / 596
行号:424
路径:/android/support/v4/media/session/MediaControllerCompat/MediaControllerImplBase.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:95 / 596
行号:440
路径:/android/support/v4/media/session/MediaControllerCompat/MediaControllerImplBase.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:96 / 596
行号:449
路径:/android/support/v4/media/session/MediaControllerCompat/MediaControllerImplBase.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:97 / 596
行号:458
路径:/android/support/v4/media/session/MediaControllerCompat/MediaControllerImplBase.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:98 / 596
行号:467
路径:/android/support/v4/media/session/MediaControllerCompat/MediaControllerImplBase.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:99 / 596
行号:476
路径:/android/support/v4/media/session/MediaControllerCompat/MediaControllerImplBase.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:100 / 596
行号:485
路径:/android/support/v4/media/session/MediaControllerCompat/MediaControllerImplBase.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:101 / 596
行号:494
路径:/android/support/v4/media/session/MediaControllerCompat/MediaControllerImplBase.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:102 / 596
行号:504
路径:/android/support/v4/media/session/MediaControllerCompat/MediaControllerImplBase.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:103 / 596
行号:513
路径:/android/support/v4/media/session/MediaControllerCompat/MediaControllerImplBase.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:104 / 596
行号:522
路径:/android/support/v4/media/session/MediaControllerCompat/MediaControllerImplBase.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:105 / 596
行号:530
路径:/android/support/v4/media/session/MediaControllerCompat/MediaControllerImplBase.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:106 / 596
行号:538
路径:/android/support/v4/media/session/MediaControllerCompat/MediaControllerImplBase.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:107 / 596
行号:546
路径:/android/support/v4/media/session/MediaControllerCompat/MediaControllerImplBase.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:108 / 596
行号:641
路径:/android/support/v4/media/session/MediaControllerCompat/TransportControlsBase.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:109 / 596
行号:649
路径:/android/support/v4/media/session/MediaControllerCompat/TransportControlsBase.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:110 / 596
行号:657
路径:/android/support/v4/media/session/MediaControllerCompat/TransportControlsBase.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:111 / 596
行号:665
路径:/android/support/v4/media/session/MediaControllerCompat/TransportControlsBase.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:112 / 596
行号:673
路径:/android/support/v4/media/session/MediaControllerCompat/TransportControlsBase.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:113 / 596
行号:681
路径:/android/support/v4/media/session/MediaControllerCompat/TransportControlsBase.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:114 / 596
行号:689
路径:/android/support/v4/media/session/MediaControllerCompat/TransportControlsBase.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:115 / 596
行号:697
路径:/android/support/v4/media/session/MediaControllerCompat/TransportControlsBase.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:116 / 596
行号:705
路径:/android/support/v4/media/session/MediaControllerCompat/TransportControlsBase.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:117 / 596
行号:713
路径:/android/support/v4/media/session/MediaControllerCompat/TransportControlsBase.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:118 / 596
行号:721
路径:/android/support/v4/media/session/MediaControllerCompat/TransportControlsBase.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:119 / 596
行号:729
路径:/android/support/v4/media/session/MediaControllerCompat/TransportControlsBase.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:120 / 596
行号:737
路径:/android/support/v4/media/session/MediaControllerCompat/TransportControlsBase.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:121 / 596
行号:749
路径:/android/support/v4/media/session/MediaControllerCompat/TransportControlsBase.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:122 / 596
行号:1325
路径:/android/support/v4/media/session/MediaSessionCompat.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:123 / 596
行号:36
路径:/android/support/v4/media/session/MediaSessionCompatApi18.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:124 / 596
行号:15
路径:/android/support/v4/os/EnvironmentCompat.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:125 / 596
行号:86
路径:/android/support/v4/print/PrintHelperKitkat/1.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:126 / 596
行号:248
路径:/android/support/v4/print/PrintHelperKitkat/2.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:127 / 596
行号:341
路径:/android/support/v4/print/PrintHelperKitkat.java
代码:android.util.Log.w(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:128 / 596
行号:350
路径:/android/support/v4/print/PrintHelperKitkat.java
代码:android.util.Log.w(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:129 / 596
行号:44
路径:/android/support/v4/provider/DocumentsContractApi19.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:130 / 596
行号:142
路径:/android/support/v4/provider/DocumentsContractApi19.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:131 / 596
行号:163
路径:/android/support/v4/provider/DocumentsContractApi19.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:132 / 596
行号:31
路径:/android/support/v4/provider/DocumentsContractApi21.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:133 / 596
行号:15
路径:/android/support/v4/speech/tts/TextToSpeechICS.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:134 / 596
行号:25
路径:/android/support/v4/util/AtomicFile.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:135 / 596
行号:49
路径:/android/support/v4/util/AtomicFile.java
代码:android.util.Log.w(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:136 / 596
行号:62
路径:/android/support/v4/util/AtomicFile.java
代码:android.util.Log.w(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:137 / 596
行号:31
路径:/android/support/v4/util/LogWriter.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:138 / 596
行号:67
路径:/android/support/v4/view/ActionProvider.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:139 / 596
行号:37
路径:/android/support/v4/view/LayoutInflaterCompatHC.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:140 / 596
行号:45
路径:/android/support/v4/view/LayoutInflaterCompatHC.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:141 / 596
行号:184
路径:/android/support/v4/view/MenuItemCompat.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:142 / 596
行号:192
路径:/android/support/v4/view/MenuItemCompat.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:143 / 596
行号:459
路径:/android/support/v4/view/ViewCompat/BaseViewCompatImpl.java
代码:android.util.Log.d(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:144 / 596
行号:475
路径:/android/support/v4/view/ViewCompat/BaseViewCompatImpl.java
代码:android.util.Log.d(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:145 / 596
行号:491
路径:/android/support/v4/view/ViewCompat/BaseViewCompatImpl.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:146 / 596
行号:18
路径:/android/support/v4/view/ViewCompatEclairMr1.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:147 / 596
行号:25
路径:/android/support/v4/view/ViewCompatEclairMr1.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:148 / 596
行号:27
路径:/android/support/v4/view/ViewCompatEclairMr1.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:149 / 596
行号:29
路径:/android/support/v4/view/ViewCompatEclairMr1.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:150 / 596
行号:576
路径:/android/support/v4/view/ViewPager.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:151 / 596
行号:585
路径:/android/support/v4/view/ViewPager.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:152 / 596
行号:612
路径:/android/support/v4/view/ViewPager.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:153 / 596
行号:2126
路径:/android/support/v4/view/ViewPager.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:154 / 596
行号:12
路径:/android/support/v4/view/ViewParentCompatLollipop.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:155 / 596
行号:21
路径:/android/support/v4/view/ViewParentCompatLollipop.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:156 / 596
行号:29
路径:/android/support/v4/view/ViewParentCompatLollipop.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:157 / 596
行号:37
路径:/android/support/v4/view/ViewParentCompatLollipop.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:158 / 596
行号:45
路径:/android/support/v4/view/ViewParentCompatLollipop.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:159 / 596
行号:53
路径:/android/support/v4/view/ViewParentCompatLollipop.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:160 / 596
行号:62
路径:/android/support/v4/view/ViewParentCompatLollipop.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:161 / 596
行号:42
路径:/android/support/v4/widget/CompoundButtonCompatDonut.java
代码:android.util.Log.i(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:162 / 596
行号:50
路径:/android/support/v4/widget/CompoundButtonCompatDonut.java
代码:android.util.Log.i(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:163 / 596
行号:14
路径:/android/support/v4/widget/PopupWindowCompatApi21.java
代码:android.util.Log.i(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:164 / 596
行号:23
路径:/android/support/v4/widget/PopupWindowCompatApi21.java
代码:android.util.Log.i(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:165 / 596
行号:33
路径:/android/support/v4/widget/PopupWindowCompatApi21.java
代码:android.util.Log.i(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:166 / 596
行号:294
路径:/android/support/v4/widget/SlidingPaneLayout/SlidingPanelLayoutImplJB.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:167 / 596
行号:300
路径:/android/support/v4/widget/SlidingPaneLayout/SlidingPanelLayoutImplJB.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:168 / 596
行号:313
路径:/android/support/v4/widget/SlidingPaneLayout/SlidingPanelLayoutImplJB.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:169 / 596
行号:555
路径:/android/support/v4/widget/SlidingPaneLayout.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:170 / 596
行号:940
路径:/android/support/v4/widget/SlidingPaneLayout.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:171 / 596
行号:58
路径:/android/support/v4/widget/TextViewCompatDonut.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:172 / 596
行号:67
路径:/android/support/v4/widget/TextViewCompatDonut.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:173 / 596
行号:1396
路径:/android/support/v4/widget/ViewDragHelper.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:174 / 596
行号:47
路径:/bolts/MeasurementEvent.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:175 / 596
行号:59
路径:/bolts/MeasurementEvent.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:176 / 596
行号:121
路径:/cn/jpush/android/b/a/c.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:177 / 596
行号:391
路径:/cn/jpush/android/b/a/d.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:178 / 596
行号:421
路径:/cn/jpush/android/b/a/d.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:179 / 596
行号:430
路径:/cn/jpush/android/b/a/d.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:180 / 596
行号:86
路径:/cn/jpush/android/util/JLogger.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:181 / 596
行号:92
路径:/cn/jpush/android/util/JLogger.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:182 / 596
行号:98
路径:/cn/jpush/android/util/JLogger.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:183 / 596
行号:104
路径:/cn/jpush/android/util/JLogger.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:184 / 596
行号:110
路径:/cn/jpush/android/util/JLogger.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:185 / 596
行号:20
路径:/com/alibaba/sdk/android/oss/common/OSSLog.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:186 / 596
行号:26
路径:/com/alibaba/sdk/android/oss/common/OSSLog.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:187 / 596
行号:32
路径:/com/alibaba/sdk/android/oss/common/OSSLog.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:188 / 596
行号:38
路径:/com/alibaba/sdk/android/oss/common/OSSLog.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:189 / 596
行号:44
路径:/com/alibaba/sdk/android/oss/common/OSSLog.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:190 / 596
行号:13
路径:/com/alipay/sdk/util/c.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:191 / 596
行号:40
路径:/com/alipay/share/sdk/openapi/APMediaMessage/Builder.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:192 / 596
行号:84
路径:/com/alipay/share/sdk/openapi/APMediaMessage.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:193 / 596
行号:90
路径:/com/alipay/share/sdk/openapi/APMediaMessage.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:194 / 596
行号:93
路径:/com/alipay/share/sdk/openapi/APMediaMessage.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:195 / 596
行号:96
路径:/com/alipay/share/sdk/openapi/APMediaMessage.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:196 / 596
行号:101
路径:/com/alipay/share/sdk/openapi/APMediaMessage.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:197 / 596
行号:34
路径:/com/alipay/share/sdk/openapi/SendMessageToZFB/Req.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:198 / 596
行号:22
路径:/com/alipay/share/sdk/openapi/channel/APMessage/Receiver.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:199 / 596
行号:25
路径:/com/alipay/share/sdk/openapi/channel/APMessage/Receiver.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:200 / 596
行号:31
路径:/com/alipay/share/sdk/openapi/channel/APMessage/Receiver.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:201 / 596
行号:56
路径:/com/alipay/share/sdk/openapi/channel/APMessage.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:202 / 596
行号:7
路径:/com/alipay/share/sdk/openapi/channel/APMessageAct.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:203 / 596
行号:23
路径:/com/alipay/share/sdk/openapi/channel/APMessageAct.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:204 / 596
行号:26
路径:/com/alipay/share/sdk/openapi/channel/APMessageAct.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:205 / 596
行号:29
路径:/com/alipay/share/sdk/openapi/channel/APMessageAct.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:206 / 596
行号:69
路径:/com/android/volley/VolleyLog.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:207 / 596
行号:74
路径:/com/android/volley/VolleyLog.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:208 / 596
行号:78
路径:/com/android/volley/VolleyLog.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:209 / 596
行号:82
路径:/com/android/volley/VolleyLog.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:210 / 596
行号:86
路径:/com/android/volley/VolleyLog.java
代码:android.util.Log.wtf(java.lang.String, java.lang.String):int
案例:211 / 596
行号:90
路径:/com/android/volley/VolleyLog.java
代码:android.util.Log.wtf(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:212 / 596
行号:159
路径:/com/facebook/AccessTokenManager/2.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:213 / 596
行号:42
路径:/com/facebook/FacebookContentProvider.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:214 / 596
行号:185
路径:/com/facebook/FacebookSdk.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:215 / 596
行号:787
路径:/com/facebook/GraphRequest.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:216 / 596
行号:68
路径:/com/facebook/GraphRequestAsyncTask.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:217 / 596
行号:84
路径:/com/facebook/TestUserManager.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:218 / 596
行号:155
路径:/com/facebook/TestUserManager.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:219 / 596
行号:315
路径:/com/facebook/appevents/AppEventsLogger/PersistedAppSessionInfo.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:220 / 596
行号:356
路径:/com/facebook/appevents/AppEventsLogger/PersistedAppSessionInfo.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:221 / 596
行号:397
路径:/com/facebook/appevents/AppEventsLogger/PersistedAppSessionInfo.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:222 / 596
行号:412
路径:/com/facebook/appevents/AppEventsLogger/PersistedAppSessionInfo.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:223 / 596
行号:516
路径:/com/facebook/appevents/AppEventsLogger/PersistedEvents.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:224 / 596
行号:531
路径:/com/facebook/appevents/AppEventsLogger/PersistedEvents.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:225 / 596
行号:555
路径:/com/facebook/appevents/AppEventsLogger/PersistedEvents.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:226 / 596
行号:572
路径:/com/facebook/appevents/AppEventsLogger/PersistedEvents.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:227 / 596
行号:700
路径:/com/facebook/appevents/AppEventsLogger.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:228 / 596
行号:77
路径:/com/facebook/applinks/AppLinkData.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:229 / 596
行号:89
路径:/com/facebook/applinks/AppLinkData.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:230 / 596
行号:101
路径:/com/facebook/applinks/AppLinkData.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:231 / 596
行号:179
路径:/com/facebook/applinks/AppLinkData.java
代码:android.util.Log.d(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:232 / 596
行号:181
路径:/com/facebook/applinks/AppLinkData.java
代码:android.util.Log.d(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:233 / 596
行号:131
路径:/com/facebook/internal/AttributionIdentifiers.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:234 / 596
行号:111
路径:/com/facebook/internal/NativeAppCallAttachmentStore.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:235 / 596
行号:574
路径:/com/facebook/internal/Utility.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:236 / 596
行号:580
路径:/com/facebook/internal/Utility.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:237 / 596
行号:586
路径:/com/facebook/internal/Utility.java
代码:android.util.Log.d(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:238 / 596
行号:97
路径:/com/facebook/internal/Validate.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:239 / 596
行号:120
路径:/com/facebook/internal/Validate.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:240 / 596
行号:54
路径:/com/facebook/share/ShareApi.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:241 / 596
行号:410
路径:/com/facebook/share/internal/LikeActionController.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:242 / 596
行号:558
路径:/com/facebook/share/internal/LikeActionController.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:243 / 596
行号:591
路径:/com/facebook/share/internal/LikeActionController.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:244 / 596
行号:616
路径:/com/facebook/share/internal/LikeActionController.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:245 / 596
行号:439
路径:/com/facebook/share/internal/VideoUploader.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:246 / 596
行号:50
路径:/com/handmark/pulltorefresh/library/OverscrollHelper.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:247 / 596
行号:222
路径:/com/handmark/pulltorefresh/library/SwipeMenuLayout.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:248 / 596
行号:6
路径:/com/handmark/pulltorefresh/library/internal/Utils.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:249 / 596
行号:16
路径:/com/iflytek/common/c.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:250 / 596
行号:8
路径:/com/iflytek/sunflower/c/g.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:251 / 596
行号:14
路径:/com/iflytek/sunflower/c/g.java
代码:android.util.Log.d(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:252 / 596
行号:24
路径:/com/iflytek/sunflower/c/g.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:253 / 596
行号:30
路径:/com/iflytek/sunflower/c/g.java
代码:android.util.Log.i(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:254 / 596
行号:40
路径:/com/iflytek/sunflower/c/g.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:255 / 596
行号:46
路径:/com/iflytek/sunflower/c/g.java
代码:android.util.Log.w(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:256 / 596
行号:52
路径:/com/iflytek/sunflower/c/g.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:257 / 596
行号:58
路径:/com/iflytek/sunflower/c/g.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:258 / 596
行号:64
路径:/com/iflytek/sunflower/c/g.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:259 / 596
行号:70
路径:/com/iflytek/sunflower/c/g.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:260 / 596
行号:79
路径:/com/iflytek/thridparty/a.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:261 / 596
行号:23
路径:/com/iflytek/thridparty/ai.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:262 / 596
行号:39
路径:/com/iflytek/thridparty/ai.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:263 / 596
行号:59
路径:/com/iflytek/thridparty/ai.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:264 / 596
行号:315
路径:/com/iflytek/thridparty/b.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:265 / 596
行号:317
路径:/com/iflytek/thridparty/b.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:266 / 596
行号:453
路径:/com/iflytek/thridparty/b.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:267 / 596
行号:527
路径:/com/iflytek/thridparty/b.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:268 / 596
行号:544
路径:/com/iflytek/thridparty/b.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:269 / 596
行号:690
路径:/com/iflytek/thridparty/b.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:270 / 596
行号:747
路径:/com/iflytek/thridparty/b.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:271 / 596
行号:753
路径:/com/iflytek/thridparty/b.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:272 / 596
行号:784
路径:/com/iflytek/thridparty/b.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:273 / 596
行号:795
路径:/com/iflytek/thridparty/b.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:274 / 596
行号:797
路径:/com/iflytek/thridparty/b.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:275 / 596
行号:803
路径:/com/iflytek/thridparty/b.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:276 / 596
行号:812
路径:/com/iflytek/thridparty/b.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:277 / 596
行号:946
路径:/com/iflytek/thridparty/b.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:278 / 596
行号:987
路径:/com/iflytek/thridparty/b.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:279 / 596
行号:995
路径:/com/iflytek/thridparty/b.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:280 / 596
行号:1099
路径:/com/iflytek/thridparty/b.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:281 / 596
行号:1101
路径:/com/iflytek/thridparty/b.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:282 / 596
行号:1110
路径:/com/iflytek/thridparty/b.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:283 / 596
行号:1289
路径:/com/iflytek/thridparty/b.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:284 / 596
行号:1293
路径:/com/iflytek/thridparty/b.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:285 / 596
行号:1296
路径:/com/iflytek/thridparty/b.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:286 / 596
行号:6
路径:/com/iflytek/thridparty/bm.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:287 / 596
行号:10
路径:/com/iflytek/thridparty/bm.java
代码:android.util.Log.d(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:288 / 596
行号:57
路径:/com/iflytek/thridparty/bm.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:289 / 596
行号:61
路径:/com/iflytek/thridparty/bm.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:290 / 596
行号:5
路径:/com/iflytek/thridparty/c.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:291 / 596
行号:43
路径:/com/iflytek/thridparty/d.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:292 / 596
行号:47
路径:/com/iflytek/thridparty/d.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:293 / 596
行号:67
路径:/com/iflytek/thridparty/d.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:294 / 596
行号:70
路径:/com/iflytek/thridparty/d.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:295 / 596
行号:115
路径:/com/iflytek/thridparty/h.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:296 / 596
行号:300
路径:/com/iflytek/thridparty/h.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:297 / 596
行号:305
路径:/com/iflytek/thridparty/h.java
代码:android.util.Log.w(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:298 / 596
行号:414
路径:/com/iflytek/thridparty/h.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:299 / 596
行号:433
路径:/com/iflytek/thridparty/h.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:300 / 596
行号:484
路径:/com/iflytek/thridparty/h.java
代码:android.util.Log.w(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:301 / 596
行号:71
路径:/com/izhiping/ExampleUtil.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:302 / 596
行号:7
路径:/com/izhiping/MyReceiver.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:303 / 596
行号:9
路径:/com/izhiping/MyReceiver.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:304 / 596
行号:11
路径:/com/izhiping/MyReceiver.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:305 / 596
行号:13
路径:/com/izhiping/MyReceiver.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:306 / 596
行号:14
路径:/com/izhiping/MyReceiver.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:307 / 596
行号:16
路径:/com/izhiping/MyReceiver.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:308 / 596
行号:18
路径:/com/izhiping/MyReceiver.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:309 / 596
行号:20
路径:/com/izhiping/MyReceiver.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:310 / 596
行号:22
路径:/com/izhiping/MyReceiver.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:311 / 596
行号:36
路径:/com/izhiping/MyReceiver.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:312 / 596
行号:46
路径:/com/izhiping/MyReceiver.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:313 / 596
行号:51
路径:/com/izhiping/activity/home/adapter/ToBeConfirmAdapter.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:314 / 596
行号:52
路径:/com/izhiping/activity/home/adapter/WorkKings1Adapter.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:315 / 596
行号:69
路径:/com/izhiping/activity/mine/activity/adapter/MyJobintentionAdapter/1.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:316 / 596
行号:74
路径:/com/izhiping/activity/mine/activity/adapter/MyJobintentionAdapter/1.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:317 / 596
行号:18
路径:/com/izhiping/activity/mine/activity/fragment/SelfEvaluation/1.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:318 / 596
行号:48
路径:/com/izhiping/keyboard/KeyboardLayout.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:319 / 596
行号:55
路径:/com/izhiping/keyboard/KeyboardLayout.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:320 / 596
行号:7
路径:/com/izhiping/push/JPushReceiver.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:321 / 596
行号:17
路径:/com/izhiping/push/JPushReceiver.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:322 / 596
行号:114
路径:/com/izhiping/roundedimageview/RoundedDrawable.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:323 / 596
行号:239
路径:/com/izhiping/roundedimageview/RoundedImageView.java
代码:android.util.Log.w(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:324 / 596
行号:124
路径:/com/izhiping/utils/BitmapUtils.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:325 / 596
行号:135
路径:/com/izhiping/utils/BitmapUtils.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:326 / 596
行号:138
路径:/com/izhiping/utils/BitmapUtils.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:327 / 596
行号:231
路径:/com/izhiping/utils/BitmapUtils.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:328 / 596
行号:243
路径:/com/izhiping/utils/BitmapUtils.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:329 / 596
行号:20
路径:/com/izhiping/utils/FileSizeUtil.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:330 / 596
行号:36
路径:/com/izhiping/utils/FileSizeUtil.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:331 / 596
行号:46
路径:/com/izhiping/utils/FileSizeUtil.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:332 / 596
行号:19
路径:/com/izhiping/utils/JPushUtil/3.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:333 / 596
行号:23
路径:/com/izhiping/utils/JPushUtil/3.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:334 / 596
行号:27
路径:/com/izhiping/utils/JPushUtil/3.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:335 / 596
行号:40
路径:/com/izhiping/utils/JPushUtil/1.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:336 / 596
行号:43
路径:/com/izhiping/utils/JPushUtil/1.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:337 / 596
行号:47
路径:/com/izhiping/utils/JPushUtil/1.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:338 / 596
行号:60
路径:/com/izhiping/utils/JPushUtil/2.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:339 / 596
行号:63
路径:/com/izhiping/utils/JPushUtil/2.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:340 / 596
行号:67
路径:/com/izhiping/utils/JPushUtil/2.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:341 / 596
行号:11
路径:/com/izhiping/utils/JsonUtils.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:342 / 596
行号:23
路径:/com/izhiping/utils/JsonUtils.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:343 / 596
行号:35
路径:/com/izhiping/utils/JsonUtils.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:344 / 596
行号:62
路径:/com/izhiping/utils/JsonUtils.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:345 / 596
行号:7
路径:/com/izhiping/utils/Logs.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:346 / 596
行号:11
路径:/com/izhiping/utils/Logs.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:347 / 596
行号:15
路径:/com/izhiping/utils/Logs.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:348 / 596
行号:19
路径:/com/izhiping/utils/Logs.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:349 / 596
行号:23
路径:/com/izhiping/utils/Logs.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:350 / 596
行号:27
路径:/com/izhiping/utils/Logs.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:351 / 596
行号:31
路径:/com/izhiping/utils/Logs.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:352 / 596
行号:35
路径:/com/izhiping/utils/Logs.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:353 / 596
行号:162
路径:/com/izhiping/view/specific/StickyNavLayout.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:354 / 596
行号:222
路径:/com/izhiping/view/swipemenulistview/SwipeMenuLayout.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:355 / 596
行号:27
路径:/com/izhiping/view/swipemenulistview/SwipeMenuListView/2.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:356 / 596
行号:228
路径:/com/izhiping/view/swipemenulistview/SwipeMenuListView.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:357 / 596
行号:24
路径:/com/laiwang/sdk/channel/IILWAPIChannelProxy/LaiwangConnection.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:358 / 596
行号:32
路径:/com/laiwang/sdk/channel/IILWAPIChannelProxy/LaiwangConnection.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:359 / 596
行号:83
路径:/com/laiwang/sdk/channel/IILWAPIChannelProxy.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:360 / 596
行号:89
路径:/com/laiwang/sdk/channel/IILWAPIChannelProxy.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:361 / 596
行号:36
路径:/com/laiwang/sdk/openapi/LwSecurity.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:362 / 596
行号:50
路径:/com/laiwang/sdk/openapi/LwSecurity.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:363 / 596
行号:95
路径:/com/laiwang/sdk/openapi/LwSecurity.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:364 / 596
行号:4
路径:/com/laiwang/sdk/receiver/LWReceiver.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:365 / 596
行号:25
路径:/com/laiwang/sdk/utils/LWAPIUtils.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:366 / 596
行号:172
路径:/com/laiwang/sdk/utils/LWAPIUtils.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:367 / 596
行号:174
路径:/com/laiwang/sdk/utils/LWAPIUtils.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:368 / 596
行号:176
路径:/com/laiwang/sdk/utils/LWAPIUtils.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:369 / 596
行号:178
路径:/com/laiwang/sdk/utils/LWAPIUtils.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:370 / 596
行号:188
路径:/com/laiwang/sdk/utils/LWAPIUtils.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:371 / 596
行号:193
路径:/com/laiwang/sdk/utils/LWAPIUtils.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:372 / 596
行号:220
路径:/com/laiwang/sdk/utils/LWAPIUtils.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:373 / 596
行号:223
路径:/com/laiwang/sdk/utils/LWAPIUtils.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:374 / 596
行号:246
路径:/com/laiwang/sdk/utils/LWAPIUtils.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:375 / 596
行号:249
路径:/com/laiwang/sdk/utils/LWAPIUtils.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:376 / 596
行号:252
路径:/com/laiwang/sdk/utils/LWAPIUtils.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:377 / 596
行号:267
路径:/com/laiwang/sdk/utils/LWAPIUtils.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:378 / 596
行号:280
路径:/com/laiwang/sdk/utils/LWAPIUtils.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:379 / 596
行号:283
路径:/com/laiwang/sdk/utils/LWAPIUtils.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:380 / 596
行号:309
路径:/com/laiwang/sdk/utils/LWAPIUtils.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:381 / 596
行号:312
路径:/com/laiwang/sdk/utils/LWAPIUtils.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:382 / 596
行号:327
路径:/com/laiwang/sdk/utils/LWAPIUtils.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:383 / 596
行号:330
路径:/com/laiwang/sdk/utils/LWAPIUtils.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:384 / 596
行号:333
路径:/com/laiwang/sdk/utils/LWAPIUtils.java
代码:android.util.Log.e(java.lang.String, java.lang.String):int
案例:385 / 596
行号:61
路径:/com/lidroid/xutils/util/LogUtils.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:386 / 596
行号:72
路径:/com/lidroid/xutils/util/LogUtils.java
代码:android.util.Log.d(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:387 / 596
行号:94
路径:/com/lidroid/xutils/util/LogUtils.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:388 / 596
行号:105
路径:/com/lidroid/xutils/util/LogUtils.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:389 / 596
行号:116
路径:/com/lidroid/xutils/util/LogUtils.java
代码:android.util.Log.i(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:390 / 596
行号:127
路径:/com/lidroid/xutils/util/LogUtils.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:391 / 596
行号:138
路径:/com/lidroid/xutils/util/LogUtils.java
代码:android.util.Log.v(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:392 / 596
行号:149
路径:/com/lidroid/xutils/util/LogUtils.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:393 / 596
行号:160
路径:/com/lidroid/xutils/util/LogUtils.java
代码:android.util.Log.w(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:394 / 596
行号:182
路径:/com/lidroid/xutils/util/LogUtils.java
代码:android.util.Log.wtf(java.lang.String, java.lang.String):int
案例:395 / 596
行号:193
路径:/com/lidroid/xutils/util/LogUtils.java
代码:android.util.Log.wtf(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:396 / 596
行号:204
路径:/com/lidroid/xutils/util/LogUtils.java
代码:android.util.Log.wtf(java.lang.String, java.lang.Throwable):int
案例:397 / 596
行号:17
路径:/com/linkedin/platform/AccessToken.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:398 / 596
行号:34
路径:/com/linkedin/platform/AccessToken.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:399 / 596
行号:94
路径:/com/linkedin/platform/LISessionManager.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:400 / 596
行号:24
路径:/com/linkedin/platform/errors/LIAuthError.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:401 / 596
行号:24
路径:/com/linkedin/platform/errors/LIDeepLinkError.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:402 / 596
行号:17
路径:/com/linkedin/platform/listeners/ApiResponse.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:403 / 596
行号:45
路径:/com/linkedin/platform/listeners/ApiResponse.java
代码:android.util.Log.d(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:404 / 596
行号:61
路径:/com/linkedin/platform/listeners/ApiResponse.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:405 / 596
行号:16
路径:/com/sina/weibo/sdk/utils/LogUtil.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:406 / 596
行号:23
路径:/com/sina/weibo/sdk/utils/LogUtil.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:407 / 596
行号:37
路径:/com/sina/weibo/sdk/utils/LogUtil.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:408 / 596
行号:44
路径:/com/sina/weibo/sdk/utils/LogUtil.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:409 / 596
行号:138
路径:/com/squareup/okhttp/internal/Platform/Android.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:410 / 596
行号:85
路径:/com/ta/utdid2/aid/AidRequester/PostRestThread.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:411 / 596
行号:102
路径:/com/ta/utdid2/aid/AidRequester/PostRestThread.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:412 / 596
行号:142
路径:/com/ta/utdid2/aid/AidRequester.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:413 / 596
行号:152
路径:/com/ta/utdid2/aid/AidRequester.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:414 / 596
行号:165
路径:/com/ta/utdid2/aid/AidRequester.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:415 / 596
行号:197
路径:/com/ta/utdid2/aid/AidRequester.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:416 / 596
行号:37
路径:/com/ta/utdid2/aid/AidStorageController.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:417 / 596
行号:61
路径:/com/ta/utdid2/aid/AidStorageController.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:418 / 596
行号:78
路径:/com/ta/utdid2/aid/AidStorageController.java
代码:android.util.Log.d(java.lang.String, java.lang.String):int
案例:419 / 596
行号:4
路径:/com/tencent/a/a/a/a/h.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:420 / 596
行号:30
路径:/com/tencent/a/a/a/a/h.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:421 / 596
行号:43
路径:/com/tencent/a/a/a/a/h.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:422 / 596
行号:47
路径:/com/tencent/a/a/a/a/h.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:423 / 596
行号:90
路径:/com/tencent/stat/common/StatLogger.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:424 / 596
行号:119
路径:/com/tencent/stat/common/StatLogger.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:425 / 596
行号:132
路径:/com/tencent/stat/common/StatLogger.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:426 / 596
行号:26
路径:/com/tencent/wxop/stat/b/b.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:427 / 596
行号:38
路径:/com/tencent/wxop/stat/b/b.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:428 / 596
行号:86
路径:/com/tencent/wxop/stat/b/b.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:429 / 596
行号:442
路径:/com/tencent/wxop/stat/b/l.java
代码:android.util.Log.w(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:430 / 596
行号:22
路径:/com/tencent/wxop/stat/b/r.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:431 / 596
行号:34
路径:/com/tencent/wxop/stat/b/r.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:432 / 596
行号:48
路径:/com/tencent/wxop/stat/b/r.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:433 / 596
行号:56
路径:/com/tencent/wxop/stat/b/r.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:434 / 596
行号:86
路径:/com/tencent/wxop/stat/b/r.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:435 / 596
行号:97
路径:/com/tencent/wxop/stat/b/r.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:436 / 596
行号:106
路径:/com/tencent/wxop/stat/b/r.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:437 / 596
行号:121
路径:/com/tencent/wxop/stat/b/r.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:438 / 596
行号:132
路径:/com/tencent/wxop/stat/b/r.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:439 / 596
行号:150
路径:/com/tencent/wxop/stat/b/r.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:440 / 596
行号:165
路径:/com/tencent/wxop/stat/b/r.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:441 / 596
行号:9
路径:/com/umeng/socialize/utils/Log.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:442 / 596
行号:15
路径:/com/umeng/socialize/utils/Log.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:443 / 596
行号:46
路径:/com/umeng/socialize/utils/Log.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:444 / 596
行号:52
路径:/com/umeng/socialize/utils/Log.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:445 / 596
行号:58
路径:/com/umeng/socialize/utils/Log.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:446 / 596
行号:64
路径:/com/umeng/socialize/utils/Log.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:447 / 596
行号:66
路径:/com/umeng/socialize/utils/Log.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:448 / 596
行号:73
路径:/com/umeng/socialize/utils/Log.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:449 / 596
行号:91
路径:/com/umeng/socialize/utils/Log.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:450 / 596
行号:97
路径:/com/umeng/socialize/utils/Log.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:451 / 596
行号:41
路径:/im/yixin/sdk/util/SDKHttpUtils.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:452 / 596
行号:61
路径:/im/yixin/sdk/util/SDKHttpUtils.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:453 / 596
行号:97
路径:/im/yixin/sdk/util/SDKHttpUtils.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:454 / 596
行号:14
路径:/im/yixin/sdk/util/SDKLogger.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:455 / 596
行号:427
路径:/android/support/v4/app/BackStackRecord.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:456 / 596
行号:434
路径:/android/support/v4/app/BackStackRecord.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:457 / 596
行号:442
路径:/android/support/v4/app/BackStackRecord.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:458 / 596
行号:463
路径:/android/support/v4/app/BackStackRecord.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:459 / 596
行号:478
路径:/android/support/v4/app/BackStackRecord.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:460 / 596
行号:509
路径:/android/support/v4/app/BackStackRecord.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:461 / 596
行号:524
路径:/android/support/v4/app/BackStackRecord.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:462 / 596
行号:691
路径:/android/support/v4/app/BackStackRecord.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:463 / 596
行号:186
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:464 / 596
行号:192
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:465 / 596
行号:559
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:466 / 596
行号:561
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:467 / 596
行号:656
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:468 / 596
行号:670
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:469 / 596
行号:807
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:470 / 596
行号:914
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:471 / 596
行号:931
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:472 / 596
行号:1007
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:473 / 596
行号:1024
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:474 / 596
行号:1041
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:475 / 596
行号:1058
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:476 / 596
行号:1124
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:477 / 596
行号:1233
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:478 / 596
行号:1241
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:479 / 596
行号:1258
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:480 / 596
行号:1279
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:481 / 596
行号:1297
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:482 / 596
行号:1318
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:483 / 596
行号:1339
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:484 / 596
行号:1346
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:485 / 596
行号:1361
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:486 / 596
行号:1373
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:487 / 596
行号:1480
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:488 / 596
行号:1487
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:489 / 596
行号:1502
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:490 / 596
行号:1512
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:491 / 596
行号:1518
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:492 / 596
行号:1532
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:493 / 596
行号:1731
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:494 / 596
行号:1754
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:495 / 596
行号:1844
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:496 / 596
行号:1861
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:497 / 596
行号:1873
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:498 / 596
行号:1886
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:499 / 596
行号:1902
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:500 / 596
行号:1927
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:501 / 596
行号:1937
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:502 / 596
行号:1949
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:503 / 596
行号:1964
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:504 / 596
行号:1979
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:505 / 596
行号:2218
路径:/android/support/v4/app/FragmentManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:506 / 596
行号:130
路径:/android/support/v4/app/FragmentStatePagerAdapter.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:507 / 596
行号:44
路径:/android/support/v4/app/LoaderManagerImpl/LoaderInfo.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:508 / 596
行号:67
路径:/android/support/v4/app/LoaderManagerImpl/LoaderInfo.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:509 / 596
行号:78
路径:/android/support/v4/app/LoaderManagerImpl/LoaderInfo.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:510 / 596
行号:101
路径:/android/support/v4/app/LoaderManagerImpl/LoaderInfo.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:511 / 596
行号:114
路径:/android/support/v4/app/LoaderManagerImpl/LoaderInfo.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:512 / 596
行号:123
路径:/android/support/v4/app/LoaderManagerImpl/LoaderInfo.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:513 / 596
行号:130
路径:/android/support/v4/app/LoaderManagerImpl/LoaderInfo.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:514 / 596
行号:163
路径:/android/support/v4/app/LoaderManagerImpl/LoaderInfo.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:515 / 596
行号:167
路径:/android/support/v4/app/LoaderManagerImpl/LoaderInfo.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:516 / 596
行号:173
路径:/android/support/v4/app/LoaderManagerImpl/LoaderInfo.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:517 / 596
行号:181
路径:/android/support/v4/app/LoaderManagerImpl/LoaderInfo.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:518 / 596
行号:187
路径:/android/support/v4/app/LoaderManagerImpl/LoaderInfo.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:519 / 596
行号:191
路径:/android/support/v4/app/LoaderManagerImpl/LoaderInfo.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:520 / 596
行号:197
路径:/android/support/v4/app/LoaderManagerImpl/LoaderInfo.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:521 / 596
行号:222
路径:/android/support/v4/app/LoaderManagerImpl/LoaderInfo.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:522 / 596
行号:235
路径:/android/support/v4/app/LoaderManagerImpl/LoaderInfo.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:523 / 596
行号:348
路径:/android/support/v4/app/LoaderManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:524 / 596
行号:353
路径:/android/support/v4/app/LoaderManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:525 / 596
行号:357
路径:/android/support/v4/app/LoaderManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:526 / 596
行号:373
路径:/android/support/v4/app/LoaderManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:527 / 596
行号:379
路径:/android/support/v4/app/LoaderManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:528 / 596
行号:385
路径:/android/support/v4/app/LoaderManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:529 / 596
行号:393
路径:/android/support/v4/app/LoaderManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:530 / 596
行号:398
路径:/android/support/v4/app/LoaderManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:531 / 596
行号:404
路径:/android/support/v4/app/LoaderManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:532 / 596
行号:410
路径:/android/support/v4/app/LoaderManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:533 / 596
行号:424
路径:/android/support/v4/app/LoaderManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:534 / 596
行号:459
路径:/android/support/v4/app/LoaderManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:535 / 596
行号:464
路径:/android/support/v4/app/LoaderManagerImpl.java
代码:android.util.Log.w(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:536 / 596
行号:475
路径:/android/support/v4/app/LoaderManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:537 / 596
行号:486
路径:/android/support/v4/app/LoaderManagerImpl.java
代码:android.util.Log.w(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:538 / 596
行号:491
路径:/android/support/v4/app/LoaderManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:539 / 596
行号:503
路径:/android/support/v4/app/LoaderManagerImpl.java
代码:android.util.Log.w(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:540 / 596
行号:509
路径:/android/support/v4/app/LoaderManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:541 / 596
行号:534
路径:/android/support/v4/app/LoaderManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:542 / 596
行号:542
路径:/android/support/v4/app/LoaderManagerImpl.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:543 / 596
行号:96
路径:/android/support/v4/app/RemoteInput/ImplBase.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:544 / 596
行号:101
路径:/android/support/v4/app/RemoteInput/ImplBase.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:545 / 596
行号:35
路径:/android/support/v4/media/MediaBrowserServiceCompatApi23/MediaBrowserServiceAdaptorApi23/ServiceBinderProxyApi23.java
代码:android.util.Log.i(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:546 / 596
行号:38
路径:/android/support/v4/media/MediaBrowserServiceCompatApi23/MediaBrowserServiceAdaptorApi23/ServiceBinderProxyApi23.java
代码:android.util.Log.i(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:547 / 596
行号:20
路径:/android/support/v4/provider/RawDocumentFile.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:548 / 596
行号:121
路径:/android/support/v4/provider/RawDocumentFile.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:549 / 596
行号:12
路径:/cn/jpush/android/util/n.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:550 / 596
行号:16
路径:/cn/jpush/android/util/n.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:551 / 596
行号:20
路径:/cn/jpush/android/util/n.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:552 / 596
行号:24
路径:/cn/jpush/android/util/n.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:553 / 596
行号:28
路径:/cn/jpush/android/util/n.java
代码:android.util.Log.w(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:554 / 596
行号:324
路径:/com/iflytek/cloud/SpeechUtility.java
代码:android.util.Log.v(java.lang.String, java.lang.String):int
案例:555 / 596
行号:81
路径:/com/j256/ormlite/android/AndroidLog.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:556 / 596
行号:84
路径:/com/j256/ormlite/android/AndroidLog.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:557 / 596
行号:93
路径:/com/j256/ormlite/android/AndroidLog.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:558 / 596
行号:101
路径:/com/j256/ormlite/android/AndroidLog.java
代码:android.util.Log.v(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:559 / 596
行号:104
路径:/com/j256/ormlite/android/AndroidLog.java
代码:android.util.Log.d(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:560 / 596
行号:107
路径:/com/j256/ormlite/android/AndroidLog.java
代码:android.util.Log.i(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:561 / 596
行号:110
路径:/com/j256/ormlite/android/AndroidLog.java
代码:android.util.Log.w(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:562 / 596
行号:113
路径:/com/j256/ormlite/android/AndroidLog.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:563 / 596
行号:116
路径:/com/j256/ormlite/android/AndroidLog.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:564 / 596
行号:119
路径:/com/j256/ormlite/android/AndroidLog.java
代码:android.util.Log.i(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:565 / 596
行号:14
路径:/com/tencent/a/a/a/a/b.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:566 / 596
行号:19
路径:/com/tencent/a/a/a/a/b.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:567 / 596
行号:35
路径:/com/tencent/a/a/a/a/b.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:568 / 596
行号:14
路径:/com/tencent/a/a/a/a/d.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:569 / 596
行号:22
路径:/com/tencent/a/a/a/a/d.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:570 / 596
行号:14
路径:/com/tencent/a/a/a/a/e.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:571 / 596
行号:22
路径:/com/tencent/a/a/a/a/e.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:572 / 596
行号:8
路径:/com/tencent/mm/sdk/b/b.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:573 / 596
行号:20
路径:/com/tencent/mm/sdk/b/b.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:574 / 596
行号:9
路径:/com/tencent/open/a/e.java
代码:android.util.Log.v(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:575 / 596
行号:12
路径:/com/tencent/open/a/e.java
代码:android.util.Log.d(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:576 / 596
行号:15
路径:/com/tencent/open/a/e.java
代码:android.util.Log.i(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:577 / 596
行号:18
路径:/com/tencent/open/a/e.java
代码:android.util.Log.w(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:578 / 596
行号:21
路径:/com/tencent/open/a/e.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:579 / 596
行号:24
路径:/com/tencent/open/a/e.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:580 / 596
行号:308
路径:/uk/co/senab/photoview/PhotoViewAttacher.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:581 / 596
行号:426
路径:/uk/co/senab/photoview/PhotoViewAttacher.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:582 / 596
行号:42
路径:/uk/co/senab/photoview/gestures/CupcakeGestureDetector.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:583 / 596
行号:8
路径:/uk/co/senab/photoview/log/LoggerDefault.java
代码:android.util.Log.v(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:584 / 596
行号:16
路径:/uk/co/senab/photoview/log/LoggerDefault.java
代码:android.util.Log.d(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:585 / 596
行号:20
路径:/uk/co/senab/photoview/log/LoggerDefault.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:586 / 596
行号:24
路径:/uk/co/senab/photoview/log/LoggerDefault.java
代码:android.util.Log.i(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:587 / 596
行号:28
路径:/uk/co/senab/photoview/log/LoggerDefault.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:588 / 596
行号:32
路径:/uk/co/senab/photoview/log/LoggerDefault.java
代码:android.util.Log.w(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:589 / 596
行号:40
路径:/uk/co/senab/photoview/log/LoggerDefault.java
代码:android.util.Log.e(java.lang.String, java.lang.String, java.lang.Throwable):int
案例:590 / 596
行号:139
路径:/android/support/v4/app/FragmentActivity.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:591 / 596
行号:144
路径:/android/support/v4/app/FragmentActivity.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:592 / 596
行号:216
路径:/android/support/v4/app/FragmentActivity.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:593 / 596
行号:613
路径:/android/support/v4/app/FragmentActivity.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:594 / 596
行号:618
路径:/android/support/v4/app/FragmentActivity.java
代码:android.util.Log.w(java.lang.String, java.lang.String):int
案例:595 / 596
行号:131
路径:/com/izhiping/activity/home/HomeFragment3/5.java
代码:android.util.Log.i(java.lang.String, java.lang.String):int
案例:596 / 596
风险名称 加密哈希函数不安全(SHA-1)
等级
总结 应用程序使用了不安全的加密哈希函数SHA-1,可能会造成敏感信息的泄漏。
详情 安卓为应用程序提供了信息摘要算法的功能(安卓文档)。信息摘要是安全的单向哈希函数,它接收任意大小的数据进行转换,输出固定长度的哈希值。常见的信息摘要算法有MD5,SHA-1,SHA-224,SHA-256,SHA-384和SHA-512,其中MD5和SHA-1都已经被认为是不安全的了。如果应用程序使用了不安全的加密哈希函数,可能会造成敏感信息的泄漏。

SHA-1算法是计算机安全领域广泛使用的一种哈希函数,它能够生成160-bit的哈希值。SHA-1算法最初是被当作加密哈希函数提出来的,但是现在它的安全系数已经大打折扣。早在2005年,密码学专家就发现SHA-1存在碰撞。试想如果一个恶意文件的MD5哈希值与某个有效文件的MD5值相同,并进行了数字签名,那么这个恶意文件就可能绕过安全检测。此外,SHA-1算法也会受到暴力搜索手段攻击。通过一些在线彩虹表破解服务,攻击者就可以轻易拿到明文。从2010年起,很多机构就开始推荐使用SHA-2或者SHA-3来替代SHA-1。Microsoft,Google以及Mozilla等公司也纷纷宣布它们的浏览器将在2017年不再接受使用SHA-1的SSL证书。
OWASP M6: 密码破解
修复建议 不要使用不安全的哈希函数MD5和SHA-1。推荐使用安全系数更高的SHA-256或者SHA-512。值得注意的是,SHA-512比SHA-256慢,因为SHA-256使用32-bit,而SHA-512使用64-bit。尽管SHA-512慢了些,但是也更安全,因为需要更多的时间来破解。
案例 1 查看
案例 收起
行号:26
路径:/com/alipay/security/mobile/module/commonutils/crypto/DigestUtil.java
代码:java.security.MessageDigest.getInstance(java.lang.String):java.security.MessageDigest
案例:1 / 1
风险名称 客户端SQL注入攻击漏洞
等级
总结 直接从外部不可信数据源拼接构造SQL命令行会导致客户端的SQL注入攻击。
详情 Android提供了以下几种数据存储方式:Shared Preferences, Internal Storage(内部存储), External Storage(外部存储), SQLite Databases, 和 Network Connection(网络连接)。对于重复出现或者有结构的数据(比如联系人信息等),将数据储存在数据里是一种理想方式 (安卓文档)。安卓提供了SQLite 数据库管理类供应用程序来管理它的私有数据。如果对用户输入的数据处理不当,会存在SQL注入风险。SQL 注入是一种代码注入技术,用来攻击用到数据的应用程序。具体说来,就是通过文件注入或者进程注入方式,在应用程序中执行攻击者注入的恶意代码。这种攻击的关键在于攻击者利用SQL命令的语法技巧,通过用户输入来控制SQL语句的selection, projection等参数来破坏SQL语句的原本执行逻辑。这样他们就可以非法访问修改数据库,甚至对数据库的数据进行破坏。一种常见的SQL注入攻击就是通过乱入一个单引号来破坏SQL语句的查询逻辑来非法登录某个网页。SQL语句经常被用来攻击WebView或者网页,但是也可以用来攻击activities. 一个有名的例子就是安卓5.0版本之前中的WapPushManger SQL注入漏洞 (CVE-2014-8507)。漏洞出现在查询数据的时候,攻击者可以通过构造恶意wapAppId,向SQL查询语句中注入其他内容,构造一条恶意的查询语句,成为某个Intent的一部分,启动攻击者想启动的Activity或者Service(这里会进行签名检查)。
OWASP M6: 密码破解
修复建议 以下三种方法经常被用来防止SQL注入攻击的产生:

1. 保护应用组件
如果某个应用组件(activities, broadcast receivers, services, 以及 content providers)在AndroidManifest.xml中被设置为可导出,其他应用就可以通过创建Intent、使用适当的 API (比如Activity.startActivity))来调用它。如果应用中的activities, broadcast receivers, services, 以及 content providers等组件不需要被其它应用程序访问,应在android manifest文件中显式声明android:exported="false"来避免不必要的组件导出。如果组件需要被其它应用程序访问,应使用permission标签设置权限保护级别。

2. 使用参数化查询
不直接使用传入的查询语句用于projection和selection,尽可能的使用参数化查询,包括1)参数化的查询函数(安卓文档)。SQLiteDatabase对象的部分内置方法是可以有效防SQL注入的,比如query(), insert(), update和delete();2) 用'?'占位符和一个独立的数组来构造SQL语句的参数(安卓文档)。SELECT查询语句中的占位符'?'跟变量捆绑在一起,阻止攻击者修改输入内容,从而防止SQL注入攻击。

3. 验证检查用户输入
如果采用字符串连接方式构造SQL语句,使用参数化方法并不足以防止SQL注入攻击 (安卓文档),因为输入语句总能够被有经验又技术又有决心的攻击者操纵。开发者在将用户输入的数据传到SQL命令之前,应该检查里面有没有恶意内容。任何用来构造SQL语句的步骤都应该被检查一遍。SQL语句检测方法包括创建白名单、对应用从用户端读进的内容做限制、过滤用户输入的内容等。
案例 55 查看
案例 收起
行号:288
路径:/cn/jpush/android/data/b.java
代码:android.database.sqlite.SQLiteDatabase.query(java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String):android.database.Cursor
案例:1 / 55
行号:411
路径:/cn/jpush/android/data/b.java
代码:android.database.sqlite.SQLiteDatabase.query(java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String):android.database.Cursor
案例:2 / 55
行号:314
路径:/cn/jpush/android/data/f.java
代码:android.database.sqlite.SQLiteDatabase.query(boolean, java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String):android.database.Cursor
案例:3 / 55
行号:336
路径:/cn/jpush/android/data/f.java
代码:android.database.sqlite.SQLiteDatabase.query(boolean, java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String):android.database.Cursor
案例:4 / 55
行号:353
路径:/cn/jpush/android/data/f.java
代码:android.database.sqlite.SQLiteDatabase.query(boolean, java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String):android.database.Cursor
案例:5 / 55
行号:420
路径:/cn/jpush/android/data/o.java
代码:android.database.sqlite.SQLiteDatabase.rawQuery(java.lang.String, java.lang.String[]):android.database.Cursor
案例:6 / 55
行号:457
路径:/cn/jpush/android/data/o.java
代码:android.database.sqlite.SQLiteDatabase.rawQuery(java.lang.String, java.lang.String[]):android.database.Cursor
案例:7 / 55
行号:483
路径:/cn/jpush/android/data/o.java
代码:android.database.sqlite.SQLiteDatabase.query(boolean, java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String):android.database.Cursor
案例:8 / 55
行号:538
路径:/cn/jpush/android/data/o.java
代码:android.database.sqlite.SQLiteDatabase.rawQuery(java.lang.String, java.lang.String[]):android.database.Cursor
案例:9 / 55
行号:562
路径:/cn/jpush/android/data/o.java
代码:android.database.sqlite.SQLiteDatabase.rawQuery(java.lang.String, java.lang.String[]):android.database.Cursor
案例:10 / 55
行号:101
路径:/com/alipay/sdk/tid/a.java
代码:android.database.sqlite.SQLiteDatabase.rawQuery(java.lang.String, java.lang.String[]):android.database.Cursor
案例:11 / 55
行号:188
路径:/com/alipay/sdk/tid/a.java
代码:android.database.sqlite.SQLiteDatabase.rawQuery(java.lang.String, java.lang.String[]):android.database.Cursor
案例:12 / 55
行号:288
路径:/com/alipay/sdk/tid/a.java
代码:android.database.sqlite.SQLiteDatabase.rawQuery(java.lang.String, java.lang.String[]):android.database.Cursor
案例:13 / 55
行号:345
路径:/com/alipay/sdk/tid/a.java
代码:android.database.sqlite.SQLiteDatabase.rawQuery(java.lang.String, java.lang.String[]):android.database.Cursor
案例:14 / 55
行号:417
路径:/com/alipay/sdk/tid/a.java
代码:android.database.sqlite.SQLiteDatabase.rawQuery(java.lang.String, java.lang.String[]):android.database.Cursor
案例:15 / 55
行号:492
路径:/com/alipay/sdk/tid/a.java
代码:android.database.sqlite.SQLiteDatabase.rawQuery(java.lang.String, java.lang.String[]):android.database.Cursor
案例:16 / 55
行号:530
路径:/com/alipay/sdk/tid/a.java
代码:android.database.sqlite.SQLiteDatabase.rawQuery(java.lang.String, java.lang.String[]):android.database.Cursor
案例:17 / 55
行号:571
路径:/com/alipay/sdk/tid/a.java
代码:android.database.sqlite.SQLiteDatabase.rawQuery(java.lang.String, java.lang.String[]):android.database.Cursor
案例:18 / 55
行号:29
路径:/com/izhiping/database/SqliteHelper.java
代码:android.database.sqlite.SQLiteDatabase.rawQuery(java.lang.String, java.lang.String[]):android.database.Cursor
案例:19 / 55
行号:103
路径:/com/izhiping/database/SqliteHelper.java
代码:android.database.sqlite.SQLiteDatabase.rawQuery(java.lang.String, java.lang.String[]):android.database.Cursor
案例:20 / 55
行号:177
路径:/com/izhiping/database/SqliteHelper.java
代码:android.database.sqlite.SQLiteDatabase.rawQuery(java.lang.String, java.lang.String[]):android.database.Cursor
案例:21 / 55
行号:251
路径:/com/izhiping/database/SqliteHelper.java
代码:android.database.sqlite.SQLiteDatabase.rawQuery(java.lang.String, java.lang.String[]):android.database.Cursor
案例:22 / 55
行号:330
路径:/com/izhiping/database/SqliteHelper.java
代码:android.database.sqlite.SQLiteDatabase.rawQuery(java.lang.String, java.lang.String[]):android.database.Cursor
案例:23 / 55
行号:393
路径:/com/izhiping/database/SqliteHelper.java
代码:android.database.sqlite.SQLiteDatabase.rawQuery(java.lang.String, java.lang.String[]):android.database.Cursor
案例:24 / 55
行号:456
路径:/com/izhiping/database/SqliteHelper.java
代码:android.database.sqlite.SQLiteDatabase.rawQuery(java.lang.String, java.lang.String[]):android.database.Cursor
案例:25 / 55
行号:519
路径:/com/izhiping/database/SqliteHelper.java
代码:android.database.sqlite.SQLiteDatabase.rawQuery(java.lang.String, java.lang.String[]):android.database.Cursor
案例:26 / 55
行号:629
路径:/com/izhiping/database/SqliteHelper.java
代码:android.database.sqlite.SQLiteDatabase.rawQuery(java.lang.String, java.lang.String[]):android.database.Cursor
案例:27 / 55
行号:670
路径:/com/izhiping/database/SqliteHelper.java
代码:android.database.sqlite.SQLiteDatabase.rawQuery(java.lang.String, java.lang.String[]):android.database.Cursor
案例:28 / 55
行号:711
路径:/com/izhiping/database/SqliteHelper.java
代码:android.database.sqlite.SQLiteDatabase.rawQuery(java.lang.String, java.lang.String[]):android.database.Cursor
案例:29 / 55
行号:753
路径:/com/izhiping/database/SqliteHelper.java
代码:android.database.sqlite.SQLiteDatabase.rawQuery(java.lang.String, java.lang.String[]):android.database.Cursor
案例:30 / 55
行号:799
路径:/com/izhiping/database/SqliteHelper.java
代码:android.database.sqlite.SQLiteDatabase.rawQuery(java.lang.String, java.lang.String[]):android.database.Cursor
案例:31 / 55
行号:758
路径:/com/lidroid/xutils/DbUtils.java
代码:android.database.sqlite.SQLiteDatabase.rawQuery(java.lang.String, java.lang.String[]):android.database.Cursor
案例:32 / 55
行号:767
路径:/com/lidroid/xutils/DbUtils.java
代码:android.database.sqlite.SQLiteDatabase.rawQuery(java.lang.String, java.lang.String[]):android.database.Cursor
案例:33 / 55
行号:49
路径:/com/tencent/open/b/f.java
代码:android.database.sqlite.SQLiteDatabase.query(java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String):android.database.Cursor
案例:34 / 55
行号:116
路径:/com/tencent/stat/n.java
代码:android.database.sqlite.SQLiteDatabase.query(java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String):android.database.Cursor
案例:35 / 55
行号:408
路径:/com/tencent/stat/n.java
代码:android.database.sqlite.SQLiteDatabase.query(java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String):android.database.Cursor
案例:36 / 55
行号:446
路径:/com/tencent/stat/n.java
代码:android.database.sqlite.SQLiteDatabase.query(java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String):android.database.Cursor
案例:37 / 55
行号:529
路径:/com/tencent/stat/n.java
代码:android.database.sqlite.SQLiteDatabase.query(java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String):android.database.Cursor
案例:38 / 55
行号:14
路径:/com/tencent/stat/t.java
代码:android.database.sqlite.SQLiteDatabase.query(java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String):android.database.Cursor
案例:39 / 55
行号:13
路径:/com/tencent/stat/w.java
代码:android.database.sqlite.SQLiteDatabase.query(java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String):android.database.Cursor
案例:40 / 55
行号:60
路径:/com/tencent/stat/w.java
代码:android.database.sqlite.SQLiteDatabase.query(java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String):android.database.Cursor
案例:41 / 55
行号:20
路径:/com/tencent/wxop/stat/ac.java
代码:android.database.sqlite.SQLiteDatabase.query(java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String):android.database.Cursor
案例:42 / 55
行号:66
路径:/com/tencent/wxop/stat/ac.java
代码:android.database.sqlite.SQLiteDatabase.query(java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String):android.database.Cursor
案例:43 / 55
行号:42
路径:/com/tencent/wxop/stat/t.java
代码:android.database.sqlite.SQLiteDatabase.query(java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String):android.database.Cursor
案例:44 / 55
行号:315
路径:/com/tencent/wxop/stat/t.java
代码:android.database.sqlite.SQLiteDatabase.query(java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String):android.database.Cursor
案例:45 / 55
行号:767
路径:/com/tencent/wxop/stat/t.java
代码:android.database.sqlite.SQLiteDatabase.query(java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String):android.database.Cursor
案例:46 / 55
行号:823
路径:/com/tencent/wxop/stat/t.java
代码:android.database.sqlite.SQLiteDatabase.query(java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String):android.database.Cursor
案例:47 / 55
行号:941
路径:/com/tencent/wxop/stat/t.java
代码:android.database.sqlite.SQLiteDatabase.query(java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String):android.database.Cursor
案例:48 / 55
行号:229
路径:/com/j256/ormlite/android/AndroidDatabaseConnection.java
代码:android.database.sqlite.SQLiteDatabase.rawQuery(java.lang.String, java.lang.String[]):android.database.Cursor
案例:49 / 55
行号:281
路径:/com/j256/ormlite/android/AndroidDatabaseConnection.java
代码:android.database.sqlite.SQLiteDatabase.rawQuery(java.lang.String, java.lang.String[]):android.database.Cursor
案例:50 / 55
行号:329
路径:/com/j256/ormlite/android/AndroidDatabaseConnection.java
代码:android.database.sqlite.SQLiteDatabase.rawQuery(java.lang.String, java.lang.String[]):android.database.Cursor
案例:51 / 55
行号:4
路径:/com/j256/ormlite/android/compat/BasicApiCompatibility.java
代码:android.database.sqlite.SQLiteDatabase.rawQuery(java.lang.String, java.lang.String[]):android.database.Cursor
案例:52 / 55
行号:14
路径:/com/j256/ormlite/android/compat/JellyBeanApiCompatibility.java
代码:android.database.sqlite.SQLiteDatabase.rawQuery(java.lang.String, java.lang.String[]):android.database.Cursor
案例:53 / 55
行号:977
路径:/com/izhiping/activity/mine/activity/MineMessageActivity.java
代码:android.database.sqlite.SQLiteDatabase.rawQuery(java.lang.String, java.lang.String[]):android.database.Cursor
案例:54 / 55
行号:979
路径:/com/izhiping/activity/mine/activity/MineMessageActivity.java
代码:android.database.sqlite.SQLiteDatabase.rawQuery(java.lang.String, java.lang.String[]):android.database.Cursor
案例:55 / 55
风险名称 Content Provider组件导出风险
等级
总结 Content Provider组件的不恰当导出,会导致第三方应用越权访问本应用的敏感数据。
详情 Content Provider机制用来提供应用内部或者应用之间的数据共享。在定义某个Content Provider的时候,"android:exported"属性用来指定这个provider是否可以被第三方应用中的组件使用。如果属性值为"true",说明这个provider可以被第三方应用调用。任何应用都可以在该provider所允许的权限范围内,使用该provider的URI来访问它。如果属性值为"false",说明所定义的provider只能被本应用或者与本应用有相同用户ID的应用调用。

"android:exported"属性的默认值依赖于"android:minSdkVersion"或"android:targetSdkVersion"的版本号。如果"android:minSdkVersion"或"android:targetSdkVersion"的值小于等于"16","android:exported"的默认属性值为"true",说明该provider可以被其他撤应用所使用。如果"android:minSdkVersion"或"android:targetSdkVersion"的值大于等于"17","android:exported"的默认属性值为"false",该provider不能被其他应用所使用。

如果对被导出provider组件的访问限制不足,其他应用,包括恶意应用,可能会启动这个provider,从而导致恶意应用滥用权限、访问敏感信息等。
OWASP M4:无意识的数据泄露
修复建议 如果该Content Provider本来的意图仅是供应用内部、或者有相同用户ID的应用使用,推荐禁用Content Provider导出功能——在manifest文件中设置"android:exported=false"。注意如果应用使用的API版本号高于16,"android:exported"的默认值已经是"false"。如果该provider供相关应用外部使用,开发者可以通过设置权限范围来限制provider对其他应用的暴露。
案例 1 查看
案例 收起
行号:246~246
路径:/AndroidManifest.xml
代码:
案例:1 / 1
风险名称 加密方法存在漏洞
等级
总结 应用程序使用了不安全的密码学方法
详情 安卓支持数据的加密和解密(安卓文档)。密码学方法包括密码学算法(比如DES),反馈模式(比如CBC),Padding参数(比如PKCS5Padding)。密码学方法的不恰当使用,会使应用程序遭受攻击风险。对于Android系统,以下几种不安全的加密方法比较常见。

1. 使用了弱加密算法
常见的密码学算法有AES (Advanced Encryption Standard), Blowfish,DES (Data Encryption Standard),RSA (Rivest-Shamir-Adleman cryptosystem)等。其中DES曾经是主要的对称加密方法,在1977被美国前国家标准局选为密码学标准,但是现在DES算法被认为是不安全的,因为它容易受到暴力手段攻击。这种攻击可由一台单独的强大的机器,或者一堆机器联合实现。理论上说,DES还容易受到differential cryptanalysis,linear cryptanalysis,和 Davies' attack等攻击;

2. 使用了弱加密模式
加密模式使用分组密码加密任意长度的信息。目前有很多加密模式,最简单的是ECB (Electronic Codebook)。采用这种模式,数据先被分组,分别加密,相同的明文会产生相同的密文,所以这种方法可能会泄漏信息,安全性不够,容易受到CPA (chosen plaintext attacks)攻击;

3. 使用CBC加密模式的时候,没有使用随机的初始化向量
CBC加密模式中,明文被加密前要与前面的密文进行异或运算后再加密,第一组明文需要初始化向量(IV)。这种加密模式是顺次的,IV影响后来的加密内容。因此,IV的选择很重要。如果使用了可以预测的IV,攻击者可能会猜到明文;

4. 使用RSA算法的时候,没有用到Padding
密码学中使用Padding是为了防止密码破译者利用可预测内容找到已知的明文部分,来破译加密内容。对于RSA算法,Padding非常重要。没有用到Padding的RSA容易被修改。攻击者可以修改明文。没有使用Padding的RSA也容易收到CPA攻击。因此,使用RSA算法的时候,要仔细考虑padding参数,不要选择NoPadding参数;

5. 使用RSA算法的时候,密钥长度过短
使用RSA的时候,如果密钥长度过短,很容易被破解。早在1999年,RSA-155 (512-bit) 就被破译了。使用RSA加密时,通常密钥长度为1024到4096 bit。
OWASP M6: 密码破解
修复建议 1. 不要使用DES算法。用其他算法(比如BLOWFISH)来替代。近年来,DES逐渐被AES取代,但是AES算法也存在被攻击的风险,所以我们不推荐;
2. 不要使用ECB加密模式。用其他加密模式(比如GCM)替代。也可以使用结合了消息认证码的CBC和CTR等传统语义安全的加密模式;
3. 使用CBC加密模式的时候,要用随机的初始化向量;
4. 使用RSA加密算法的时候,一定要用Padding。 要仔细考虑padding参数,不要选择NoPadding参数;
5. 使用RSA加密算法的时候,密钥长度不能太短(比如512-bit)。建议密钥长度1024-4096 bits。
案例 5 查看
案例 收起
行号:15
路径:/com/alipay/sdk/encrypt/b.java
代码:javax.crypto.Cipher.getInstance(java.lang.String):javax.crypto.Cipher
案例:1 / 5
行号:16
路径:/com/alipay/sdk/encrypt/d.java
代码:javax.crypto.Cipher.getInstance(java.lang.String):javax.crypto.Cipher
案例:2 / 5
行号:5
路径:/com/sina/weibo/sdk/utils/AesEncrypt.java
代码:javax.crypto.Cipher.getInstance(java.lang.String):javax.crypto.Cipher
案例:3 / 5
行号:17
路径:/com/sina/weibo/sdk/utils/AesEncrypt.java
代码:javax.crypto.Cipher.getInstance(java.lang.String):javax.crypto.Cipher
案例:4 / 5
行号:465
路径:/com/sina/weibo/sdk/utils/AidTask.java
代码:javax.crypto.Cipher.getInstance(java.lang.String):javax.crypto.Cipher
案例:5 / 5
风险名称 日志读出漏洞
等级
总结 允许应用读取安卓系统日志文件(影响Android4.1之前的版本)。
详情 READ_LOGS是配置文件中的一个权限,它允许应用读取系统底层的日志文件。这对发现问题、解决问题、以及应用的开发支持很有用。但是这个权限很危险,因为它允许应用通过读取系统或者其他应用写的日志信息来获取用户敏感信息(甚至是私人/秘密信息)。这些敏感信息可能包括用户邮件地址,GPS数据,社交帐号,Wi-Fi信息,网络流量等。

出于安全原因,从Android 4.1 版本 (Jelly Bean)起,READ_LOGS的权限保护级别从"危险权限"改成"证书签名/系统/开发权限"。这意味着第三方应用不再能够读取系统或者其他应用写的日志文件,除非所用设备被root了,并且使用者有superuser权限。这些应用只能读取自己的日志内容。这就阻止了恶意应用通过窃取系统或者其他应用写入的日志文件来监视用户。第三方应用程序应当使用 "java.util.logging" 创建自己的日志记录,而不是读取系统日志。
OWASP M4:无意识的数据泄露
修复建议 如果非安全的第三方应用程序读取系统日志文件,则将其标记为可疑。
案例 1 查看
案例 收起
行号:14
路径:AndroidManifest.xml
代码:
案例:1 / 1
风险名称 Receiver组件导出风险
等级
总结 使用到intent filters的Receiver组件不恰当导出,会导致第三方应用越权访问本应用的敏感数据。
详情 Broadcast Receiver用来响应系统广播消息,比如电池电量低、启动完成、插入耳机等。大部分的Broadcast Receiver来源于系统本身,也有一部分来源于应用。在定义某个receiver的时候,"android:exported"属性用来指定这个receiver是否可以接收本应用之外的消息。如果属性值为"true",说明这个receiver可以接收其他消息源(系统或者其他应用)发送的消息;如果属性值为"false",说明所定义的receiver只能接收本应用或者与本应用有相同用户ID的应用发送的消息。

如果对被导出receiver组件的访问限制不足,其他应用,包括恶意应用,可能会向receiver发送消息,从而导致恶意应用滥用权限、访问敏感信息、修改本应用的内部状态,或者欺骗用户与本应用互动。

"android:exported"属性的默认值依赖于该Broadcast Receiver是否有intent filter。如果该receiver没有用到intent filters,该receiver只能被能够指定其精确类名的intent对象启用,说明这个receiver只能被应用内部的组件使用(因为通常情况下其他应用不知道它的类名)。这种情况下,"android:exported"的默认值为"false",另外一方面,如果receiver有至少一个intent filters,说明这个receiver可以接收系统或者其他应用发送的消息,这种情况下的"android:exported"的默认属性值为"true"。

根据receiver中是否使用intent filters, receiver组件的不恰当导出造成的风险可以分为如下两类:

类别1: Receiver中没有使用到intent filters。如果receiver本来的意图仅是供应用内部、或者有相同用户ID的应用使用,推荐使用"android:exported"的默认值 ("false")。在AndroidManifest.xml中设置"android:exported=true"允许该receiver接收其他应用发送的消息,会导致难以预料的行为或者漏洞。如果该receiver供相关应用外部使用,开发者可以通过设置权限范围来限制可以向该receiver发送消息的消息源。为此,开发者可设置"android:exported=true",同时通过在AndroidManifest.xm中设置"android:protectionLevel=signature"或者"android:protectionLevel=signatureOrSystem"来控制对应用的访问权限。

类别2: Receiver中使用到intent filters (即当前所检测到风险对应的类别)。在Android平台上,在AndroidManifest.xml 文件中为receiver定义intent filter意味着该receiver可能可以接受系统或者其他应用发送的消息。如果定义某个intent filter的时候,没有在AndroidManifest.xml中明确设置"android:exported=false",该receiver可能被其他应用(包括恶意应用)激活滥用,造成信息泄露或者精心构造的攻击。如果该receiver供其它应用外部使用,开发者可以将这些应用的用户ID设置成与本应用一样的,并在AndroidManifest.xml中设置"android:exported=false"。
OWASP M4:无意识的数据泄露
修复建议 如果receiver本来的意图仅是供应用内部、或者有相同用户ID的应用使用,推荐使用"android:exported"的默认值 ("false")。如果该receiver供相关应用外部使用(没有用到intent filters),开发者可以通过设置权限范围来限制可以向该receiver发送消息的消息源。为此,开发者可设置"android:exported=true",同时通过在AndroidManifest.xml中设置"android:protectionLevel=signature"或者"android:protectionLevel=signatureOrSystem"来控制对应用的访问权限。

如果该receiver供其它应用外部使用(用到intent filters),开发者可以将这些应用的用户ID设置成与本应用一样的,并在AndroidManifest.xml中设置"android:exported=false"。
案例 2 查看
案例 收起
行号:181~195
路径:/AndroidManifest.xml
代码:
案例:1 / 2
行号:197~206
路径:/AndroidManifest.xml
代码:
案例:2 / 2
风险名称 动态注册Receiver风险
等级
总结 不正确的动态注册Receiver可能会造成风险,比如数据泄漏,拒绝服务等
详情 Broadcast Receivers为应用提供接收系统或其他应用广播的Intents的功能,这一机制在应用的其他组件不运行的时候也能工作。Android里有两种生成Broadcast Receivers的方式。一种方式是在AndroidManifest.xml文件里通过标签静态的声明;另一种方式是调用Context.registerReceiver()方法动态的注册。Android里有两种Context.registerReceiver()函数。Context.registerReceiver(BroadcastReceiver, IntentFilter)所注册的Broadcast Receiver可以在Main Activity线程中运行。主线程中任何和参数Intent-filters匹配的广播Intent,都可以调用这个Receiver。另外一种方法,Context.registerReceiver(BroadcastReceiver, IntentFilter, String, android.os.Handler),允许开发者通过设置权限来限制向该Receiver发送广播的Intent,这个方法也可以允许Receiver在不同于主线程的其他线程里运行。

使用了Context API的Receivers本质上提供不同应用间的通讯便利,这一特征可能会被其他应用滥用。使用Context.registerReceiver(BroadcastReceiver, IntentFilter)函数的时候,任何应用都可以向所注册的Receiver发送广播。如果没有正确设置该方法的参数,会存在风险,比如数据泄漏、拒绝服务等。
OWASP M4:无意识的数据泄露
修复建议 1) 如果不需要在应用之间发送广播,可以使用LocalBroadcastManager类。这个类的效率更高(不需要进程间的交互)。而且,使用这个类,其他应用不再能够发送/接收本应用的广播消息,降低了泄漏敏感信息的风险。开发者不再需要担心其他应用可能会带来的安全风险问题; 2) 当在manifest文件里声明Receiver并指定对应的intent-filters的时候,任何其他的应用都可以向它发送广播。为了阻止其他应用向该应用发送广播,可以设置android:exported="false",向其他应用隐藏该Receiver; 3) 在接收广播的时候,要使用权限。在AndroidManifest.xml中静态的声明Receiver的时候,可以提供一个非空权限(Signature 或者 SignatureOrSystem)。同样的,在使用registerReceiver(BroadcastReceiver, IntentFilter, String, android.os.Handler) 函数动态的注册Receiver的时候。也可以设置非空权限(Signature 或者 SignatureOrSystem)。避免使用registerReceiver(BroadcastReceiver, IntentFilter)去动态的注册Receiver。只有被赋予了这个权限的广播才能向该Receiver发送Intent, 这项权限可以通过AndroidManifest.xml中 标签请求得到。
案例 13 查看
案例 收起
行号:113
路径:/android/support/v4/media/TransportMediatorJellybeanMR2.java
代码:android.content.Context.registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter):android.content.Intent
案例:1 / 13
行号:241
路径:/cn/jpush/android/service/ServiceInterface/TagAliasOperator.java
代码:android.content.Context.registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter):android.content.Intent
案例:2 / 13
行号:1747
路径:/cn/jpush/android/util/b.java
代码:android.content.Context.registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter):android.content.Intent
案例:3 / 13
行号:1748
路径:/cn/jpush/android/util/b.java
代码:android.content.Context.registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter):android.content.Intent
案例:4 / 13
行号:1757
路径:/cn/jpush/android/util/b.java
代码:android.content.Context.registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter):android.content.Intent
案例:5 / 13
行号:1758
路径:/cn/jpush/android/util/b.java
代码:android.content.Context.registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter):android.content.Intent
案例:6 / 13
行号:1759
路径:/cn/jpush/android/util/b.java
代码:android.content.Context.registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter):android.content.Intent
案例:7 / 13
行号:2438
路径:/cn/jpush/android/util/b.java
代码:android.content.Context.registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter):android.content.Intent
案例:8 / 13
行号:255
路径:/com/tencent/map/b/g.java
代码:android.content.Context.registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter):android.content.Intent
案例:9 / 13
行号:22
路径:/com/tencent/weibo/sdk/android/component/sso/AuthHelper.java
代码:android.content.Context.registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter):android.content.Intent
案例:10 / 13
行号:133
路径:/com/tencent/wxop/stat/g.java
代码:android.content.Context.registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter):android.content.Intent
案例:11 / 13
行号:193
路径:/com/iflytek/cloud/SpeechUtility.java
代码:android.content.Context.registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter):android.content.Intent
案例:12 / 13
行号:737
路径:/com/tencent/map/b/f.java
代码:android.content.Context.registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter):android.content.Intent
案例:13 / 13
风险名称 执行外部命令风险
等级
总结 应用程序试图执行外部命令或程序,可能会造成恶意代码注入风险。
详情 很多应用需要执行外部命令或者程序来实现其功能。每个Java应用都有一个Runtime类,这个类可以在应用运行的时候,提供让它与环境交互的接口。Runtime.exec()函数经常被用来启动新的进程。但是Runtime.exec()的语法设计得太烂了,如果应用程序对要传进外部命令的数据预处理不足,就会带来代码注入的危险。

这里的代码注入有两种形式,一种是命令行注入,一种是参数注入。命令行注入允许攻击者将任意系统命令注入到应用程序中,注入的命令执行的时候有着与Java 应用程序同样的优先级别,攻击者有着与系统shell同样的权利。对于Runtime.exec() API,如果进程关联使用了像cmd.exe和/bin/sh之类的shell命令,命令行代码注入攻击可能就会发生。在这种情况下,攻击者甚至可以将多条命令串到一起执行。参数注入攻击的产生是因为攻击者巧妙的控制了输入到被执行程序中的数据。比如,如果输入的参数中含有空格,双引号,以-或者/开始,代码就很容易受到参数注入的攻击。

命令行注入和参数注入攻击可以造成很多严重后果,比如静默安装和卸载程序, 获取系统安装位置,修改hosts文件,将系统里文件拷贝出来等等。更多例子请参照CVE-2010-0886CVE-2010-1826
OWASP M7: 客户端注入
修复建议 开发者应该避免使用Runtime.exec()来启动shell命令、执行系统命令。如果有使用Runtime.exec()的需要,应该尽量用Java APIs来替代。比如如果需要用使用shell的ls命令来罗列文件,可以用Java的File类和list函数(File.list()方法)来替代。如果必须使用Runtime.exec(),要在调用该命令前,仔细验证从环境里传进来的参数。比如可以用正则表达式来构造一个白名单,来校验和限制用户输入内容。
案例 4 查看
案例 收起
行号:2514
路径:/cn/jpush/android/util/b.java
代码:java.lang.Runtime.exec(java.lang.String):java.lang.Process
案例:1 / 4
行号:350
路径:/com/alipay/security/mobile/module/deviceinfo/DeviceInfo.java
代码:java.lang.Runtime.exec(java.lang.String):java.lang.Process
案例:2 / 4
行号:442
路径:/com/alipay/security/mobile/module/deviceinfo/DeviceInfo.java
代码:java.lang.Runtime.exec(java.lang.String):java.lang.Process
案例:3 / 4
行号:64
路径:/com/iflytek/thridparty/aa.java
代码:java.lang.Runtime.exec(java.lang.String):java.lang.Process
案例:4 / 4
风险名称 随机数发生器初始化漏洞
等级
总结 随机数种子生成方法不随机会造成漏洞。
详情 SecureRandom类是一种强随机数发生器。随机数的种子、随机数发生器的安全性能取决于种子和算法。一旦随机数的种子和算法确定了,所产生的随机数也就确定了。如果种子没有给定,SecureRandom会用系统熵源作为默认的随机数种子产生源。对于Android系统,熵源在/dev/urandom文件里。熵是一个不可以预测的输入(真正的随机源),基于不可预测的系统过程,比如时间事件、中断事件等。用这种方法产生的种子在理论上有可被破解的可能性,但在实际操作中却基本不可能实现。在Android 4.2之前,SecureRandom类基于Bouncy Castle。当setSeed()函数被调用后,Android用自定义的种子来替代默认的。所以,用相同的种子生成的随机数是一样,随机性就不能得到保证。在 bitcoin钱包 事件之后,google修改了SecureRandom的内部执行方法。新的版本的Android用了基于OpenSSL的算法。当用户调用setSeed()函数,给定的种子被添加到已有的种子里而不是简单的替代。
OWASP M6: 密码破解
修复建议 用系统熵源产生的种子来初始化随机数发生器,这个过程可以通过设定java.security(位于$JAVA_HOME/lib/security/)里securerandom.source的值来实现:
securerandom.source=file:/dev/urandomgen
或者,
securerandom.source=file:/dev/random
random和urandom都是Linux中/dev里产生随机数据的设备,但是它们有一些不同。对于/dev/random来说,如果熵源字节数低,就不能从/dev/random中读数据,直到有足够的熵源。urandom则是先从熵源中读数据,如果熵源用完了,就用SHA加密哈希算法来产生强随机数。如果在短时间内需要更多的随机数,/dev/urandom比/dev/random好。因为在熵源低的时候,/dev/random的使用受限,影响系统的性能。建议只有在非常需要/dev/random的情况下,才使用它。
案例 1 查看
案例 收起
行号:29
路径:/com/ta/utdid2/android/utils/AESUtils.java
代码:java.security.SecureRandom.setSeed(byte[]):void
案例:1 / 1
风险名称 Service组件导出风险
等级
总结 使用到intent filters的Service组件不恰当导出,会导致第三方应用越权访问本应用的敏感数据。
详情 Service组件可以由其他组件启动,用来在后台执行某个耗时操作。即使在启动该service的组件结束后,该service也可以继续执行。Services没有用户可视的界面。在定义某个service的时候,"android:exported"属性用来指定这个service是否可以被第三方应用中的组件启用或者捆绑。如果属性值为"true",说明这个service可以被第三方应用调用或捆绑;如果属性值为"false",说明所定义的service只能被本应用或者与本应用有相同用户ID的应用调用或捆绑。

如果对被导出service组件的访问限制不足,其他应用,包括恶意应用,可能会启动或捆绑这个service,从而导致恶意应用执行非法行为、访问敏感信息、使本应用的内部状态崩溃等。

"android:exported"属性的默认值依赖于该service是否有intent filter。如果该service没有用到intent filters,只有在指定精确类名的时候,该service才会被启用,说明这个service只能被应用内部的组件使用(因为其他应用不知道它的类名)。这种情况下,"android:exported"的默认值为"false"。另外一方面,如果service有至少一个intent filters,说明这个service可供外部使用,这种情况下的"android:exported"的默认属性值为"true"。

根据service中是否使用intent filters, service组件的不恰当导出造成的风险可以分为如下两类:

类别1: Service中没有使用到intent filters。如果service本来的意图仅是供应用内部、或者有相同用户ID的应用使用,推荐使用"android:exported"的默认值 ("false")。在AndroidManifest.xml 中设置"android:exported=true"允许其他应用启动该service,会导致难以预料的行为或者漏洞。如果该service供相关应用外部使用,开发者可以通过设置权限范围来限制service对其他应用的暴露。为此,开发者可在AndroidManifest.xml中设置"android:exported=true",同时通过设置"android:protectionLevel=signature"或者"android:protectionLevel=signatureOrSystem"来控制对应用的访问权限。

类别2: Service中使用到intent filters(即当前所检测到风险对应的类别)。在Android平台上,在AndroidManifest.xml 文件中为service定义intent filter意味着该service可能会被其他应用启用或者捆绑。如果定义某个intent filter的时候,没有在AndroidManifest.xml中明确设置"android:exported=false",该service可能被其他应用(包括恶意应用)激活滥用,造成信息泄露或者精心构造的攻击。如果该service供其它应用外部使用,开发者可以将这些应用的用户ID设置成与本应用一样的,并在AndroidManifest.xml中设置"android:exported=false"。
OWASP M4:无意识的数据泄露
修复建议 如果service本来的意图仅是供应用内部、或者有相同用户ID的应用使用,推荐使用"android:exported"的默认值 ("false")。如果该service供相关应用外部使用(没有用到intent filters),开发者可以通过设置权限范围来限制service对其他应用的暴露。为此,开发者可在AndroidManifest.xml中设置"android:exported=true",同时通过设置"android:protectionLevel=signature"或者"android:protectionLevel=signatureOrSystem"来控制对应用的访问权限。

如果该service供其它应用外部使用(用到intent filters),开发者可以将这些应用的用户ID设置成与本应用一样的,并在AndroidManifest.xml中设置"android:exported=false"。
案例 1 查看
案例 收起
行号:207~212
路径:/AndroidManifest.xml
代码:
案例:1 / 1
风险名称 隐性Intent劫持应用
等级
总结 通过隐藏的Intent启动应用,存在被劫持的风险。
详情 安卓框架允许app以及app中的组件之间传递消息进行互相通信,叫做Intent。通过隐藏的Intent启动app,存在被劫持的风险。
OWASP M8: 缺乏输入有效性验证
修复建议 请使用显式intent代替隐式intent。
案例 2 查看
案例 收起
行号:105
路径:/com/alipay/sdk/auth/i.java
代码:android.content.Intent.(android.content.Context, java.lang.Class):void
案例:1 / 2
行号:972
路径:/com/facebook/appevents/AppEventsLogger.java
代码:android.content.Intent.(java.lang.String):void
案例:2 / 2
风险名称 WebView保存密码风险
等级
总结 程序使用了WebView组件,但是没有将setSavePassword设为false。在API级别18以及更老的版本中,这会导致密码明文被泄漏。
详情 WebWiew是一个Java类(桥接模式),它采用WebKit渲染引擎来显示网页,包含有通过历史记录来进行前进和后退浏览、放大和缩小、执行文本搜索等方法。在安卓18级别(安卓4.3.1)之前,安卓API支持在WebView里保存密码。开发者可以用setSavePassword来指定WebView是否可以保存用户的密码。setSavePassword的默认值为true. 如果开发者不明确将setSavePassword的值设置为false, 用户输入账户和密码登陆页面时,系统会弹出提示询问是否保存密码。如果用户选择了是,密码就会被明文保存在这个应用的数据库中(路径为/data/data/com.package.name/databases/webview.db)。如果设备被root了,这个数据库就可以被访问到。用户明文保存的密码,还有其他敏感信息就会泄漏。
OWASP M2: 不安全的数据存储
修复建议 因为市场上还有超过20%的安卓4.3.1或更老版本,在API级别18(Android 4.1-4.3.1)以及更老的版本中,需要明确将setSavePassword的值设为false来禁止密码的保存。
案例 32 查看
案例 收起
行号:102
路径:/bolts/WebViewAppLinkResolver.java
代码: view.loadUrl(WebViewAppLinkResolver.TAG_EXTRACTION_JAVASCRIPT);
案例:1 / 32
行号:135
路径:/cn/jpush/android/p003b/p004a/C0164c.java
代码: webView.loadUrl(this.f155b.m128a());
案例:2 / 32
行号:289
路径:/cn/jpush/android/ui/PushActivity.java
代码: pushActivity.f452c.loadUrl(str);
案例:3 / 32
行号:291
路径:/cn/jpush/android/ui/PushActivity.java
代码: pushActivity.f452c.loadUrl(str2);
案例:4 / 32
行号:246
路径:/cn/jpush/android/ui/FullScreenView.java
代码: this.mWebView.loadUrl(str);
案例:5 / 32
行号:301
路径:/cn/jpush/android/ui/C0217c.java
代码: webView.loadUrl(str);
案例:6 / 32
行号:297
路径:/cn/jpush/android/ui/PopWinActivity.java
代码: this.f447c.loadUrl(str2);
案例:7 / 32
行号:299
路径:/cn/jpush/android/ui/PopWinActivity.java
代码: this.f447c.loadUrl(str);
案例:8 / 32
行号:66
路径:/com/facebook/internal/FacebookWebFallbackDialog.java
代码: webView.loadUrl("javascript:" + "(function() { var event = document.createEvent('Event'); event.initEvent('fbPlatformDialogMustClose',true,true); document.dispatchEvent(event);})();");
案例:9 / 32
行号:442
路径:/com/facebook/internal/WebDialog.java
代码: this.webView.loadUrl(this.url);
案例:10 / 32
行号:51
路径:/com/handmark/pulltorefresh/library/extras/PullToRefreshWebView2.java
代码: ((WebView) getRefreshableView()).loadUrl(DEF_JS_READY_PULL_DOWN_CALL);
案例:11 / 32
行号:56
路径:/com/handmark/pulltorefresh/library/extras/PullToRefreshWebView2.java
代码: ((WebView) getRefreshableView()).loadUrl(DEF_JS_READY_PULL_UP_CALL);
案例:12 / 32
行号:14
路径:/com/alipay/sdk/auth/C0324c.java
代码: this.f817b.f808c.loadUrl("javascript:" + this.f816a);
案例:13 / 32
行号:99
路径:/com/izhiping/activity/improve/ImproveDetailActivity.java
代码: view.loadUrl(url);
案例:14 / 32
行号:236
路径:/com/izhiping/activity/improve/ImproveDetailActivity.java
代码: this.detail_wb.loadUrl(this.detailData.articleH5Url);
案例:15 / 32
行号:23
路径:/com/izhiping/activity/AgreeActivity.java
代码: this.webView.loadUrl("http://www.zhipingjia.com/licence.html");
案例:16 / 32
行号:73
路径:/com/izhiping/activity/BaseWebActivity.java
代码: BaseWebActivity.this.mWebView.loadUrl(url);
案例:17 / 32
行号:141
路径:/com/izhiping/activity/SimpleWebActivity.java
代码: this.mWebView.loadUrl(this.mUrl);
案例:18 / 32
行号:414
路径:/com/tencent/open/yyb/AppbarActivity.java
代码: this.mWebView.loadUrl(this.url);
案例:19 / 32
行号:347
路径:/com/tencent/open/yyb/AppbarJsBridge.java
代码: this.f2421a.loadUrl(stringBuffer.toString());
案例:20 / 32
行号:59
路径:/com/tencent/open/web/security/C1998c.java
代码: webView.loadUrl(stringBuffer2);
案例:21 / 32
行号:45
路径:/com/tencent/open/C1164a.java
代码: webView.loadUrl("javascript:window.JsBridge&&JsBridge.callback(" + this.f2272b + ",{'r':0,'result':" + str + "});");
案例:22 / 32
行号:52
路径:/com/tencent/open/C1164a.java
代码: webView.loadUrl("javascript:window.JsBridge&&JsBridge.callback(" + this.f2272b + ",{'r':1,'result':'no such method'})");
案例:23 / 32
行号:59
路径:/com/tencent/open/C1164a.java
代码: webView.loadUrl("javascript:" + str);
案例:24 / 32
行号:119
路径:/com/tencent/weibo/sdk/android/component/Authorize.java
代码: Authorize.this.webView.loadUrl(Authorize.this.path);
案例:25 / 32
行号:208
路径:/com/tencent/weibo/sdk/android/component/Authorize.java
代码: this.webView.loadUrl(this.path);
案例:26 / 32
行号:328
路径:/com/umeng/socialize/view/OauthDialog.java
代码: this.f2866c.loadUrl(m3124a(this.f2875l));
案例:27 / 32
行号:21
路径:/com/umeng/socialize/handler/TwitterWebActivity.java
代码: view.loadUrl(url);
案例:28 / 32
行号:50
路径:/com/umeng/socialize/handler/TwitterWebActivity.java
代码: this.wv.loadUrl(getIntent().getStringExtra("auth_url"));
案例:29 / 32
行号:65
路径:/com/renn/rennsdk/oauth/OAuthActivity.java
代码: OAuthActivity.this.mWebView.loadUrl(new StringBuilder(Config.BASE_AUTH_URL_RELEASE).append(OAuthActivity.this.generateAuthorizationURLString()).toString());
案例:30 / 32
行号:160
路径:/com/renn/rennsdk/oauth/OAuthActivity.java
代码: OAuthActivity.this.mWebView.loadUrl(OAuthActivity.this.mRetryUrl);
案例:31 / 32
行号:226
路径:/com/renn/rennsdk/oauth/OAuthActivity.java
代码: this.mWebView.loadUrl(new StringBuilder(Config.BASE_AUTH_URL_RELEASE).append(generateAuthorizationURLString()).toString());
案例:32 / 32
风险名称 设备ID泄漏风险
等级 提示
总结 该应用试图获取设备ID,比如GSM的IMEI号码、CDMA手机的MEID或ESN号码。
详情 该应用试图获取设备ID,比如GSM的IMEI号码、CDMA手机的MEID或ESN号码。Android设备ID是在设备首次启动的时候随机生成的。这个号码一直不变,除非做恢复出厂设置。
OWASP M4:无意识的数据泄露
修复建议 对于开发者来说,在收集设备ID之类的敏感信息的时候,要完全清楚隐私政策,比如要确定这些敏感信息以安全的方式处理/存储/传播。
案例 21 查看
案例 收起
行号:2643
路径:/cn/jpush/android/util/b.java
代码:android.telephony.TelephonyManager.getDeviceId():java.lang.String
案例:1 / 21
行号:19
路径:/com/alipay/sdk/util/a.java
代码:android.telephony.TelephonyManager.getDeviceId():java.lang.String
案例:2 / 21
行号:663
路径:/com/alipay/security/mobile/module/deviceinfo/DeviceInfo.java
代码:android.telephony.TelephonyManager.getDeviceId():java.lang.String
案例:3 / 21
行号:105
路径:/com/alipay/security/mobile/module/deviceinfo/EnvironmentInfo.java
代码:android.telephony.TelephonyManager.getDeviceId():java.lang.String
案例:4 / 21
行号:82
路径:/com/iflytek/sunflower/c/a.java
代码:android.telephony.TelephonyManager.getDeviceId():java.lang.String
案例:5 / 21
行号:73
路径:/com/iflytek/sunflower/c/e.java
代码:android.telephony.TelephonyManager.getDeviceId():java.lang.String
案例:6 / 21
行号:124
路径:/com/iflytek/thridparty/N.java
代码:android.telephony.TelephonyManager.getDeviceId():java.lang.String
案例:7 / 21
行号:52
路径:/com/iflytek/thridparty/bk.java
代码:android.telephony.TelephonyManager.getDeviceId():java.lang.String
案例:8 / 21
行号:10
路径:/com/iflytek/thridparty/h.java
代码:android.telephony.TelephonyManager.getDeviceId():java.lang.String
案例:9 / 21
行号:69
路径:/com/izhiping/ExampleUtil.java
代码:android.telephony.TelephonyManager.getDeviceId():java.lang.String
案例:10 / 21
行号:32
路径:/com/izhiping/utils/CommonUtils.java
代码:android.telephony.TelephonyManager.getDeviceId():java.lang.String
案例:11 / 21
行号:65
路径:/com/renn/rennsdk/oauth/EnvironmentUtil.java
代码:android.telephony.TelephonyManager.getDeviceId():java.lang.String
案例:12 / 21
行号:536
路径:/com/sina/weibo/sdk/utils/AidTask.java
代码:android.telephony.TelephonyManager.getDeviceId():java.lang.String
案例:13 / 21
行号:544
路径:/com/sina/weibo/sdk/utils/AidTask.java
代码:android.telephony.TelephonyManager.getDeviceId():java.lang.String
案例:14 / 21
行号:26
路径:/com/ta/utdid2/android/utils/PhoneInfoUtils.java
代码:android.telephony.TelephonyManager.getDeviceId():java.lang.String
案例:15 / 21
行号:25
路径:/com/tencent/a/a/a/a/h.java
代码:android.telephony.TelephonyManager.getDeviceId():java.lang.String
案例:16 / 21
行号:59
路径:/com/tencent/open/b/c.java
代码:android.telephony.TelephonyManager.getDeviceId():java.lang.String
案例:17 / 21
行号:487
路径:/com/tencent/stat/common/k.java
代码:android.telephony.TelephonyManager.getDeviceId():java.lang.String
案例:18 / 21
行号:114
路径:/com/tencent/wxop/stat/b/r.java
代码:android.telephony.TelephonyManager.getDeviceId():java.lang.String
案例:19 / 21
行号:52
路径:/com/umeng/socialize/utils/DeviceConfig.java
代码:android.telephony.TelephonyManager.getDeviceId():java.lang.String
案例:20 / 21
行号:101
路径:/com/tencent/map/b/f/a.java
代码:android.telephony.TelephonyManager.getDeviceId():java.lang.String
案例:21 / 21
风险名称 本地拒绝服务风险
等级 提示
总结 应用对Intent数据没有进行正确处理(充分校验输入参数、空值判定、类型转换判断、异常处理等),会引起拒绝服务风险、程序崩溃。
详情 Intent是对要进行的操作一种抽象描述。Intent可以用来启动Activity,发送Broadcast,与后台Service交互。Intent也为不同应用间组件的互相调用提供了便利。Intent里最主要的信息有action和data,此外还有category, type, component和extras等次要信息。应用可以通过Intents来调用组件。如果在使用Intent数据前,没有做充分的校验,应用可能会接受空值数据或者无效/异常/畸形数据,产生拒绝服务、最终崩溃。如果组件的导出属性被设为true,恶意应用可能会向该组件传递畸形数据,进行本地拒绝服务攻击。本地拒绝服务漏洞有五种形式:1) 通用型未定义类异常。应用可能会使用getXXXExtra 形式的函数来获取extra数据,如果该类不存在,应用就找不到,就会产生拒绝服务,抛出ClassNotFoundException异常; 2)空Action异常。应用可能会使用了getAction获取要进行的action的名称。如果该action不存在,应用就找不到,如果应用对getAction的返回值没有进行判空冗错处理,就会产生拒绝服务,抛出NullPointerException异常; 3)Array/List数据越界异常。应用可能会使用getXXXArrayExtra或getXXXListExtra形式的函数来获取Array或者List。如果程序没有对获取到的数据大小做判断,访问超出Array/List范围的元素,就会产生拒绝服务,抛出IndexOutOfBoundsException异常; 4)类型强制转换异常。如果应用没有对从Intent里获取到的数据做类型判断,直接进行类型强制转换,就会产生拒绝服务,抛出ClassCastException异常; 5)访问不存在组件异常。应用可能会试图调用第三方应用(微信,新浪等)分享的组件。如果设备里没有安装这些应用,在调用这些组件的时候就会产生拒绝服务,引起崩溃。
OWASP M7: 客户端注入
修复建议 1) 避免组件的不必要导出。如果应用的某个组件的导出属性被设为true,其他程序就可以使用。如果定义某个intent filter的时候,没有在AndroidManifest.xml中明确设置"android:exported=false",该组件可能被其他应用(包括恶意应用)激活滥用,造成信息泄露或者精心构造的攻击,所以如非必要,不要将组件导出。如果该组件要供其它应用外部使用,开发者可以将这些应用的用户ID设置成与本应用一样的,并在AndroidManifest.xml中设置"android:exported=false";2) 严格校验传递到Intent中的数据,推荐使用白名单的方式。如果要使用的数据是从其他应用中来的,应该通过设置权限的方式限制要用的应用;3) 在使用Intent获取extra数据、action,或者对获取到的数据做类型转换时,用try catch来捕获异常,增加异常处理,防止抛出异常引发崩溃。如果要访问从Intent中获取的Array/List类型的数据,检查长度后再做操作。在调用自身的Activity时,要确认该Activity已经在Androidmanifest.xml中定义过了;如果需要调用其他应用的Activity,要做冗错处理。
案例 270 查看
案例 收起
行号:36
路径:/android/support/v4/app/NavUtils/NavUtilsImplBase.java
代码:android.content.Intent.getAction():java.lang.String
案例:1 / 270
行号:46
路径:/android/support/v4/app/NotificationCompatSideChannelService.java
代码:android.content.Intent.getAction():java.lang.String
案例:2 / 270
行号:44
路径:/android/support/v4/app/ShareCompat/IntentBuilder.java
代码:android.content.Intent.getAction():java.lang.String
案例:3 / 270
行号:71
路径:/android/support/v4/app/ShareCompat/IntentBuilder.java
代码:android.content.Intent.getStringArrayExtra(java.lang.String):java.lang.String[]
案例:4 / 270
行号:88
路径:/android/support/v4/app/ShareCompat/IntentBuilder.java
代码:android.content.Intent.getStringArrayExtra(java.lang.String):java.lang.String[]
案例:5 / 270
行号:138
路径:/android/support/v4/app/ShareCompat/IntentBuilder.java
代码:android.content.Intent.getAction():java.lang.String
案例:6 / 270
行号:147
路径:/android/support/v4/app/ShareCompat/IntentBuilder.java
代码:android.content.Intent.getParcelableExtra(java.lang.String):android.os.Parcelable
案例:7 / 270
行号:245
路径:/android/support/v4/app/ShareCompat/IntentReader.java
代码:android.content.Intent.getAction():java.lang.String
案例:8 / 270
行号:250
路径:/android/support/v4/app/ShareCompat/IntentReader.java
代码:android.content.Intent.getAction():java.lang.String
案例:9 / 270
行号:254
路径:/android/support/v4/app/ShareCompat/IntentReader.java
代码:android.content.Intent.getAction():java.lang.String
案例:10 / 270
行号:262
路径:/android/support/v4/app/ShareCompat/IntentReader.java
代码:android.content.Intent.getCharSequenceExtra(java.lang.String):java.lang.CharSequence
案例:11 / 270
行号:266
路径:/android/support/v4/app/ShareCompat/IntentReader.java
代码:android.content.Intent.getStringExtra(java.lang.String):java.lang.String
案例:12 / 270
行号:281
路径:/android/support/v4/app/ShareCompat/IntentReader.java
代码:android.content.Intent.getParcelableExtra(java.lang.String):android.os.Parcelable
案例:13 / 270
行号:292
路径:/android/support/v4/app/ShareCompat/IntentReader.java
代码:android.content.Intent.getParcelableExtra(java.lang.String):android.os.Parcelable
案例:14 / 270
行号:308
路径:/android/support/v4/app/ShareCompat/IntentReader.java
代码:android.content.Intent.getStringArrayExtra(java.lang.String):java.lang.String[]
案例:15 / 270
行号:312
路径:/android/support/v4/app/ShareCompat/IntentReader.java
代码:android.content.Intent.getStringArrayExtra(java.lang.String):java.lang.String[]
案例:16 / 270
行号:316
路径:/android/support/v4/app/ShareCompat/IntentReader.java
代码:android.content.Intent.getStringArrayExtra(java.lang.String):java.lang.String[]
案例:17 / 270
行号:320
路径:/android/support/v4/app/ShareCompat/IntentReader.java
代码:android.content.Intent.getStringExtra(java.lang.String):java.lang.String
案例:18 / 270
行号:460
路径:/android/support/v4/app/ShareCompat.java
代码:android.content.Intent.getStringExtra(java.lang.String):java.lang.String
案例:19 / 270
行号:468
路径:/android/support/v4/app/ShareCompat.java
代码:android.content.Intent.getParcelableExtra(java.lang.String):android.os.Parcelable
案例:20 / 270
行号:130
路径:/android/support/v4/content/LocalBroadcastManager.java
代码:android.content.Intent.getAction():java.lang.String
案例:21 / 270
行号:168
路径:/android/support/v4/content/LocalBroadcastManager.java
代码:android.content.Intent.getAction():java.lang.String
案例:22 / 270
行号:30
路径:/android/support/v4/content/WakefulBroadcastReceiver.java
代码:android.content.Intent.getIntExtra(java.lang.String, int):int
案例:23 / 270
行号:309
路径:/android/support/v4/media/MediaBrowserServiceCompat/MediaBrowserServiceImplBase.java
代码:android.content.Intent.getAction():java.lang.String
案例:24 / 270
行号:42
路径:/android/support/v4/media/MediaBrowserServiceCompatApi21/MediaBrowserServiceAdaptorApi21.java
代码:android.content.Intent.getAction():java.lang.String
案例:25 / 270
行号:54
路径:/android/support/v4/media/TransportMediatorJellybeanMR2/3.java
代码:android.content.Intent.getParcelableExtra(java.lang.String):android.os.Parcelable
案例:26 / 270
行号:15
路径:/android/support/v4/media/session/MediaButtonReceiver.java
代码:android.content.Intent.getAction():java.lang.String
案例:27 / 270
行号:24
路径:/android/support/v4/media/session/MediaButtonReceiver.java
代码:android.content.Intent.getAction():java.lang.String
案例:28 / 270
行号:27
路径:/android/support/v4/media/session/MediaButtonReceiver.java
代码:android.content.Intent.getParcelableExtra(java.lang.String):android.os.Parcelable
案例:29 / 270
行号:73
路径:/android/support/v4/net/ConnectivityManagerCompat.java
代码:android.content.Intent.getParcelableExtra(java.lang.String):android.os.Parcelable
案例:30 / 270
行号:8
路径:/bolts/AppLinks.java
代码:android.content.Intent.getBundleExtra(java.lang.String):android.os.Bundle
案例:31 / 270
行号:117
路径:/cn/jpush/android/a/e.java
代码:android.content.Intent.getAction():java.lang.String
案例:32 / 270
行号:125
路径:/cn/jpush/android/a/e.java
代码:android.content.Intent.getAction():java.lang.String
案例:33 / 270
行号:125
路径:/cn/jpush/android/a/e.java
代码:android.content.Intent.getIntExtra(java.lang.String, int):int
案例:34 / 270
行号:132
路径:/cn/jpush/android/a/e.java
代码:android.content.Intent.getIntExtra(java.lang.String, int):int
案例:35 / 270
行号:501
路径:/cn/jpush/android/service/DownloadService.java
代码:android.content.Intent.getSerializableExtra(java.lang.String):java.io.Serializable
案例:36 / 270
行号:500
路径:/cn/jpush/android/service/PushReceiver.java
代码:android.content.Intent.getAction():java.lang.String
案例:37 / 270
行号:560
路径:/cn/jpush/android/service/PushReceiver.java
代码:android.content.Intent.getSerializableExtra(java.lang.String):java.io.Serializable
案例:38 / 270
行号:571
路径:/cn/jpush/android/service/PushReceiver.java
代码:android.content.Intent.getIntExtra(java.lang.String, int):int
案例:39 / 270
行号:583
路径:/cn/jpush/android/service/PushReceiver.java
代码:android.content.Intent.getStringExtra(java.lang.String):java.lang.String
案例:40 / 270
行号:588
路径:/cn/jpush/android/service/PushReceiver.java
代码:android.content.Intent.getStringExtra(java.lang.String):java.lang.String
案例:41 / 270
行号:588
路径:/cn/jpush/android/service/PushReceiver.java
代码:android.content.Intent.getStringExtra(java.lang.String):java.lang.String
案例:42 / 270
行号:588
路径:/cn/jpush/android/service/PushReceiver.java
代码:android.content.Intent.getStringExtra(java.lang.String):java.lang.String
案例:43 / 270
行号:597
路径:/cn/jpush/android/service/PushReceiver.java
代码:android.content.Intent.getBooleanExtra(java.lang.String, boolean):boolean
案例:44 / 270
行号:598
路径:/cn/jpush/android/service/PushReceiver.java
代码:android.content.Intent.getStringExtra(java.lang.String):java.lang.String
案例:45 / 270
行号:599
路径:/cn/jpush/android/service/PushReceiver.java
代码:android.content.Intent.getIntExtra(java.lang.String, int):int
案例:46 / 270
行号:603
路径:/cn/jpush/android/service/PushReceiver.java
代码:android.content.Intent.getStringExtra(java.lang.String):java.lang.String
案例:47 / 270
行号:664
路径:/cn/jpush/android/service/PushReceiver.java
代码:android.content.Intent.getStringExtra(java.lang.String):java.lang.String
案例:48 / 270
行号:666
路径:/cn/jpush/android/service/PushReceiver.java
代码:android.content.Intent.getStringExtra(java.lang.String):java.lang.String
案例:49 / 270
行号:679
路径:/cn/jpush/android/service/PushReceiver.java
代码:android.content.Intent.getStringExtra(java.lang.String):java.lang.String
案例:50 / 270
行号:692
路径:/cn/jpush/android/service/PushReceiver.java
代码:android.content.Intent.getParcelableExtra(java.lang.String):android.os.Parcelable
案例:51 / 270
行号:704
路径:/cn/jpush/android/service/PushReceiver.java
代码:android.content.Intent.getBooleanExtra(java.lang.String, boolean):boolean
案例:52 / 270
行号:1051
路径:/cn/jpush/android/service/PushService.java
代码:android.content.Intent.getAction():java.lang.String
案例:53 / 270
行号:258
路径:/cn/jpush/android/service/ServiceInterface/TagAliasOperator.java
代码:android.content.Intent.getLongExtra(java.lang.String, long):long
案例:54 / 270
行号:259
路径:/cn/jpush/android/service/ServiceInterface/TagAliasOperator.java
代码:android.content.Intent.getIntExtra(java.lang.String, int):int
案例:55 / 270
行号:266
路径:/cn/jpush/android/service/ServiceInterface/TagAliasOperator.java
代码:android.content.Intent.getAction():java.lang.String
案例:56 / 270
行号:77
路径:/cn/jpush/android/ui/ListViewActivity.java
代码:android.content.Intent.getSerializableExtra(java.lang.String):java.io.Serializable
案例:57 / 270
行号:238
路径:/cn/jpush/android/ui/PopWinActivity.java
代码:android.content.Intent.getSerializableExtra(java.lang.String):java.io.Serializable
案例:58 / 270
行号:335
路径:/cn/jpush/android/ui/PushActivity.java
代码:android.content.Intent.getBooleanExtra(java.lang.String, boolean):boolean
案例:59 / 270
行号:336
路径:/cn/jpush/android/ui/PushActivity.java
代码:android.content.Intent.getSerializableExtra(java.lang.String):java.io.Serializable
案例:60 / 270
行号:2449
路径:/cn/jpush/android/util/b.java
代码:android.content.Intent.getIntExtra(java.lang.String, int):int
案例:61 / 270
行号:2451
路径:/cn/jpush/android/util/b.java
代码:android.content.Intent.getIntExtra(java.lang.String, int):int
案例:62 / 270
行号:28
路径:/com/alipay/share/sdk/openapi/channel/APMessage/Receiver.java
代码:android.content.Intent.getAction():java.lang.String
案例:63 / 270
行号:12
路径:/com/facebook/AccessTokenTracker/CurrentAccessTokenBroadcastReceiver.java
代码:android.content.Intent.getAction():java.lang.String
案例:64 / 270
行号:13
路径:/com/facebook/AccessTokenTracker/CurrentAccessTokenBroadcastReceiver.java
代码:android.content.Intent.getParcelableExtra(java.lang.String):android.os.Parcelable
案例:65 / 270
行号:13
路径:/com/facebook/AccessTokenTracker/CurrentAccessTokenBroadcastReceiver.java
代码:android.content.Intent.getParcelableExtra(java.lang.String):android.os.Parcelable
案例:66 / 270
行号:4
路径:/com/facebook/FacebookBroadcastReceiver.java
代码:android.content.Intent.getStringExtra(java.lang.String):java.lang.String
案例:67 / 270
行号:5
路径:/com/facebook/FacebookBroadcastReceiver.java
代码:android.content.Intent.getStringExtra(java.lang.String):java.lang.String
案例:68 / 270
行号:12
路径:/com/facebook/ProfileTracker/ProfileBroadcastReceiver.java
代码:android.content.Intent.getAction():java.lang.String
案例:69 / 270
行号:13
路径:/com/facebook/ProfileTracker/ProfileBroadcastReceiver.java
代码:android.content.Intent.getParcelableExtra(java.lang.String):android.os.Parcelable
案例:70 / 270
行号:13
路径:/com/facebook/ProfileTracker/ProfileBroadcastReceiver.java
代码:android.content.Intent.getParcelableExtra(java.lang.String):android.os.Parcelable
案例:71 / 270
行号:1108
路径:/com/facebook/appevents/AppEventsLogger.java
代码:android.content.Intent.getBooleanExtra(java.lang.String, boolean):boolean
案例:72 / 270
行号:123
路径:/com/facebook/applinks/AppLinkData.java
代码:android.content.Intent.getStringExtra(java.lang.String):java.lang.String
案例:73 / 270
行号:132
路径:/com/facebook/applinks/AppLinkData.java
代码:android.content.Intent.getBundleExtra(java.lang.String):android.os.Bundle
案例:74 / 270
行号:41
路径:/com/facebook/internal/BoltsMeasurementEventListener.java
代码:android.content.Intent.getStringExtra(java.lang.String):java.lang.String
案例:75 / 270
行号:42
路径:/com/facebook/internal/BoltsMeasurementEventListener.java
代码:android.content.Intent.getBundleExtra(java.lang.String):android.os.Bundle
案例:76 / 270
行号:390
路径:/com/facebook/internal/NativeProtocol.java
代码:android.content.Intent.getIntExtra(java.lang.String, int):int
案例:77 / 270
行号:399
路径:/com/facebook/internal/NativeProtocol.java
代码:android.content.Intent.getBundleExtra(java.lang.String):android.os.Bundle
案例:78 / 270
行号:404
路径:/com/facebook/internal/NativeProtocol.java
代码:android.content.Intent.getStringExtra(java.lang.String):java.lang.String
案例:79 / 270
行号:419
路径:/com/facebook/internal/NativeProtocol.java
代码:android.content.Intent.getBundleExtra(java.lang.String):android.os.Bundle
案例:80 / 270
行号:426
路径:/com/facebook/internal/NativeProtocol.java
代码:android.content.Intent.getBundleExtra(java.lang.String):android.os.Bundle
案例:81 / 270
行号:120
路径:/com/facebook/login/LoginManager.java
代码:android.content.Intent.getParcelableExtra(java.lang.String):android.os.Parcelable
案例:82 / 270
行号:129
路径:/com/facebook/share/widget/LikeView/LikeControllerBroadcastReceiver.java
代码:android.content.Intent.getAction():java.lang.String
案例:83 / 270
行号:7
路径:/com/izhiping/MyReceiver.java
代码:android.content.Intent.getAction():java.lang.String
案例:84 / 270
行号:8
路径:/com/izhiping/MyReceiver.java
代码:android.content.Intent.getAction():java.lang.String
案例:85 / 270
行号:10
路径:/com/izhiping/MyReceiver.java
代码:android.content.Intent.getAction():java.lang.String
案例:86 / 270
行号:12
路径:/com/izhiping/MyReceiver.java
代码:android.content.Intent.getAction():java.lang.String
案例:87 / 270
行号:15
路径:/com/izhiping/MyReceiver.java
代码:android.content.Intent.getAction():java.lang.String
案例:88 / 270
行号:17
路径:/com/izhiping/MyReceiver.java
代码:android.content.Intent.getAction():java.lang.String
案例:89 / 270
行号:19
路径:/com/izhiping/MyReceiver.java
代码:android.content.Intent.getAction():java.lang.String
案例:90 / 270
行号:20
路径:/com/izhiping/MyReceiver.java
代码:android.content.Intent.getAction():java.lang.String
案例:91 / 270
行号:20
路径:/com/izhiping/MyReceiver.java
代码:android.content.Intent.getBooleanExtra(java.lang.String, boolean):boolean
案例:92 / 270
行号:22
路径:/com/izhiping/MyReceiver.java
代码:android.content.Intent.getAction():java.lang.String
案例:93 / 270
行号:102
路径:/com/izhiping/activity/BaseWebActivity.java
代码:android.content.Intent.getIntExtra(java.lang.String, int):int
案例:94 / 270
行号:103
路径:/com/izhiping/activity/BaseWebActivity.java
代码:android.content.Intent.getStringExtra(java.lang.String):java.lang.String
案例:95 / 270
行号:104
路径:/com/izhiping/activity/BaseWebActivity.java
代码:android.content.Intent.getLongExtra(java.lang.String, long):long
案例:96 / 270
行号:7
路径:/com/izhiping/push/JPushReceiver.java
代码:android.content.Intent.getAction():java.lang.String
案例:97 / 270
行号:8
路径:/com/izhiping/push/JPushReceiver.java
代码:android.content.Intent.getAction():java.lang.String
案例:98 / 270
行号:10
路径:/com/izhiping/push/JPushReceiver.java
代码:android.content.Intent.getAction():java.lang.String
案例:99 / 270
行号:12
路径:/com/izhiping/push/JPushReceiver.java
代码:android.content.Intent.getAction():java.lang.String
案例:100 / 270
行号:14
路径:/com/izhiping/push/JPushReceiver.java
代码:android.content.Intent.getAction():java.lang.String
案例:101 / 270
行号:16
路径:/com/izhiping/push/JPushReceiver.java
代码:android.content.Intent.getAction():java.lang.String
案例:102 / 270
行号:17
路径:/com/izhiping/push/JPushReceiver.java
代码:android.content.Intent.getAction():java.lang.String
案例:103 / 270
行号:34
路径:/com/izhiping/push/JPushReceiver.java
代码:android.content.Intent.getStringExtra(java.lang.String):java.lang.String
案例:104 / 270
行号:104
路径:/com/linkedin/platform/LISessionManager.java
代码:android.content.Intent.getStringExtra(java.lang.String):java.lang.String
案例:105 / 270
行号:104
路径:/com/linkedin/platform/LISessionManager.java
代码:android.content.Intent.getLongExtra(java.lang.String, long):long
案例:106 / 270
行号:109
路径:/com/linkedin/platform/LISessionManager.java
代码:android.content.Intent.getStringExtra(java.lang.String):java.lang.String
案例:107 / 270
行号:109
路径:/com/linkedin/platform/LISessionManager.java
代码:android.content.Intent.getStringExtra(java.lang.String):java.lang.String
案例:108 / 270
行号:148
路径:/com/renn/rennsdk/oauth/OAuthActivity.java
代码:android.content.Intent.getBooleanExtra(java.lang.String, boolean):boolean
案例:109 / 270
行号:156
路径:/com/renn/rennsdk/oauth/OAuthActivity.java
代码:android.content.Intent.getStringExtra(java.lang.String):java.lang.String
案例:110 / 270
行号:157
路径:/com/renn/rennsdk/oauth/OAuthActivity.java
代码:android.content.Intent.getStringExtra(java.lang.String):java.lang.String
案例:111 / 270
行号:158
路径:/com/renn/rennsdk/oauth/OAuthActivity.java
代码:android.content.Intent.getStringExtra(java.lang.String):java.lang.String
案例:112 / 270
行号:181
路径:/com/renn/rennsdk/oauth/OAuthActivity.java
代码:android.content.Intent.getBooleanExtra(java.lang.String, boolean):boolean
案例:113 / 270
行号:185
路径:/com/renn/rennsdk/oauth/OAuthActivity.java
代码:android.content.Intent.getStringExtra(java.lang.String):java.lang.String
案例:114 / 270
行号:186
路径:/com/renn/rennsdk/oauth/OAuthActivity.java
代码:android.content.Intent.getStringExtra(java.lang.String):java.lang.String
案例:115 / 270
行号:44
路径:/com/renn/rennsdk/oauth/RenRenOAuth.java
代码:android.content.Intent.getAction():java.lang.String
案例:116 / 270
行号:54
路径:/com/renn/rennsdk/oauth/RenRenOAuth.java
代码:android.content.Intent.getStringExtra(java.lang.String):java.lang.String
案例:117 / 270
行号:60
路径:/com/renn/rennsdk/oauth/SSO.java
代码:android.content.Intent.getStringExtra(java.lang.String):java.lang.String
案例:118 / 270
行号:60
路径:/com/renn/rennsdk/oauth/SSO.java
代码:android.content.Intent.getStringExtra(java.lang.String):java.lang.String
案例:119 / 270
行号:60
路径:/com/renn/rennsdk/oauth/SSO.java
代码:android.content.Intent.getLongExtra(java.lang.Stri