如何确定两个具有相同包名的APK是否不同?

4
有没有一种方法可以确定两个具有相同包名的APK是否不同(假设它们来自2个不同的市场)?获取应用程序的哈希值能帮助我吗?谢谢

如果您比较apk的哈希值和大小,并检查它们是否相等,我认为这将几乎100%准确。即使您尝试,也很难破解它。 - Mike T
3个回答

1

在 APK 上计算哈希或数字签名将告诉您它们是否完全相同。如果您想知道它们是否在功能上等效,则必须提取内容并检查资源和可执行文件。如果它们具有相同的名称,那么我大约有50%的把握它们是等效的。如果它们实现了所有相同的类和方法(按名称),我会有90%的把握它们在功能上是等效的。

如何在 Linux 上计算文件的 MD5 签名:

md5sum filename

如何在Mac或BSD上计算文件的MD5签名:

md5 filename

如何使用OpenSSL计算文件的MD5/SHA1/SHA512签名:

openssl dgst -md5 filename
openssl dgst -sha1 filename
openssl dgst -sha512 filename

如何计算目录中所有文件的签名:
cat * | md5sum
cat * | openssl dgst -sha512

啊,但我在想,apk是一个存档文件,对吧?这意味着有几个文件存储在其中。md5或sha1是否具有获取所有这些文件的总哈希值的能力? - srh snl
存档只是 .ZIP,这是明确定义的。如果您将 .ZIP 存档从一台机器复制到另一台机器,则应具有相同的 md5 或 sha1 签名。那就完全相同了。另一方面,如果您在两个不同的平台上分别压缩相同的未压缩文件集合,则由于文件系统差异,它们可能不具有完全相同的内容。然后,您必须逐个哈希文件。但是一旦您这样做,您也可以直接比较字节。 - Sparky
是的,您可以获得所有文件的总哈希值。您可以对存档本身进行哈希,或者通过执行类似以下内容的签名实用程序来流式传输所有字节:cat * | md5sum -- 但是,正如提到的那样,由于文件系统的差异,这可能不会在两台不同的计算机上产生相同的结果。(尽管我刚刚将一个目录从Mac复制到Linux盒子上并再次返回时给出了相同的哈希值。) - Sparky
1
MD5(或SHA1或任何其他类似的算法)不是意味着它需要遍历整个文件的字节吗?如果是这样,那么逐个比较另一个文件的每个字节是否更好? - android developer

0

我对Android没有太多经验,但你不能比较APK的大小吗?


我刚在想,既然像Sha1和Md5这样的哈希函数可以用来判断两个文件名相同的文件是否不同,那么我是否可以用同样的方法来处理APK文件呢? - srh snl

0

你可以使用Androguard:从GitHub下载后进行安装,在终端中输入以下命令:

python androsim.py -i first.apk second.apk -c ZLIB -n

它在这里解释了这里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接