Java 应用程序、远程脚本和安全/混淆

Java 应用程序、远程脚本和安全/混淆,java,android,algorithm,security,Java,Android,Algorithm,Security,为了构造我的问题,我将构造一个虚构的应用程序 我编写了一种寻宝应用程序,如果用户访问镇上的多个地点,就会获得奖励。实际上,该应用程序将获得他们当前的lat/lon,并检查其是否接近“宝藏位置”列表,如果他们在任何宝藏位置的10米范围内,他们将收到通知 然后,该应用程序将对远程脚本执行http post,该脚本基本上插入到数据库中。post参数将是设备的uuid及其访问的位置 攻击者可以轻松地监视wireshark并获取脚本名称和参数。他们可以更进一步,对apk进行反编译,并获取其他内容,如任何哈

为了构造我的问题,我将构造一个虚构的应用程序

我编写了一种寻宝应用程序,如果用户访问镇上的多个地点,就会获得奖励。实际上,该应用程序将获得他们当前的lat/lon,并检查其是否接近“宝藏位置”列表,如果他们在任何宝藏位置的10米范围内,他们将收到通知

然后,该应用程序将对远程脚本执行http post,该脚本基本上插入到数据库中。post参数将是设备的uuid及其访问的位置

攻击者可以轻松地监视wireshark并获取脚本名称和参数。他们可以更进一步,对apk进行反编译,并获取其他内容,如任何哈希/模糊处理。然后他们就可以随心所欲地使用curl来发布willynilly,而对于非作弊者来说,这场比赛将被毁掉。这是一个从未真正解决过的问题,因为在我写的所有应用程序中,总是有不敏感的数据,我不介意将其公开


我该怎么办?

您最好能做的就是以安全的方式发送数据。无论采用何种方式,使用HTTPS都是一个更好的选择。这有效地防止了窃听者,它是互联网上任何安全通信背后的基本技术

除了与服务器通信的协议之外,仍然存在不安全性。基本上,有三种方法可以解决这些问题

  • 玩家的位置可以定期发送到服务器。如果它们离其中一个区域足够近,服务器会做出响应。也许服务器可以包含足够多的智能,以便知道从A点到B点需要时间
  • 一次只能向应用发送一个位置。用户的轨迹也可以上传,以验证位置是否正确
  • 这些位置可以通过单向功能发送到程序。然后可以将真实答案发送到服务器。这样做的问题是,为了返回相同的散列,需要找到确切的位置。然而,由于GPS坐标往往只能精确到几米,并且不会给出不重要的数字,因此可以在当前位置附近测试多个值。单向函数需要一些时间才能有效地进行计算,否则,对于一个坏人来说,简单地测试城市中的每一平方米来找出什么能起作用是微不足道的

  • 从安全角度来看,最好的方法是第一种方法,因为在应用程序到达该位置之前,应用程序在任何时候都不知道它应该去哪里。当然,这会对服务器进行大量不必要的ping操作。

    ahhh我认为选项1可以解决我的问题。我没有想过这样做,trasure hunt位置列表实际上根本不需要在设备上