1

我正在编写一个铃声库应用程序,其中铃声驻留在服务器上,并且可以由用户下载。

我想要检查并验证连接是否真的来自我的应用程序而不是其他应用程序或 HTTP 请求生成器。例如,我不喜欢有人编写一个使用我的后端并在应用程序中展示他的广告的应用程序。这就像网站中的图像浸出,通过检查引荐来源网址来防止。

无法在应用程序中插入密钥,因为 android 应用程序可以很容易地被反编译。我想获得应用程序签名并将其哈希作为密钥发送,但这就像任何应用程序都可以访问其他应用程序签名哈希一样。

编写以本机代码进行通信的应用程序的一部分呢?它像java代码一样容易反编译吗?

我真的想不出任何其他方式,我不喜欢其他人利用我的资源为他们谋取利益。

4

1 回答 1

3

您可以做几件事。

  1. 创建您自己的证书颁发机构,为您的应用提供证书并使用双向 TLS 身份验证。这不能防止反编译和逆向工程,但可以保护途中的流量。
  2. 使用幻灯片中的建议来检测修改和调试器。
  3. 使用 Jelly Bean 的硬件支持的安全存储

然而,归根结底,DRM 是一场失败的战斗。如果用户具有 root 访问权限,则无论是否进行混淆(哪些本机库是),所有赌注都将关闭。唯一的问题是您的数据有多重要。对于 90% 的应用程序,通过 ProGuard 运行它几乎不可能解开(尤其是如果您使用数据流混淆)。与证书方法一起,这应该足以满足大多数情况。

或者,尝试更改您的模型,以便您验证用户而不是应用程序 - 这要简单得多!

于 2013-06-17T23:10:33.173 回答