2011-03-23 118 views
13

我對簽署文件的想法並不熟悉,目前我找不到滿意的答案,所以我想我最好問一下:簽名應用程序是否防止篡改文件?

我想知道的是在簽署二進制文件時(對於Android),簽名工具是否會爲該文件分配某種校驗和,以便在黑客更改apk文件中的某些內容時,程序將拒絕啓動,因爲校驗和不匹配。 Android的簽名工具中是否存在此機制?

嗯,我明白當一個黑客擁有了二進制,他可以禁止任何他想要的,包括校驗和檢查。但問題是:Android的簽名工具是否提供這一級別或保護?

謝謝您的閱讀和回答!

回答

9

說「不,他們無法修改你的apk」的答案只有大約一半的權利:是的,沒有人可以修改你的代碼並且用你的鍵來解僱你的密鑰,這意味着惡意破解者無法制作修改後的應用程序看起來像它實際上來自你。但這並不意味着他們在使用不同的密鑰辭職後不能修改和運行APK。

他們可以把你的簽署APK,修改其代碼,並用自己的鑰匙辭職它自己;他們不能將該應用程序作爲更新或類似內容發佈,但修改後的自簽名APK通常可以由任何用戶安裝,不管是否爲root用戶。

編輯:值得爬來爬去XDA開發,看看有什麼人在這方面正在做的(一些半合法的,如修改和重新發布主題的APK;其它要少得多)。像android-apktool這樣的工具特別有趣。

也看到這些SO問題:

+0

非常感謝您!是的,當我正在研究這個主題時,我看到一篇SO帖子,稱他的應用程序是由一些黑客以自己的名字在Android Market上重新發布的!我想這正是你在這裏所說的。 (很多年前,我曾經使用過這種方法:構建完成後,我會將自己的校驗和添加到二進制文件中,並且在運行時,程序會自行檢查。但是現在這種方式並不奏效,因爲這意味着我自己篡改了一個已簽名的二進制文件!) – wwyt 2011-03-23 17:52:39

+0

@wwyt您可以嘗試在運行時檢查應用程序*簽名*,但是一個特別進取的黑客可能會刪除檢查如果你做得不對。你最好的選擇就像是Android授權服務(http://developer.android.com/guide/publishing/licensing.html)。 – 2011-03-23 19:46:23

+0

@wwyt Facebook單點登錄SDK可以做到這一點,以確保沒有惡意應用程序劫持他們的意圖:https://github.com/facebook/facebook-android-sdk/blob/master/facebook/src/com/ Facebook的/安卓/ Facebook.java#L244-277 – 2011-03-23 19:52:35

0

是的,操作系統必須檢查二進制文件的內容是否與簽名實際匹配。否則就毫無價值 - 有人可以從合法應用程序中籤名並將其粘貼到任何其他二進制文件中。

5

的Android二進制簽名是使用Jarsigner工具,標準的Java SDK的一部分來實現。用這個工具簽名jar只需添加兩個文件;一個包含jar/application(簽名或.sf文件)中每個文件的哈希值,另一個驗證簽名文件並標識簽名證書(DSA文件)。

所以檢查簽名會,是的,必然涉及檢查二進制文件的哈希值是否與所提供的價值,這將檢測到二進制的任何變化。是的,Android documentation表示系統不會安裝或運行沒有有效簽名的應用程序。

所以,是的,你可以假設正確簽署文件將防止它被改變後運行。

相關問題