【问题标题】:How to do classname obfuscation using secure method?如何使用安全方法进行类名混淆?
【发布时间】:2017-06-10 11:24:34
【问题描述】:

我使用 proguard 对类和方法进行混淆。经过研究,我发现了这个工具,它可以从渗透测试人员的角度对类名进行反混淆。

https://github.com/HamiltonianCycle/ClassNameDeobfuscator

在推荐部分,作者建议从源代码中删除以下行:

-keepattributes SourceFile LineNumberTable

现在这将允许攻击者进行适当的逆向工程,从而获得 java 文件的所有原始类名。

到这里,够公平的。然而,实施这个解决方案给我带来了一个问题。我的开发人员正在管理结构中的异常处理,如下所示:

如果我实施此解决方案,那么开发人员将无法获得准确的文件名来跟踪和解决错误。他们将在异常列表中获得混淆的文件名,因此他们将在跟踪异常和解决异常方面有很多工作。

有没有其他方法可以完成这两项任务?

【问题讨论】:

    标签: android


    【解决方案1】:

    他们将在异常列表中获得混淆的文件名,因此他们将在跟踪异常和解决异常方面有很多工作。

    您不能同时have cake and eat cake。不过,我假设您关心这里的发布版本,如果是这样,我建议为每个发布的版本存档 proguard 映射文件。这将允许您通过查看此地图文件来弄清楚 a.c.d.e 类的确切含义。每次构建时,ProGuard 都会输出以下文件:

    • dump.txt - 描述所有类文件的内部结构 APK。
    • mapping.txt - 提供原始和混淆的类、方法和字段名称之间的转换。
    • seeds.txt - 列出未被混淆的类和成员。
    • usage.txt - 列出从 APK 中删除的代码。

    这些文件保存在<MODULE-NAME>/build/outputs/mapping/<FLAVOUR>/

    另请参阅此文档:Shrink Your Code and Resources

    【讨论】:

      【解决方案2】:

      你不能。 java have to 中的公共类在以它们命名的文件中定义。如果必须公开堆栈跟踪的文件名,则必须公开公共类名。

      当然,您可以修改源代码并尽可能避免使用公共类,但我假设您想要混淆您的现有代码,而不会浪费时间手动进行预混淆。

      从技术上讲,应该可以创建一个在源代码级别工作的混淆器,并且可以破坏文件名和类名。 ProGuard seems 提供这样的功能。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-23
        • 1970-01-01
        • 2016-07-04
        • 1970-01-01
        • 2015-04-02
        相关资源
        最近更新 更多