2012-07-26 135 views
3

有沒有辦法確定2個具有相同包名的APK是不同的(假設它們來自2個不同的市場)?獲取應用程序的散列會幫助我嗎?謝謝如何確定2個具有相同包名的APK是否不同?

+0

:下來後從GitHub 加載它寫在終端的下一個命令APK和apk的大小,並檢查他們是否相等我認爲這將幾乎100%準確。即使你嘗試過,也很難打破這一點。 – 2012-07-26 08:47:30

回答

1

在APK上計算散列或數字簽名會告訴您它們是否完全相同。如果您想知道它們在功能上是否相同,則必須提取內容並檢查資源和可執行文件。如果他們有相同的名字,那會讓我有50%的信心,他們是相同的。如果他們實現了所有相同的類和方法(按名稱),我肯定有大約90%的人確信他們在功能上是等價的。

如何計算一個文件在Linux上的MD5簽名:

md5sum filename 

如何在Mac或BSD計算文件的MD5簽名:

md5 filename 

如何計算MD5 /使用OpenSSL的文件的SHA1/SHA512簽名:

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

如何計算跨所有文件的簽名S IN目錄:

cat * | md5sum 
cat * | openssl dgst -sha512 
+0

啊。但我在想,apk是一個檔案吧?這意味着有幾個文件存儲在那裏。 md5或sha1是否有能力獲得所有文件的總散列? – 2012-07-27 03:26:08

+0

檔案只是.ZIP,它是明確定義的。如果您將.ZIP存檔從一臺機器複製到另一臺,它應該具有相同的md5或sha1簽名。這完全相同。另一方面,如果您採用相同的未壓縮文件集合並在兩個不同的平臺上分別壓縮它們,則由於文件系統的差異,它們可能沒有相同的確切內容。然後你必須一個一個的散列文件。但是一旦你這樣做,你可以直接比較字節。 – Sparky 2012-07-27 06:26:23

+0

是的,你可以得到所有文件的總散列。您可以散列存檔本身,也可以通過執行如下操作,通過簽名實用程序將所有字節流式傳輸:cat * | md5sum - 但如前所述,由於文件系統的差異,這可能不會在兩臺不同的機器上產生相同的結果。 (儘管剛剛將一個目錄從Mac複製到Linux機器並再次返回時,它給出了相同的散列值。) – Sparky 2012-07-27 06:32:26

0

我沒有太多的android經驗,但不能比較APK的大小嗎?

+0

我只是在想,因爲像Sha1和Md5這樣的Hash可以用來判斷2個文件是否有相同的文件名,所以也許我可以用APK做同樣的事情。 – 2012-07-26 08:55:03

0

您可以使用androgaurd:如果你比較的哈希

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

它解釋here

相關問題