Android Q 上“android:useEmbeddedDex”的用途

问题描述 投票:0回答:2

从这里(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."

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

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

谢谢!

android security android-security
2个回答
4
投票

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


0
投票

您的 APK 包含您的代码以及您添加到您的库中的代码 应用程序。编译后的代码被打包为代表 Dalvik 字节码的“DEX”文件。 较小的应用程序可能有一个 DEX 文件,较大的应用程序可能有多个 (“多重索引”)。 在Android 4.3及以下版本中,Dalvik运行时将直接读取DEX内容 来自APK。 APK 已进行数字签名,因此外部方无法 在 Dalvik 加载并运行代码之前篡改代码。这对安全来说很棒 观点但增加了开销。

在 Android 4.4 及更高版本上,Dalvik 和 ART 运行时开始预处理 这些DEX文件,包括Android中添加的提前(AOT)编译 5.0。该工作的输出存储为普通文件,因此使用 root 进行处理 特权可能会篡改它们。结果是提高了应用程序的性能 安全性减弱的成本。

Android 10 允许您在您的应用程序中将 android:useEmbeddedDex 设置为 true 元素。这告诉 ART 返回 Android 4.3 风格的方法, 避免预处理,仅使用APK中打包的DEX文件。这 允许开发人员在安全性不高的情况下选择更严格的安全性 值得性能损失(例如,没有提前编译)。

© www.soinside.com 2019 - 2024. All rights reserved.