跳过内容

MASTG-TECH-0003: 获取和提取应用

从设备提取 APK 文件有几种方法。您需要根据应用程序是公开的还是私有的,来决定哪种方法最简单。

替代应用商店

最简单的选择之一是从网站下载 APK,这些网站镜像了 Google Play 商店中的公共应用程序。但是,请记住,这些网站不是官方的,并且不能保证该应用程序没有被重新打包或包含恶意软件。一些信誉良好的托管 APK 的网站,并且不以修改应用程序而闻名,甚至列出了应用程序的 SHA-1 和 SHA-256 校验和:

请注意,您无法控制这些站点,并且无法保证它们将来会做什么。 只有在这是您剩下的唯一选择时才使用它们。

使用 gplaycli

您可以使用 gplaycli 通过指定其 AppID (添加 -p 以显示进度条,-v 以显示详细信息) 下载 (-d) 所选 APK

$ gplaycli -p -v -d com.google.android.keep
[INFO] GPlayCli version 3.26 [Python3.7.4]
[INFO] Configuration file is ~/.config/gplaycli/gplaycli.conf
[INFO] Device is bacon
[INFO] Using cached token.
[INFO] Using auto retrieved token to connect to API
[INFO] 1 / 1 com.google.android.keep
[################################] 15.78MB/15.78MB - 00:00:02 6.57MB/s/s
[INFO] Download complete

com.google.android.keep.apk 文件将在您的当前目录中。 正如您可能想象的那样,这种方法是一种非常方便的下载 APK 的方法,尤其是在自动化方面。

您可以使用您自己的 Google Play 凭据或令牌。默认情况下,gplaycli 将使用 内部提供的令牌

从设备提取应用包

从设备获取应用程序包是推荐的方法,因为我们可以保证该应用程序没有被第三方修改。要从已root或未root的设备获取应用程序,可以使用以下方法

使用 adb pull 来检索 APK。如果您不知道包名,第一步是列出设备上安装的所有应用程序

adb shell pm list packages

找到应用程序的包名后,您需要它在系统上存储的完整路径才能下载它。

adb shell pm path <package name>

使用 APK 的完整路径,您现在可以简单地使用 adb pull 来提取它。

adb pull <apk path>

APK 将下载到您的工作目录中。

或者,还有像 APK Extractor 这样的应用程序,它们不需要 root,甚至可以通过您喜欢的方法共享提取的 APK。如果您不想连接设备或设置网络上的 adb 来传输文件,这将非常有用。

测试即时应用

使用 Google Play 即时,您可以创建即时应用,这些应用可以从浏览器或 Android 5.0(API 级别 21)及更高版本的应用商店中的“立即试用”按钮立即启动。它们不需要任何形式的安装。即时应用存在一些挑战

  • 您可以使用的即时应用的大小受到限制。
  • 只能使用有限数量的权限,这些权限记录在 Android 即时应用文档

这些的组合可能会导致不安全地决策,例如:从应用程序中剥离太多的授权/身份验证/保密逻辑,这会导致信息泄露。

注意:即时应用需要应用包。 应用包在“Android平台概述”一章的“应用包”部分中进行了描述。

静态分析注意事项

静态分析可以在逆向工程下载的即时应用程序之后完成,也可以通过分析应用包来完成。 分析 App Bundle 时,检查 Android Manifest 以查看是否为给定模块(无论是基本模块还是具有 dist:module 设置的特定模块)设置了 dist:module dist:instant="true"。 接下来,检查各种入口点,设置了哪些入口点(通过 <data android:path="</PATH/HERE>" />)。

现在按照入口点进行操作,就像处理任何 Activity 一样,并检查

  • 应用程序检索的任何数据是否应该需要对该数据进行隐私保护? 如果是这样,所有必需的控件是否到位?
  • 所有通信是否都受到保护?
  • 当您需要更多功能时,是否也下载了正确的安全控件?

动态分析注意事项

有多种方法可以开始对您的即时应用程序进行动态分析。 在所有情况下,您都必须首先安装对即时应用程序的支持,并将 ia 可执行文件添加到您的 $PATH

通过以下命令来处理即时应用程序支持的安装

cd path/to/android/sdk/tools/bin && ./sdkmanager 'extras;google;instantapps'

接下来,您必须将 path/to/android/sdk/extras/google/instantapps/ia 添加到您的 $PATH

准备好之后,您可以在运行 Android 8.1(API 级别 27)或更高版本的设备上本地测试即时应用程序。 可以通过不同的方式测试该应用程序

  • 在本地测试应用程序:通过 Android Studio 部署应用程序(并在“运行/配置”对话框中启用“部署为即时应用程序”复选框)或使用以下命令部署应用程序
ia run output-from-build-command <app-artifact>
  • 使用 Play Console 测试应用程序
  • 将您的 App Bundle 上传到 Google Play Console
  • 准备上传的捆绑包以发布到内部测试轨道。
  • 在设备上登录内部测试人员帐户,然后从外部准备好的链接或通过测试人员帐户的应用商店中的“立即试用”按钮启动您的即时体验。

既然您可以测试该应用程序,请检查

  • 是否有任何数据需要隐私控制以及这些控制是否到位。
  • 所有通信是否都得到充分保护。
  • 当您需要更多功能时,是否也为这些功能下载了正确的安全控制?