签署应用程序是否可以防止篡改文件?

时间:2011-03-23 16:54:58

标签: android

我不熟悉签名文件的想法,到目前为止我找不到满意的答案,所以我想我最好问:

我想知道的是在签署二进制文件时(对于Android),签名工具是否为文件分配了某种校验和,以便当黑客在apk文件中更改某些内容时,程序将拒绝启动,因为校验和不匹配。这种机制是否存在于Android的签名工具中?

嗯,我明白当黑客拥有二进制文件时,他可以禁用他想要的任何内容,包括校验和检查。但问题是:Android的签名工具是否首先提供此级别或保护?

感谢您的阅读和回答!

3 个答案:

答案 0 :(得分:9)

说“不,他们无法修改你的apk”的答案只有一半左右:是的,没有人可以修改你的代码并用你的键辞职,这意味着恶意破解者无法使修改后的应用看起来像它实际上来自你。但这并不意味着他们在用不同的密钥重新签名后无法修改和运行APK。

他们可以使用您签名的APK,修改其代码,并使用自己的密钥重新签名;他们无法将该应用程序作为更新或类似内容发布,但修改后的自签名APK通常可由任何用户安装,无论是否为root用户。

编辑:值得在xda开发人员身边爬行,看看人们在这方面做了什么(有些是半合法的,比如修改和重新发布主题APK;其他更不用说)。像android-apktool这样的工具特别有趣。

另见这些问题:

答案 1 :(得分:5)

Android二进制签名是使用Jarsigner工具完成的,该工具是标准Java SDK的一部分。使用此工具对jar进行签名只需添加两个文件;一个包含jar /应用程序中每个文件的散列值(签名或.sf文件),另一个验证签名文件并标识签名证书(DSA文件)。

因此,检查签名是否必然涉及检查二进制文件的哈希值是否与提供的值匹配,这将检测对二进制文件的任何更改。是的,Android documentation表示系统不会在没有有效签名的情况下安装或运行应用程序。

所以是的,您可以假设正确签名文件会阻止它在被更改后运行。

答案 2 :(得分:0)

是的,操作系统必须检查二进制文件的内容是否与签名实际匹配。否则它将毫无价值 - 有人可以从合法的应用程序中获取签名并将其粘贴到任何其他二进制文件上。