如何确定从其他 android 应用商店安装 apk 文件是否安全?
初步分析
我认为测试 3rd 方应用程序的最彻底的方法是:
- 下载Android SDK/工具
- 使用您手机的Android 版本创建一个虚拟 Android 设备。
- 在您的设备上通过 USB 启用 Android 调试。(可以稍后关闭)
- 检查ADB是否检测到您的模拟器:
adb devices
- 使用 ADB 安装 3rd 方应用程序:`adb install
您可以使用不断运行的不同日志来分析设备中发生的情况。这些可能很难捕捉,但您可以logcat
使用adb logcat
. 你可以学习如何像 Pro 一样使用Logcat。
Android 虚拟设备 (AVD) 像 WiFi 连接一样使用您的互联网连接。此时您可以执行各种分析。我关于如何分析恶意软件的帖子可能会有所帮助(就使用的工具和技术而言)。 Wireshark将成为分析网络流量的有用工具。查看应用程序及其网络连接。
逆向工程
因此,现在您将开始深入了解 APK 到底在做什么。为此,您需要一些工具。这是一个声称可以将 Android APK 反编译回其 Java 代码的在线工具(我没有使用过)。如果您想了解这个过程并自己动手,我会看看这个 Stack Overflow 答案。
APK 只是一个.zip
文件。所以步骤(使用来自 Stack Overflow 答案的工具)
unzip example.apk
现在我们有以下文件和目录:
-rw-rw-r-- 1 3708 Oct 14 2013 AndroidManifest.xml
-rw-rw-r-- 1 2751916 Oct 14 2013 classes.dex
drwxrwxr-x 2 4096 Aug 3 12:12 META-INF
drwxrwxr-x 23 4096 Aug 3 12:12 res
-rw-rw-r-- 1 363640 Oct 14 2013 resources.arsc
这classes.dex
就是我们想要的。它包含用于应用程序的所有 Java 类。
./d2j-dex2jar.sh ../example.apk
现在我们有了一个./example-dex2jar.jar
可以反编译成 Java 代码的 JAR 文件。这就是 JD-GUI 和 ApkTool 可以派上用场的地方。现在您可以查看 APK 执行的确切代码。
请记住,Java 代码的某些部分(如果不是大部分)将被混淆。这是常见的,你会经常看到函数符号撕掉了,取而代之的a
,b
等,不仅功能,但包,方法,变量。看到混淆的 Javaz = (a) b.d()
并不少见。但是您可以看到字符串、典型导入以及它们可能使用的任何 JNI 共享对象函数。
说了这么多。你想为你下载的每个应用程序都这样做吗?可能不是。这取决于您是否信任您正在使用的商店和/或推出该应用程序的软件公司。我个人不使用 Google Play 商店以外的任何应用程序。我下载的应用程序基于开发它们的公司、用户评论(这些可能是伪造的)、朋友/论坛推荐等。
您必须对正在下载的应用程序给予某种信任,或者分析您安装的每个应用程序。无论哪种方式,您都必须谨慎行事。
要验证 APK 是否安全,您可以将其上传到例如Virustotal。它将使用一堆病毒扫描程序来检测 APK 是否有任何问题。
请注意,APK 是(在撰写本文时)被 Virustotal 扫描的 #1 文件类型。
您需要对其进行逆向工程,以确定它的作用以及它是否有任何恶意。
公平地说,即使是由 google play / app store 分发的应用程序也被发现带有恶意软件,因此即使恶意软件更有可能通过外部来源分发,但这并不直接意味着“外部来源 == 恶意软件”。