Android Q 上“android:useEmbeddedDex”的目的

Jon*_*Jon 5 security android android-security

从这里 ( https://developer.android.com/preview/features#embedded-dex ),您可以看到 Android 引入了一项新功能,允许使用嵌入式 dex 直接从 APK 中运行代码。

我很好奇这会有什么用?

指南说:

This option can help prevent an attack if an attacker ever managed to 
tamper with the locally compiled code on the device."
Run Code Online (Sandbox Code Playgroud)

我的理解是,当您的 APK 安装时,它会被编译并作为优化的 dex 文件存储在 dalvik 缓存中。dalvik 缓存只能由系统用户访问,因此除非手机已 root,否则攻击者无法访问它。

如果手机是 root 的(并且攻击者以 root 身份运行),那么嵌入的 dex 文件仍然可以被篡改,因为攻击者可以修改 apk 并使用他们自己的密钥重新签名。

谢谢!

Woj*_*ski 4

正确的。通过启用此选项,您将强制系统使用 JIT 编译器直接从 .apk 文件运行 dex 代码(就像 Android 4.4 之前的 dalvik 上一样),而不是 AOT (5+) 或两者的组合 (4.4- 5)。您无法在不重新签名的情况下修改和运行 apk 内的 dex 代码,并且由于您没有原始签名密钥,因此您必须使用不同的密钥对其进行签名。作为应用程序开发人员,您可以实施代码检查 apk 签名和校验和,从而不允许运行已被篡改的 apk。另一方面,dalvik 缓存中拥有的是 .dex 文件的优化版本和预编译的 .oat 文件,这些文件未签名,因此具有 root 权限,您可以修改它们。

  • 您可以使用 PackageManager 检查 APK 签名,是的,您可以从应用程序中删除检查它的代码。说到安全性和防篡改保护,有很多方法可以使围栏更高,但很难使其足够高以使其无法跳过。看看这个演讲:https://youtu.be/zOsRc2HI9_k。它是波兰语的,但你可以从幻灯片中得到一些东西。 (2认同)