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
- 准备上传的捆绑包以发布到内部测试轨道。
- 在设备上登录内部测试人员帐户,然后从外部准备好的链接或通过测试人员帐户的应用商店中的“立即试用”按钮启动您的即时体验。
既然您可以测试该应用程序,请检查
- 是否有任何数据需要隐私控制以及这些控制是否到位。
- 所有通信是否都得到充分保护。
- 当您需要更多功能时,是否也为这些功能下载了正确的安全控制?