Android 验证应用程序是否在服务器端属于我

Android 验证应用程序是否在服务器端属于我,android,Android,我正在写一个铃声库应用程序,铃声驻留在服务器上,用户可以下载 我想要的是检查和验证连接是否真的来自我的应用程序,而不是其他应用程序或HTTP请求生成器。例如,我不喜欢有人编写一个应用程序,使用我的后端并在应用程序中显示他的广告。这就像是网站中的图像过滤,通过检查推荐人来防止 在应用程序中插入密钥是不可能的,因为android应用程序可以很容易地反编译。我曾想过获得应用程序签名并将其哈希作为密钥发送,但这就像任何应用程序都可以访问其他应用程序签名哈希一样 编写应用程序的一部分,用本机代码进行通信,

我正在写一个铃声库应用程序,铃声驻留在服务器上,用户可以下载

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

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

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


我真的想不出任何其他的方法,我不喜欢别人为了他们的利益而使用我的资源。

你可以做一些事情

  • 创建您自己的证书颁发机构,随应用程序提供证书,并使用双向TLS身份验证。这并不能防止反编译和反向工程,但可以保护途中的流量
  • 使用幻灯片组中的建议来检测修改和调试器
  • 使用Jelly Bean的硬件支持
  • 然而,归根结底,数字版权管理是一场失败的战斗。如果用户具有根访问权限,则无论是否进行模糊处理(哪些本机库是模糊的),所有赌注都将被取消。唯一的问题是你的数据有多重要。对于90%的应用程序,通过ProGuard运行它几乎不可能解决问题(特别是在使用数据流模糊处理时)。与证书方法一起,这对于大多数事情来说应该已经足够了


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

    不可能绝对确定该应用程序是您的-请参阅和。如果你真正想问的是如何合理地确定应用程序是你的,换句话说,其他android开发者使用什么样的最佳实践,那么我也想知道答案…@DevOfZot我看到了两个链接,这不是一个安全的方法。除了使用https,如何在本机代码中实现应用程序的通信部分。我认为反编译本机代码比使用dex2jar反编译如此容易的java要困难得多?那又如何呢?它不是万能的,它仍然是可反编译的,只是有点难。你没有让任何东西变得“安全”,只是混淆了东西,使应用程序整体上更难维护。因此,一般来说没有办法。如果设备是根设备,没有办法。根据我列出的要点,在非根设备上,任何消费者数据都将非常接近牢不可破。根据你的问题(没有冒犯的意思),我怀疑数据不会那么安全。另一方面,我的银行应用程序大量使用ProGuard,并根据第一原理实现了自己的RSA加密(您可以从base64中的REST API获得e和n)。这当然对安全性并没有任何帮助,但它使逆向工程变得非常困难(我已经放弃了我的随意尝试)。