【问题标题】:Does signing the app protect against tampering with the file?签署应用程序是否可以防止文件被篡改?
【发布时间】:2011-03-23 16:54:58
【问题描述】:

我对文件签名的思路不熟悉,目前也找不到满意的答案,所以我觉得还是问问吧:

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

好吧,我知道当黑客拥有二进制文件时,他可以禁用任何他想要的东西,包括校验和检查。但问题是:Android 的签名工具是否首先提供这种级别或保护?

感谢您的阅读和回答!

【问题讨论】:

    标签: android


    【解决方案1】:

    说“不,他们不能修改你的 apk”的答案只说对了一半:是的,没有人可以修改你的代码并用 your 密钥将其退出,这意味着恶意破解者无法使修改后的应用看起来像是真的来自您。但这并不意味着他们在使用其他密钥退出 APK 后无法修改和运行 APK。

    他们可以获取您签名的 APK,修改其代码,然后使用自己的密钥自行退出;他们不能将该应用作为更新或类似的方式发布,但修改后的自签名 APK 通常可由任何用户安装,无论是否为 root。

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

    另请参阅这些 SO 问题:

    【讨论】:

    • 非常感谢!是的,当我在研究这个话题时,我看到一个 SO 帖子说他的应用程序被一些黑客以他们自己的名义重新发布在 Android Market 上!!!我想这正是你在这里所说的。 (很多年前,我曾经使用这种方法:构建完成后,我会将自己的校验和添加到二进制文件中。在运行时,程序会自己进行检查。但是现在这行不通,因为这意味着我自己在篡改签名的二进制文件!)
    • @wwyt 您可以尝试在运行时检查应用程序 signature,但如果您操作不当,特别有进取心的黑客可能会删除检查。最好的选择是 Android 许可服务 (developer.android.com/guide/publishing/licensing.html)。
    • @wwyt Facebook 单点登录 SDK 会这样做以确保没有恶意应用劫持他们的意图:github.com/facebook/facebook-android-sdk/blob/master/facebook/…
    【解决方案2】:

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

    所以检查签名肯定会涉及检查二进制文件的哈希是否与提供的值匹配,这将检测到二进制文件的任何更改。是的,Android documentation 表示系统不会安装或运行没有有效签名的应用程序。

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-30
        • 2017-04-30
        • 1970-01-01
        • 2021-07-19
        相关资源
        最近更新 更多