漏洞分析

0

高危漏洞

6

中危漏洞

1

低危漏洞

6

警告

文件名 QQ聊天记录导出_3.1.0.apk
上传者 正月初九
文件大小 4.1970853805542MB
MD5 3e248bb08b0f8a37470745997e3afed2
包名 top.drawcore.mqme
Main Activity top.drawcore.mqme.Activity.MainActivity
Min SDK 21
Target SDK 25

权限列表

# 名称 说明 提示
0 android.permission.READ_PHONE_STATE 允许应用程序访问设备的手机功能。有此权限的应用程序可确定此手机的号码和序列号,是否正在通话,以及对方的号码等。 注意
1 android.permission.RECEIVE_BOOT_COMPLETED 允许应用程序在系统完成启动后即自行启动。这样会延长手机的启动时间,而且如果应用程序一直运行,会降低手机的整体速度。 注意
2 android.permission.ACCESS_NETWORK_STATE 允许应用程序查看所有网络的状态。 提示
3 android.permission.ACCESS_WIFI_STATE 允许应用程序查看有关WLAN状态的信息。 提示
4 android.permission.CHANGE_CONFIGURATION 允许应用程序更改当前配置,例如语言设置或整体的字体大小。 提示
5 android.permission.INTERNET 允许程序访问网络. 提示
6 android.permission.READ_LOGS 允许应用程序从系统的各日志文件中读取信息。这样应用程序可以发现您的手机使用情况,但这些信息不应包含任何个人信息或保密信息。 提示
7 android.permission.WAKE_LOCK 允许应用程序防止手机进入休眠状态。 提示
8 android.permission.WRITE_EXTERNAL_STORAGE 允许应用程序写入SD卡。 提示

四大组件

组件名称

top.drawcore.mqme.Activity.MainActivity
top.drawcore.mqme.Activity.AboutActivity
top.drawcore.mqme.Activity.LicenseActivity
com.nononsenseapps.filepicker.FilePickerActivity
top.drawcore.mqme.Activity.SettingsActivity
top.drawcore.mqme.Activity.ToolActivity
top.drawcore.mqme.Activity.UserActivity
cn.bmob.v3.update.UpdateDialogActivity
top.drawcore.mqme.Activity.DialogActivity

cn.bmob.push.lib.service.PushService
cn.bmob.push.lib.service.PushNotifyService

cn.bmob.push.PushReceiver
top.drawcore.mqme.MessageReceiver
cn.bmob.push.PushNotifyReceiver

android.support.v4.content.FileProvider
top.drawcore.mqme.FileProvider

第三方库

# 库名 介绍
0 android.support.transition A backport of the new Transitions API for Android.
1 mehdi.sakout.fancybuttons An Android library to easily create fancy buttons without the need of drawable files.
2 me.zhanghai.android.materialprogressbar Material design ProgressBar with consistent appearance
3 rx RxJava – Reactive Extensions for the JVM – a library for composing asynchronous and event-based programs using observable sequences for the Java VM.
4 com.rengwuxian.materialedittext EditText in Material Design
5 com.afollestad.materialdialogs Not even AppCompat uses Material theming for AlertDialogs on pre-Lollipop. This is a beautiful and easy solution.
6 rx.android RxJava bindings for Android
7 com.nineoldandroids Android library for using the Honeycomb animation API on all versions of the platform back to 1.0!
8 com.google.gson A Java serialization library that can convert Java Objects into JSON and back.
9 org.apache.http The Apache HttpComponents™ project is responsible for creating and maintaining a toolset of low level Java components focused on HTTP and associated protocols.

静态扫描发现风险点

风险等级 风险名称

中危

检测到当前标志被设置成true或没设置,这会导致adb调试备份允许恶意攻击者复制应用程序数据,造成数据泄露。

中危

检测到debug模式被打开。如果该项被打开,app存在被恶意程序调试的风险,可能导致泄露敏感信息等问题,建议关闭debug模式。

中危

该app需要移除大部分日志打印代码。
经扫描该包仍存在大量打日志代码,共发现48处打日志代码.(此处扫描的日志打印代码,是指调用android.util.Log.* 打印的.)
详情如下:

位置: classes.dex
cn.bmob.v3.c.thing;->V(I Ljava/lang/String; Ljava/lang/String;)V==>android.util.Log;->e(Ljava/lang/String; Ljava/lang/String;)I
cn.bmob.v3.BmobRealTimeData$1;->onConnectCompleted(Ljava/lang/Exception; Lcn/bmob/v3/socketio/acknowledge;)V==>android.util.Log;->e(Ljava/lang/String; Ljava/lang/String;)I
cn.bmob.v3.http.a.From$3;->call(Ljava/lang/Object;)V==>android.util.Log;->e(Ljava/lang/String; Ljava/lang/String;)I
me.zhanghai.android.materialprogressbar.MaterialProgressBar;->applyTintForDrawable(Landroid/graphics/drawable/Drawable; Landroid/content/res/ColorStateList; Z Landroid/graphics/PorterDuff$Mode; Z)V==>android.util.Log;->w(Ljava/lang/String; Ljava/lang/String;)I
cn.bmob.push.lib.service.This$2;->Z(Ljava/lang/Object;)V==>android.util.Log;->e(Ljava/lang/String; Ljava/lang/String;)I
top.drawcore.mqme.Activity.MainActivity;->Write(Ljava/lang/String; Ljava/lang/String;)V==>android.util.Log;->e(Ljava/lang/String; Ljava/lang/String;)I
c.project;->V(I Ljava/lang/String; Ljava/lang/String;)V==>android.util.Log;->d(Ljava/lang/String; Ljava/lang/String;)I
cn.bmob.v3.c.thing;->V(I Ljava/lang/String; Ljava/lang/String;)V==>android.util.Log;->w(Ljava/lang/String; Ljava/lang/String;)I
com.nineoldandroids.animation.PropertyValuesHolder$IntPropertyValuesHolder;->setAnimatedValue(Ljava/lang/Object;)V==>android.util.Log;->e(Ljava/lang/String; Ljava/lang/String;)I
cn.bmob.v3.BmobQuery$2;->call(Ljava/lang/Object;)V==>android.util.Log;->e(Ljava/lang/String; Ljava/lang/String;)I
com.afollestad.materialdialogs.internal.MDTintHelper;->setCursorTint(Landroid/widget/EditText; I)V==>android.util.Log;->d(Ljava/lang/String; Ljava/lang/String;)I
c.project;->V(I Ljava/lang/String; Ljava/lang/String;)V==>android.util.Log;->v(Ljava/lang/String; Ljava/lang/String;)I
cn.bmob.v3.http.b.of;->Code(Lcn/bmob/v3/b/method$This;)Lcn/bmob/v3/b/a;==>android.util.Log;->e(Ljava/lang/String; Ljava/lang/String;)I
com.nineoldandroids.animation.PropertyValuesHolder;->setupValue(Ljava/lang/Object; Lcom/nineoldandroids/animation/Keyframe;)V==>android.util.Log;->e(Ljava/lang/String; Ljava/lang/String;)I
com.nineoldandroids.animation.PropertyValuesHolder;->getPropertyFunction(Ljava/lang/Class; Ljava/lang/String; Ljava/lang/Class;)Ljava/lang/reflect/Method;==>android.util.Log;->e(Ljava/lang/String; Ljava/lang/String;)I
com.afollestad.materialdialogs.MaterialDialog;->setProgress(I)V==>android.util.Log;->w(Ljava/lang/String; Ljava/lang/String;)I
cn.bmob.v3.BmobQuery$3;->call(Ljava/lang/Object;)V==>android.util.Log;->e(Ljava/lang/String; Ljava/lang/String;)I
cn.bmob.v3.c.thing;->V(I Ljava/lang/String; Ljava/lang/String;)V==>android.util.Log;->d(Ljava/lang/String; Ljava/lang/String;)I
cn.bmob.v3.BmobQuery$4;->call(Ljava/lang/Object;)V==>android.util.Log;->e(Ljava/lang/String; Ljava/lang/String;)I
cn.bmob.v3.http.a.From;->Code(Ljava/lang/Throwable; Lcn/bmob/v3/listener/BmobCallback;)V==>android.util.Log;->e(Ljava/lang/String; Ljava/lang/String;)I
cn.bmob.v3.c.This;->V(Ljava/lang/Object;)V==>android.util.Log;->e(Ljava/lang/String; Ljava/lang/String;)I
cn.bmob.v3.c.acknowledge;->Code(Ljava/lang/String; Lorg/json/JSONObject; Lorg/json/JSONObject;)V==>android.util.Log;->e(Ljava/lang/String; Ljava/lang/String;)I
cn.bmob.v3.c.The;->V(Landroid/content/Context;)Z==>android.util.Log;->w(Ljava/lang/String; Ljava/lang/String;)I
c.been;->completeWakefulIntent(Landroid/content/Intent;)Z==>android.util.Log;->w(Ljava/lang/String; Ljava/lang/String;)I
cn.bmob.v3.http.a.From;->Code(Ljava/lang/Class; Ljava/lang/String; Lcn/bmob/v3/listener/BmobCallback;)V==>android.util.Log;->e(Ljava/lang/String; Ljava/lang/String;)I
cn.bmob.v3.datatype.BmobFile;->Code(Ljava/io/File; Lcn/bmob/v3/listener/BmobErrorCallback;)Z==>android.util.Log;->e(Ljava/lang/String; Ljava/lang/String;)I
com.nineoldandroids.animation.PropertyValuesHolder;->setAnimatedValue(Ljava/lang/Object;)V==>android.util.Log;->e(Ljava/lang/String; Ljava/lang/String;)I
d.but;->I(Ljava/lang/String; [Ljava/lang/Object;)V==>android.util.Log;->e(Ljava/lang/String; Ljava/lang/String;)I
cn.bmob.v3.c.thing;->V(I Ljava/lang/String; Ljava/lang/String;)V==>android.util.Log;->v(Ljava/lang/String; Ljava/lang/String;)I
com.nineoldandroids.animation.PropertyValuesHolder$FloatPropertyValuesHolder;->setAnimatedValue(Ljava/lang/Object;)V==>android.util.Log;->e(Ljava/lang/String; Ljava/lang/String;)I
cn.bmob.v3.socketio.I;->Code(Lcn/bmob/v3/socketio/I$This;)V==>android.util.Log;->d(Ljava/lang/String; Ljava/lang/String;)I
mehdi.sakout.fancybuttons.Utils;->findFont(Landroid/content/Context; Ljava/lang/String; Ljava/lang/String;)Landroid/graphics/Typeface;==>android.util.Log;->e(Ljava/lang/String; Ljava/lang/String;)I
cn.bmob.v3.datatype.BmobFile;->Code(Lcn/bmob/v3/listener/BmobErrorCallback;)Z==>android.util.Log;->e(Ljava/lang/String; Ljava/lang/String;)I
d.but;->Code(Ljava/lang/String; [Ljava/lang/Object;)V==>android.util.Log;->v(Ljava/lang/String; Ljava/lang/String;)I
cn.bmob.v3.c.thing;->V(I Ljava/lang/String; Ljava/lang/String;)V==>android.util.Log;->i(Ljava/lang/String; Ljava/lang/String;)I
cn.bmob.v3.datatype.a.thing;->V(I)[B==>android.util.Log;->e(Ljava/lang/String; Ljava/lang/String;)I
com.github.javiersantos.materialstyleddialogs.MaterialStyledDialog;->initStyle(Lcom/github/javiersantos/materialstyleddialogs/MaterialStyledDialog$Builder;)Landroid/view/View;==>android.util.Log;->e(Ljava/lang/String; Ljava/lang/String;)I
c.project;->V(I Ljava/lang/String; Ljava/lang/String;)V==>android.util.Log;->e(Ljava/lang/String; Ljava/lang/String;)I
cn.bmob.v3.c.acknowledge;->V(Ljava/lang/String; Ljava/lang/String;)Ljava/lang/String;==>android.util.Log;->e(Ljava/lang/String; Ljava/lang/String;)I
cn.bmob.v3.socketio.I;->Code(Ljava/lang/Object; I I)[B==>android.util.Log;->d(Ljava/lang/String; Ljava/lang/String;)I
me.zhanghai.android.materialprogressbar.MaterialProgressBar;->setIndeterminate(Z)V==>android.util.Log;->w(Ljava/lang/String; Ljava/lang/String;)I
d.but;->V(Ljava/lang/String; [Ljava/lang/Object;)V==>android.util.Log;->d(Ljava/lang/String; Ljava/lang/String;)I
cn.bmob.v3.http.This$4;->call(Ljava/lang/Object;)V==>android.util.Log;->e(Ljava/lang/String; Ljava/lang/String;)I
c.project;->V(I Ljava/lang/String; Ljava/lang/String;)V==>android.util.Log;->w(Ljava/lang/String; Ljava/lang/String;)I
cn.bmob.v3.http.This$5;->call(Ljava/lang/Object;)V==>android.util.Log;->e(Ljava/lang/String; Ljava/lang/String;)I
me.zhanghai.android.materialprogressbar.BaseProgressLayerDrawable;->setTintList(Landroid/content/res/ColorStateList;)V==>android.util.Log;->w(Ljava/lang/String; Ljava/lang/String;)I
c.project;->V(I Ljava/lang/String; Ljava/lang/String;)V==>android.util.Log;->i(Ljava/lang/String; Ljava/lang/String;)I
com.nineoldandroids.animation.PropertyValuesHolder;->setupSetterAndGetter(Ljava/lang/Object;)V==>android.util.Log;->e(Ljava/lang/String; Ljava/lang/String;)I

中危

检测到15条敏感明文信息,建议移除。

位置: classes.dex
'http://59.110.214.72:1000/donation.html' used in: Ltop/drawcore/mqme/Activity/AboutActivity$3;->onClick()V
'http://file.bmob.cn' used in: Lcn/bmob/v3/http/darkness;->()V
'http://io.bmob.cn:3010' used in: Lcn/bmob/v3/http/darkness;->()V
'http://m0.api.upyun.com/' used in: Lcn/bmob/v3/datatype/a/thing;->run()V
'http://opentest.bmob.cn/8/' used in: Lcn/bmob/v3/http/darkness;->()V
'http://play.google.com/store/apps/details?id=' used in: Lcom/danielstone/materialaboutlibrary/ConvenienceBuilder$3;->onClick()V
'http://push.bmob.cn' used in: Lb/This;->()V
'http://schemas.android.com/apk/res/android' used in: Landroid/support/v4/content/res/TypedArrayUtils;->hasAttribute(Lorg/xmlpull/v1/XmlPullParser; Ljava/lang/String;)Z
'https://github.com/afollestad/material-dialogs' used in: Ltop/drawcore/mqme/Activity/LicenseActivity$2;->onClick()V
'https://github.com/daniel-stoneuk/Material-About-Library' used in: Ltop/drawcore/mqme/Activity/LicenseActivity$1;->onClick()V
'https://github.com/jaredrummler/AndroidShell' used in: Ltop/drawcore/mqme/Activity/LicenseActivity$3;->onClick()V
'https://github.com/javiersantos/MaterialStyledDialogs' used in: Ltop/drawcore/mqme/Activity/LicenseActivity$5;->onClick()V
'https://github.com/rengwuxian/MaterialEditText' used in: Ltop/drawcore/mqme/Activity/LicenseActivity$4;->onClick()V
'mqmefeedback@163.com' used in: Ltop/drawcore/mqme/Activity/AboutActivity;->email()V
'mqmefeedback@163.com' used in: Ltop/drawcore/mqme/Activity/MainActivity;->email()V

中危

检测到1处setSavePassword密码明文存储漏洞。

位置: classes.dex
com.danielstone.materialaboutlibrary.ConvenienceBuilder$1;

webview的保存密码功能默认设置为true。Webview会明文保存网站上的密码到本地私有文件”databases/webview.db”中。对于可以被root的系统环境或者配合其他漏洞(如webview的同源绕过漏洞),攻击者可以获取到用户密码。
建议:显示设置webView.getSetting().setSavePassword(false)。

参考案例:
www.wooyun.org/bugs/wooyun-2010-021420
www.wooyun.org/bugs/wooyun-2013-020246

参考资料:
http://wolfeye.baidu.com/blog/
www.claudxiao.net/2013/03/android-webview-cache/

中危

检测到1处app通用签名漏洞。
路径:META-INF\CERT.RSA

通用签名存在以下风险:
(1)如果攻击者的应用包名与目标应用相同,又使用了相同的密钥对应用进行签名,攻击者的应用就可以替换掉目标应用(2)另外目标应用的自定义权限android:protectionlevel为“signature”或者“signatureOrSystem”时,保护就形同虚设(3)如果设备使用的是第三方ROM,而第三方ROM的系统也是用AOSP默认的签名,那么使用如果使用系统级签名文件签名过的应用,权限就得到了提升对于普通开发者如果自己的签名证书泄露也可能发生(1)、(2)条所提到的风险

参考资料:
http://docs.anysdk.com/AndroidSign
http://blog.csdn.net/jiangwei0910410003/article/details/50402000?spm=a313e.7916648.0.0.Nbaf0K
http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html?spm=a313e.7916648.0.0.Nbaf0K
http://jaq.alibaba.com/community/art/show?articleid=457

低危

非debug包,需要通过打包平台proguard脚本,移除大部分系统输出代码。
经扫描该包仍存在大量系统输出代码,共发现8处系统输出代码.(此处扫描的系统输出代码,是指调用System.out.print*输出的,本应在打包平台移除的系统输出代码.)
各个bundle系统输出代码详情如下:

位置: classes.dex
top.drawcore.mqme.Activity.MainActivity$9;
rx.internal.util.RxRingBuffer;
com.file.zip.ZipFile;
top.drawcore.mqme.Activity.MainActivity;
rx.internal.util.IndexedRingBuffer;
top.drawcore.mqme.Activity.MainActivity$10;
rx.exceptions.CompositeException$WrappedPrintStream;
rx.internal.util.RxJavaPluginUtils;

警告

检测到5处addFlags使用Intent.FLAG_ACTIVITY_NEW_TASK。

位置: classes.dex
cn.bmob.v3.c.mine$1;->handleMessage
top.drawcore.mqme.Activity.UserActivity$2$1;->done
top.drawcore.mqme.Activity.MainActivity$15$2;->onClick
top.drawcore.mqme.Activity.AboutActivity$2;->onClick
top.drawcore.mqme.Activity.AboutActivity$3;->onClick

APP创建Intent传递数据到其他Activity,如果创建的Activity不是在同一个Task中打开,就很可能被其他的Activity劫持读取到Intent内容,跨Task的Activity通过Intent传递敏感信息是不安全的。建议:
尽量避免使用包含FLAG_ACTIVITY_NEW_TASK标志的Intent来传递敏感信息。

参考资料:
http://wolfeye.baidu.com/blog/intent-data-leak

警告

检测到5个导出的组件接收其他app的消息,这些组件会被其他app引用并导致dos攻击。

activity com.nononsenseapps.filepicker.FilePickerActivity
service cn.bmob.push.lib.service.PushService
receiver cn.bmob.push.PushReceiver
receiver top.drawcore.mqme.MessageReceiver
receiver cn.bmob.push.PushNotifyReceiver

建议:
(1)最小化组件暴露。对不会参与跨应用调用的组件建议显示添加android:exported="false"属性。
(2)设置组件访问权限。对provider设置权限,同时将权限的protectionLevel设置为"signature"或"signatureOrSystem"。
(3)组件传输数据验证。对组件之间,特别是跨应用的组件之间的数据传入与返回做验证和增加异常处理,防止恶意调试数据传入,更要防止敏感数据返回。

参考案例:
http://www.wooyun.org/bugs/wooyun-2010-0169746
http://www.wooyun.org/bugs/wooyun-2010-0104965

参考资料:
http://jaq.alibaba.com/blog.htm?spm=0.0.0.0.Wz4OeC&id=55
《Android安全技术解密与防范》

警告

检测到1个导出的隐式Service组件。
service cn.bmob.push.lib.service.PushService

建议:为了确保应用的安全性,启动Service时,请始终使用显式Intent,且不要为服务声明Intent过滤器。使用隐式Intent启动服务存在安全隐患,因为您无法确定哪些服务将响应Intent,且用户无法看到哪些服务已启动。从Android 5.0(API 级别 21)开始,如果使用隐式 Intent 调用 bindService(),系统会抛出异常。

参考资料:
https://developer.android.com/guide/components/intents-filters.html#Types

警告

检测到2处provider的grantUriPermissions设置为true。
android.support.v4.content.FileProvider
top.drawcore.mqme.FileProvider


grant-uri-permission若设置为true,可被其它程序员通过uri访问到content provider的内容,容易造成信息泄露。

参考资料:
https://security.tencent.com/index.php/blog/msg/6

警告

检测到1处使用空Intent构造PendingIntent。

位置: classes.dex
cn.bmob.v3.c.mine;->Code()V

使用pendingIntent时候,如果使用了一个空Intent,会导致恶意用户劫持Intent的内容。禁止使用空intent去构造pendingIntent。建议:
禁止使用空intent去构造pendingIntent。

参考资料:
http://wolfeye.baidu.com/blog/pendingintent-leak-information
http://bbs.mob.com/thread-5249-1-1.html

警告

检测到4处使用了加解密算法。密钥处理不当可能会导致信息泄露。

位置: classes.dex
okio.ByteString;->hmac(Ljava.lang.String; Lokio.ByteString;)Lokio.ByteString;
okio.HashingSource;->(Lokio.Source; Lokio.ByteString; Ljava.lang.String;)V
okio.Buffer;->hmac(Ljava.lang.String; Lokio.ByteString;)Lokio.ByteString;
okio.HashingSink;->(Lokio.Sink; Lokio.ByteString; Ljava.lang.String;)V

参考案例:
http://www.wooyun.org/bugs/wooyun-2010-0105766
http://www.wooyun.org/bugs/wooyun-2015-0162907
http://www.wooyun.org/bugs/wooyun-2010-0187287

参考资料:
http://drops.wooyun.org/tips/15870
https://developer.android.com/training/articles/keystore.html


动态扫描发现风险点

风险等级 风险名称

服务端分析

风险等级 风险名称

警告

检测到?处XSS漏洞。
开发中...

警告

检测到?处XSS跨站漏洞。
开发中...

应用证书