我正在编写一个通过HTTPS与服务器应用程序通信的Android应用程序。在服务器端,我必须绝对确定Android应用程序的完整性。这意味着服务器应用程序需要确保它与我开发的Android应用程序进行通信,而不是使用重新编写的应用程序进行通信(例如,在反编译原始应用程序之后或在设备生根之后)。
有可能确保吗?也许有可能有apk文件的签名?
任何提示都表示赞赏。
此致 彼得
答案 0 :(得分:5)
没办法。无论用户手中是什么,都不再是你的了。即使你以某种方式设法将APK转移到服务器进行验证,也没有什么能阻止黑客程序将原始副本发送到服务器。
答案 1 :(得分:5)
您正试图解决一个已知问题:
您永远不会相信开放设备(手机,台式电脑)上的应用程序。为了信任它,它应该是防篡改的。这种设备的一个例子是SmartCard。移动设备肯定不是它。
您永远不应该向用户不应该看到的设备发送数据。这意味着所有业务逻辑必须在服务器上完成。
对服务器的所有请求都应使用用户凭据(用户名/密码)进行身份验证,并通过安全协议(HTTPS / SSL)进行身份验证。
答案 2 :(得分:1)
为了验证您的软件是否正在运行,客户端设备需要能够提供远程证明服务,这是TPM世界中众多首字母缩略词之一。我发现有人一直致力于提供TPM服务,包括IBM的IMA,这几乎足以满足您的需求。
此处的详细信息:http://www.vogue-project.de/cms/upload/vogueSoftware/Manual.pdf(Google Quickview)。
当然,这是模仿 TPM,并且需要修补Android内核。但也许各个制造商中的一个愿意为你建立一个包含TPM硬件的模型?