【问题标题】:Trouble making obfuscation难以混淆
【发布时间】:2010-11-01 14:37:30
【问题描述】:

我正在使用 Antenna 构建、打包和混淆 j2me 应用程序。 建筑和包装工作正常。

该项目使用已被混淆的第 3 方 jar,但某些接口除外。

在尝试混淆时,我遇到了几个错误,例如:

[wtkobfuscate] Warning: i: can't find referenced class fooPackage.fooClass

Class i 和 fooPackage.fooClass 来自我提到的这个第 3 方 jar。

更新

这个第 3 方库使用 j2me-xmlrpc.jar。如果我不打包在一起,那么我将无法混淆第 3 方接口和 j2me-xmlrpc.jar。 (而且我不能以这种方式运行应用程序,不知道为什么)

如果我只打包 j2me-xmlrpc.jar 和我的项目类,我会在混淆时收到此错误

[wtkobfuscate] Warning: there were 2 instances of library classes depending on program classes.

更新 2:

我知道这种混淆是可能的,因为在 Netbeans 中我可以使用 Proguard 进行混淆。

由于 Netbeans 内部使用 ANT 进行构建,我尝试将生成的 build.xml 复制到我自己的 build.xml。

对于混淆,Netbeans 使用可在 Netbeans 外部使用的库 org-netbeans-modules-mobility-antext.jar。我将此库导入我的项目并毫无问题地使用它。

但我遇到了与使用天线时相同的错误。

在 Netbeans 中进行混淆会产生很多警告,但仍会生成经过混淆的 jar。

我错过了什么?

【问题讨论】:

  • 我使用 jshrink 获得了更好的结果。如果你愿意,我可以发给你测试。可能值得一试
  • @reinier:好的。但是ant文件应该怎么做才不会出现同样的问题呢?
  • 而不是在 cmets 中的这个谈话,我将把它作为一个正确的答案;^)
  • 嗨,丹尼尔。我建议对 ant 使用 -v 标志(在 netbeans 和天线中)。这会产生大量额外的输出,这可能会提供您的构建与生成的构建之间的差异所在的线索。

标签: java ant java-me obfuscation proguard


【解决方案1】:

如果第 3 方库被混淆,请不要在混淆类时包含该库。而是遵循这些步骤

  1. 单独安装您的课程(不包括第 3 方库)
  2. 混淆步骤1中获得的jar
  3. 解压步骤 2 中获得的混淆 jar 和某个临时文件夹中的 3rd 方库
  4. Jar 所有未加盖的类
  5. 再次预验证并打包

【讨论】:

  • 第 3 方库包含我的类使用的一些接口。如果我不包括它们,则无法进行构建和打包。有没有办法可以将混淆的类从 jar 内的接口中分离出来?
  • 当然,你会在编译时将这些第三方库包含在javac目标的类路径中,但是打包它们时,你会像上面提到的那样做不同的事情,这样混淆器就不会出现问题在混淆已经混淆的类。希望清楚,如果没有,请告诉我
  • 更清楚的是,混淆器不会再次混淆第 3 方库。
  • 我需要混淆 3rd 方库中的接口。接口在包中,而已经混淆的类在默认包中(无包)。
【解决方案2】:

尝试使用 jshrink。与 proguard 相比,我的结果要好得多:

                    <java jar="obfuscator\jshrink.exe" fork="true">
                        <arg value="..\${projectdir}\${projectname}.jar"/>
                        <arg value="-classpath"/>
                        <arg pathref="project.class.path"/>
                        <arg value="-keep"/>
                        <arg value="${midletclass}"/>
                        <arg value="-o"/>
                        <arg value="..\${projectdir}\${projectname}.jar"/>
                    </java>

【讨论】:

  • 如果您给我您的电子邮件地址(或其他一些通讯方式),我可以将 jshrink 发送给您,以便您进行测试
【解决方案3】:

我使用的是 Proguard 4.3。降级到 Proguard 4.2 解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    相关资源
    最近更新 更多