以编程方式验证Android odex文件

时间:2013-06-25 11:30:10

标签: android caching dalvik

是否可以通过编程方式验证系统生成的odex文件的完整性/校验和?

我想知道如果检测到根植的Android手机上的攻击者是否为应用程序安装了自己版本的odex文件。

1 个答案:

答案 0 :(得分:4)

假设是,如果攻击者能够替换.odex文件,他们就有足够的权限来执行任何其他操作。

构建生成的odex文件位于/ system上的受保护目录中,该目录以只读方式挂载。任何能够修改这些文件的人都可以简单地破解虚拟机或替换系统的主要部分。

installd生成的odex文件位于/ data / dalvik-cache中,受文件系统权限保护。任何有权修改.odex文件的人都可以做各种事情,比如在你不看的时候重新安装应用程序。对于攻击者来说,这将是一种更好的方法,因为它可以在OTA更新(导致重新dexopt)后继续存在。

修改优化的DEX数据是可行的,但有点痛苦。替换应用程序的优势在于它更加微妙 - 重新安装应用程序需要原始签名密钥,或者希望用户没有意识到他们现在正在运行具有相同名称的应用程序但是不同的签名者。

因此,.odex文件有一个校验和,您可以查看以防怀疑文件系统的完整性,但除了重新执行dexopt和比较之前没有检查篡改的规定。后。

有关dexopt和odex的一般信息,请参见dalvik/docs/dexopt.html中的Android来源;格式良好的版本是available here

编辑:我应该提到DEX和ODEX文件确实存在文件头中的校验和。这些通常被忽略,因为出于性能原因,您不希望每次启动应用程序时都扫描整个文件。您可以通过将dalvik.vm.check-dex-sum属性设置为true(或在命令行上传递-Xchecksum)来启用强制校验和验证。

校验和旨在检测文件损坏,而不是故意更改。 (您可以使用dexdump -c手动扫描。)有人篡改文件可能只是重新计算有效的校验和并存储它,因此您需要将已知的好副本保存在其他位置。并且您希望使用SHA1或类似而不是adler32来使操作二进制文件更难以获得相同的校验和值。