2

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

我的问题是,我怎样才能保护这个密钥不被发现。我知道我可以使用 SSL 在服务器和 android 应用程序之间进行通信,并且我可以确保密钥永远不会实际存储在 android 设备上。

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

4

2 回答 2

1

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

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

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

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

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

  2. 想出一个商业模式,你不关心什么应用程序与你的蓝牙设备交互。

于 2012-10-29T17:08:57.917 回答
0

如果没有自定义版本的 Android,我不相信您可以做到这一点。我的理由是,为了确定调用应用程序是否为正版,它必须向服务器发送一些东西,无论是否是 SSL。必须从应用程序派生一些东西,无论它是什么(包名、IME 等),它都可以被欺骗。

您能做的最好的事情就是加密某些东西并混淆进行加密所需的密钥,但是随后,您将陷入逆向工程的成本与获得密钥的回报之间。

即使这笔费用是值得的,那么有人会花费精力来破解您的安全性并了解和接近蓝牙设备的可能性有多大?

于 2012-10-29T17:10:11.030 回答