我在本地代码中检查classes.dex的总和,如下所示:Check .apk-signature in C/native Code
我所做的是记录第一个构建的校验和值,然后将本机代码中的if(checksum == xxx)更改为与记录的值相同。
但是,使用Dexguard时,每个不同构建的校验和都不同,这意味着如果我更改xxx并再次生成签名的apk,则检查将始终为false。我认为Dexguard在classes.dex中随机生成一些东西,使每个构建都不同。
有什么想法来解决这个问题吗?谢谢
每个DEX文件都包含两个校验和:Adler32和SHA-1签名。前者用于快速检查文件损坏,后者用于唯一标识文件内容。 IIRC,优化(.odex)文件更新文件校验和但保留SHA-1签名。
如果您的目标是确定构建系统何时更改了classes.dex内容,则应使用SHA-1。如果您试图创建某种防篡改,那么您可能需要改变嵌入校验和的方式。例如,您可以将其存储在以唯一模式开头的字节数组中,然后直接编辑该文件(之后重新计算Adler32)。