2011-03-23 41 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表示系统不会安装或运行没有有效签名的应用程序。

所以,是的,你可以假设正确签署文件将防止它被改变后运行。