对于每个构建,classes.dex的校验和值随着Dexguard的不断变化

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

我在本地代码中检查classes.dex的总和,如下所示:Check .apk-signature in C/native Code

  1. 计算classes.dex的校验和
  2. 与硬编码值比较 - xxx
  3. 如果这是真的,通过并继续
  4. 如果不是这样,退出应用程序

我所做的是记录第一个构建的校验和值,然后将本机代码中的if(checksum == xxx)更改为与记录的值相同。

但是,使用Dexguard时,每个不同构建的校验和都不同,这意味着如果我更改xxx并再次生成签名的apk,则检查将始终为false。我认为Dexguard在classes.dex中随机生成一些东西,使每个构建都不同。

有什么想法来解决这个问题吗?谢谢

android android-ndk crc32
1个回答
0
投票

每个DEX文件都包含两个校验和:Adler32和SHA-1签名。前者用于快速检查文件损坏,后者用于唯一标识文件内容。 IIRC,优化(.odex)文件更新文件校验和但保留SHA-1签名。

如果您的目标是确定构建系统何时更改了classes.dex内容,则应使用SHA-1。如果您试图创建某种防篡改,那么您可能需要改变嵌入校验和的方式。例如,您可以将其存储在以唯一模式开头的字节数组中,然后直接编辑该文件(之后重新计算Adler32)。

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