我有一个移动应用,用户将在手机上安装。
我想让它变得安全,不应允许攻击者修改.apk文件。 我已经注意到我的应用程序无法在root设备上运行。
服务器应该能够识别攻击者是否修改了某些代码或重定向到外部链接。
我如何实现上述情况?
答案 0 :(得分:4)
我如何实现上述情况?
删除APK。使用某些通用客户端将您的应用程序重写为纯粹在服务器上运行的内容。如果您不习惯使用客户端JavaScript,那么Web应用程序可能符合条件。
另一个应用可以检测到您的APK是否已被更改,因为更改的APK不会被您的签名密钥签名。但是应用程序本身无法检测它是否已被更改,因为攻击者可以删除检测代码。
服务器无法检测客户端是否已被更改,因为所有服务器都知道客户端发送的内容。只要更改后的客户端响应与原始客户端相同,服务器就无法区分。
例如:
原始客户端将foo
作为其与服务器通信的一部分发送。服务器拒绝任何不包含foo
的通信。因此,更改后的客户端发送foo
。
原始客户端从服务器接收唯一ID作为原始通信的一部分。原始客户端将该唯一ID保存在文件中,并将其包含在与服务器的进一步通信中。服务器拒绝任何不包含有效ID的通信。因此,更改后的客户端会保存并使用相同的ID文件。
服务器向客户端发送有效性质询,客户端需要根据客户端APK字节计算响应(例如,服务器要求客户端发送APK的某个字节范围的加密安全哈希值)。服务器拒绝使用未通过此检查的客户端。因此,更改后的客户端会保留原始客户端APK的副本,以用于计算响应。
等等。
您可以使用像DexGuard这样的工具来尝试让某些人难以来改变客户端。