【问题标题】:How to protect Arraylist from reverse engineering如何保护 Arraylist 免受逆向工程
【发布时间】:2020-05-02 01:32:35
【问题描述】:

我的应用中有一个常量 - arraylist。

例子:

private String [] word = {"A","B" };

我使用了 pro-guard,但是当我尝试进行逆向工程时,我可以得到 arraylist。我必须输入超过 2400 个单词,并且只需通过逆向工程就可以获得arraylist。请给出一个解决方案,以确保没有人可以得到arraylist。我可以将arraylist 放在build.gradle 或任何地方以使其安全吗?

【问题讨论】:

  • “请给出解决方案以确保没有人可以得到数组列表”可能不是你想听到的,但那是不可能的。任何程序都会被足够积极的对手破解。
  • 那么有没有办法让它安全呢?我们可以将字符串放入 build:gradle 中,也可以检索它。
  • @lavedar:如果数据在您让用户运行的二进制文件中,那么数据在用户可以读取的文件中。它可能会被混淆或变得更难,但你不能让它不可访问,因为这也会使你的代码无法访问它。确保用户看不到某些数据的最简单方法是不将其提供给他们。 IE。将数据放在某个服务器上,在该服务器上运行任何操作,然后只将数据交给您真正希望他们拥有的用户。
  • 如果您想保存敏感信息,请尝试使用AES encryption/decryption
  • @RahulGaur:如果您的代码可以在手机本地解密和使用数据,那么任何人都可以反编译您的代码。在这种情况下,这只是美化的混淆。

标签: java android proguard data-security


【解决方案1】:

您需要开发一个您不会分发的实用程序(例如其他 java 应用程序),它将您的字符串数组编码为加密的或至少使用过的字节或字符数组或字符串。如果您需要编辑列表,您将编辑和更新这个未发布的应用程序。

然后运行它并获取编码/加密的数据并将该数据复制到您发布的应用程序中,因此它隐藏在所有代码之间。您甚至可以将编码数据拆分到几个不同的位置。

然后在您发布的应用程序中实现用于从该列表中提取和解码一个单词的代码(一次只执行一个,执行您需要的操作并执行下一个,如果您解码所有要公开列表的单词好吧,它很难找到,因为它在内存中但是......它将以解码状态存在。

所有这些都不能保证 100% 的保护(因为您可能会在已发布的应用程序中包含解密密钥和算法),但会大大增加从应用程序中提取整个列表的难度,我认为这是您想要的.

另外,不要将编码列表存储到文件中,因为通常这样更容易找到。如果您想使用服务器,您需要避免传输整个列表(一次只传输一个单词),您需要保护 API 免受滥用(请求过多),这将比其他选项慢,并且容易出现自动提取挖掘机。平均而言,服务器解决方案比第一个更难实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-08
    • 2017-05-28
    • 2017-09-21
    • 1970-01-01
    • 2019-10-11
    • 2018-06-22
    • 1970-01-01
    • 2011-11-18
    相关资源
    最近更新 更多