【发布时间】:2016-07-13 12:40:43
【问题描述】:
我有一个移动应用程序,用户将在他们的手机上安装它。
我想让它安全,不应该允许攻击者修改 .apk 文件。 我已经注意我的应用程序无法在有根设备上运行。
服务器应该能够识别攻击者是否修改了某些代码或重定向到外部链接。
我怎样才能实现上述场景?
【问题讨论】:
我有一个移动应用程序,用户将在他们的手机上安装它。
我想让它安全,不应该允许攻击者修改 .apk 文件。 我已经注意我的应用程序无法在有根设备上运行。
服务器应该能够识别攻击者是否修改了某些代码或重定向到外部链接。
我怎样才能实现上述场景?
【问题讨论】:
我怎样才能实现上述场景?
删除 APK。使用一些通用客户端将您的应用程序重写为纯粹在服务器上运行的东西。如果您不以客户端 JavaScript 的方式使用太多,则 Web 应用程序可能符合条件。
另一个应用程序可以检测您的 APK 是否已被更改,因为更改后的 APK 不会由您的签名密钥签名。但是应用程序本身无法检测到它是否已被更改,因为攻击者可以删除检测代码。
服务器无法检测客户端是否已更改,因为服务器只知道客户端发送的内容。只要更改后的客户端与原始客户端的响应相同,服务器就无法区分。
例如:
原始客户端发送foo 作为其与服务器通信的一部分。服务器拒绝任何不包含foo 的通信。所以,修改后的客户端发送foo。
原始客户端从服务器接收唯一 ID 作为原始通信的一部分。原始客户端将该唯一 ID 保存在一个文件中,并将其包含在与服务器的进一步通信中。服务器拒绝任何不包含有效 ID 的通信。因此,更改后的客户端保存并使用相同的 ID 文件。
服务器向客户端发送有效性质询,客户端需要根据客户端 APK 字节计算响应(例如,服务器要求客户端发送 APK 的某个字节范围的加密安全哈希)。服务器拒绝与未通过此检查的客户端合作。因此,更改后的客户端会保留原始客户端 APK 的副本以用于计算响应。
等等。
您可以使用诸如 DexGuard 之类的工具来尝试让某人更改客户端困难。
【讨论】: