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