【问题标题】:Java - Are there any ways to obfuscate/hide strings to prevent against decompilation?Java - 有什么方法可以混淆/隐藏字符串以防止反编译?
【发布时间】:2012-03-31 01:32:19
【问题描述】:

我只有一些字符串,我想对反编译进行混淆/隐藏。我知道我永远无法实现真正​​的预防,但我希望有任何/某些方法至少可以防止实际字符串完全按原样显示。

任何帮助将不胜感激。

【问题讨论】:

标签: java string


【解决方案1】:

您可以将它们放在资源文件中并使用 AES(例如)对其进行加密。然后在应用程序初始化时提取数据。

【讨论】:

  • 在有人反编译您的应用程序(很容易做到)并获得 AES 密钥之前一直有效。
  • 您不必将 AES 密钥与源代码一起保存。有很多方法可以保证它的安全(例如,远程服务器为经过身份验证和授权的人/应用程序执行解密)。
  • 酷,我有一个远程服务器可供我使用。不幸的是,我不知道如何实施这个系统。我还看到了这个:stackoverflow.com/a/2443952/1112835,其中包括“在服务器端(不同地)动态生成的.class”。听起来这也有助于提高安全性,但不知道哪种方法可以允许使用动态 .class 文件……就像下载的唯一 .class 文件中的内容一样?
  • 只是一个具有单一方法的 Web 服务 - 解密。您可以在互联网上搜索使用 AES 进行加密 - 有很多关于此主题的资料。
【解决方案2】:

有许多免费和商业的"java code obfuscators" 可以更改非公共 API 的名称并对字符串文字进行简单的转换。这种混淆不会阻止坚定的攻击者,但会阻止随意观察。

【讨论】:

  • 是的,尤其是它会阻止像strings *.class 这样根本不需要任何技能的东西。
  • 我昨天尝试了 Proguard,但我仍然看到我的字符串出现在我的代码中 =/
【解决方案3】:

我最喜欢的方法是声明它们以 base64 编码。然后它只是一个简单的库调用,可以在需要时从其中解码字符串以供使用。这会混淆字符串及其长度

【讨论】:

    猜你喜欢
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-19
    相关资源
    最近更新 更多