【问题标题】:Obfuscating specific packages in a fat jar (maven project) with yGuard使用 yGuard 混淆 fat jar(maven 项目)中的特定包
【发布时间】:2022-03-24 18:26:40
【问题描述】:

我正在尝试为我的工具创建一个模糊的胖罐。在尝试了proguard之后,我发现yGuard也是出于同样的目的。

以下是混淆的步骤

  • 第1步:使用maven shaded插件创建fat jar

  • 第2步:第1步创建的fat jar供yGuard ant任务使用。

我只需要对自定义包进行混淆,因为像 batik 库这样混淆外部 jar 会产生错误。例如:

Caused by: java.io.IOException: An error ('No mapping found for: Field org/apache/batik/bridge/SVGPathElementBridge.ctx') occured during the remapping! See the log!)
    at com.yworks.yguard.obf.GuardDB.remapTo(GuardDB.java:547)
    at com.yworks.yguard.ObfuscatorTask.execute(ObfuscatorTask.java:1064)

根据 ygurd 文档,我修改了 ant 任务以仅包含自定义包。但这并没有发生,yGuard 没有考虑这种配置。以下是当前的ant任务配置。

    <target name="yguard" depends="jar">
    <taskdef name="yguard" classname="com.yworks.yguard.YGuardTask" classpath="${projectDir}/lib/yguard-${version}.jar" />
    <yguard>
        <inoutpair in="${jar}" out="${obfjar}" />

        <shrink logfile="${shrinklog}">
            <keep>
                <!-- main method -->
                <method name="void main(java.lang.String[])" class="${mainclass}" />
            </keep>
        </shrink>

        <rename mainclass="${mainclass}" logfile="${renamelog}">
            <property name="error-checking" value="pedantic" />
            <keep>
                <class>
                    <patternset>
                        <!-- Custom library - should be obfuscated -->
                        <include name="com.acme.**.*" />
                        <!-- Excluded library -->
                        <exclude name="org.apache.**.*" />
                        <exclude name="javx.**.*" />
                    </patternset>
                </class>
            </keep>
        </rename>
    </yguard>
</target>

高度赞赏解决此问题的任何指针。提前致谢

【问题讨论】:

    标签: java maven ant yguard


    【解决方案1】:

    &lt;rename&gt; 元素的&lt;keep&gt; 子元素的工作方式完全相反:如果您在&lt;keep&gt;&lt;include&gt; 一个类,则该类不会重命名。 IE。 &lt;include&gt; 表示“包含在名称不变的类集中”。

    既然你想防止蜡染的东西被重命名,你的配置应该是

    <keep>
      <class>
        <patternset>
          <include name="org.apache.**.*"/>
          <include name="javax.**.*"/>
        </patternset>
      </class>
    </keep>
    

    您的用例不需要&lt;exclude&gt;&lt;exclude&gt; 仅在您想重命名不应重命名的类的子集时才是必需的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-28
      • 1970-01-01
      • 1970-01-01
      • 2013-04-11
      • 2015-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多