我有一个关于如何检测程序/二进制修改的问题,假设程序能够与远程验证服务器通信。更具体地说,我要求提供 android APK 文件,但它也可以用于任何其他程序。
我想象以下假设场景:
用户正在其设备上下载并安装一个 APK 安装文件。该应用程序在安装和使用后正在向远程服务器发送有关其完整性的“一些信息”。服务器正在验证程序是否正常或被黑客修改。
鉴于这种情况以及 APK 是用 Java 编写的事实,开发人员可以使用哪些方法来生成他的应用程序文件的哈希值,以便稍后可以将这个哈希发送到远程服务器,而远程服务器又能够验证散列 - 散列文件大小或其他类型的结构?
我对生成发送到验证服务器的“某些信息”的某些方法感兴趣。
如果问题不是很恰当,请纠正我,因为这种情况对我来说不是很清楚,也许还有其他方法可以更容易地实现。非常感谢!
- - 延期 - -
您好,非常感谢您的回答!
我对答案有点惊讶,因为我没有对这个问题想得太深,我认为会有一些简单的机制来做到这一点:) 但现在我听说即使是 TPM 也不能保证 100% 的保护.. .
作为对这个话题的迷茫,我想问更多的东西。我不想像复制保护机制那样保护程序免于重新分发。我希望程序不时通过验证服务器进行测试,它没有被修改。
这是场景:
分发应用程序的服务器使用一些奇怪的算法计算程序的哈希值,如果有的话。后来程序使用相同的怪异算法计算自身的哈希并将其发送到服务器。然后服务器比较这两个哈希值。如果有人修改了文件,例如 JMP 指令,则哈希值应该不同,并且应用程序被认为已被黑客入侵。这个场景有什么缺陷?有人能够反汇编算法以计算程序的哈希值,然后修改程序以将相同的值发送到服务器?
即使是这样,你是否认为这仍然是一个人要做的很多工作,而且可能不值得?