使用 ProGuard 进行文件混淆

Posted

技术标签:

【中文标题】使用 ProGuard 进行文件混淆【英文标题】:File obfuscation using ProGuard 【发布时间】:2012-12-26 09:12:55 【问题描述】:

我想知道是否有人可以告诉我如何使用 proguard 在 jar 文件中混淆单个文件,或者只是两个文件。我希望保留每一个类,但我想要混淆的不是我唯一的选择,因为这需要大量时间并且非常乏味.. 那么,是否可以只混淆一个类?如果是这样,如何.. 提前致谢!

【问题讨论】:

我不明白为什么混淆所有 .java 文件会成为性能问题,除非我们谈论的是数百万个文件的规模。 不是性能问题,是某种访问问题。 jar 是从另一个访问的,我能够让它忽略打开它所需的一个类(我被混淆的 jar,我没有开发。只是修改)所以,它能够启动混淆的 jar。但是它有一个问题,它只是崩溃了..没有报告,没有什么。而且,大约有 900 个类文件。所以,我想让 proguard 忽略任何类,除了那些我绝对需要混淆的类.. 任何作为日志文件或控制台日志的一部分抛出或记录的异常不应受到混淆的影响。如果是这样,那是一个严重的问题。但是,是的,我倾向于混淆真正需要的文件。 我如何只对我的文件进行混淆.. 有 8 个文件绝对需要混淆.. 【参考方案1】:

混淆单个类通常不是很有用:它很容易找到并且很容易进行逆向工程,因为其他类和对它们的引用仍然是可读的。因此,ProGuard 默认会混淆所有类(指定的类除外)。

话虽如此,这应该可行:

-keep class !mypackage.MySecretClass, !mypackage.MyOtherSecretClass 
    *;

它保留除指定类之外的所有类的类/字段/方法名称。换句话说,它只会混淆指定的类。

【讨论】:

不,这对我完全没有任何作用。我可以看到我的文件的完整来源。【参考方案2】:

您可以排除除要混淆的项目之外的所有项目;见How to keep/exclude a particular package path when using proguard?

如果这看起来不切实际,一种解决方法是将要混淆的文件打包到自己的 jarfile 中,运行 ProGuard,然后将这些文件与要包含在新 jarfile 中的其他文件重新打包。

【讨论】:

以上是关于使用 ProGuard 进行文件混淆的主要内容,如果未能解决你的问题,请参考以下文章

DexGuard/Proguard 混淆注释值

如何在 Eclipse 中混淆我的代码? (安卓)

使用 ProGuard 进行文件混淆

Android proguard - Proguard 对代码进行了混淆,但某些文件是可读格式

如何对使用 ProGuard 混淆的 Android APK 进行逆向工程/反编译?

Android 安装包优化开启 ProGuard 混淆 ( 压缩 Shrink | 优化 Optimize | 混淆 Obfuscate | 预检 | 混淆文件编写 | 混淆前后对比 )