阻止服务器与非官方Android客户端通信

时间:2012-10-29 16:56:55

标签: android encryption

我有一个项目,我的服务器需要向Android应用程序发送超级秘密加密密钥。应用程序使用密钥进行对称加密,以与经批准的官方蓝牙设备进行通信。重要的是不要发现这个密钥,因为它允许任何人与应用程序之外的蓝牙设备进行通信。

我的问题是,我如何保护这个秘密密钥不被发现。我知道我可以使用SSL在服务器和Android应用程序之间进行通信,我可以确保密钥永远不会存储在Android设备上。

但是我可以使用哪些技术来确保它是未经编辑的Android应用程序与服务器进行通信而不是伪装成我自己的另一个应用程序,试图获取密钥?

2 个答案:

答案 0 :(得分:1)

  

但是我可以使用哪些技术来确保它是未经编辑的Android应用程序与服务器进行通信而不是伪装成我自己的另一个应用程序,试图获取密钥?

根据定义,这是不可能的。

拿你的应用。在某些字符串中将大写A更改为小写a。运行修改后的应用。这是“伪装成您自己的另一个应用程序”,完全能够与您的服务器通信。任何其他“伪装成你自己的应用程序”仅仅比一个字母的情况有更多的变化。

因此,您有两个主要选择:

  1. 使用混淆技术(自动(ProGuard)和手动)来尝试隐藏与服务器的通信,然后希望没有人可以抓到它仍然尝试对其进行反向工程。您可以查看人们用于保护其应用许可代码(例如LVL)的方法,以了解具体技术。更高级的混淆器,如DexGuard,可能有所帮助。然而,从技术上讲,有人仍然可以对应用程序进行逆向工程 - 你正在做的是让它变得更难。

  2. 提出一种商业模式,您不关心哪些应用与您的蓝牙设备互动。

答案 1 :(得分:0)

如果没有Android的自定义版本,我不相信你能做到这一点。我的理由是,为了确定调用应用程序是否是正版,它必须向服务器发送一些内容,无论是否为SSL。必须从应用程序及其任何内容(包名称,IME等)派生出来,它可能是欺骗性的。

你能做的最好的事情就是对这些东西进行加密并对加密所需的密钥进行模糊处理,但是,你要承担逆向工程的费用而不是获得密钥的回报。

即使这个成本是值得的,有人会花费多少精力破解你的安全性并且知道并接近蓝牙设备?