使用 yGuard 混淆 fat jar(maven 项目)中的特定包
Obfuscating specific packages in a fat jar (maven project) with yGuard
我正在尝试为我的工具创建一个模糊的 fat jar。在尝试了proguard之后,我找到了同样用途的yGuard。
混淆步骤如下
第 1 步:使用 maven shaded 插件创建 fat jar
第2步:第1步中创建的fat jar将被yGuard ant任务使用。
我只需要混淆自定义包,因为混淆外部 jar(如 batik 库)会出错。例如:
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>
非常感谢任何解决此问题的建议。提前致谢
<rename>
元素的 <keep>
子元素的工作方式完全相反:如果您 <include>
在 <keep>
中创建 class,则此 class 未重命名。 IE。 <include>
表示“包含在 class 的集合中,其名称未更改”。
既然你想防止蜡染的东西被重命名,你的配置应该是
<keep>
<class>
<patternset>
<include name="org.apache.**.*"/>
<include name="javax.**.*"/>
</patternset>
</class>
</keep>
您的用例不需要 <exclude>
。 <exclude>
仅当您要重命名不应重命名的 class 的子集时才需要。
我正在尝试为我的工具创建一个模糊的 fat jar。在尝试了proguard之后,我找到了同样用途的yGuard。
混淆步骤如下
第 1 步:使用 maven shaded 插件创建 fat jar
第2步:第1步中创建的fat jar将被yGuard ant任务使用。
我只需要混淆自定义包,因为混淆外部 jar(如 batik 库)会出错。例如:
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>
非常感谢任何解决此问题的建议。提前致谢
<rename>
元素的 <keep>
子元素的工作方式完全相反:如果您 <include>
在 <keep>
中创建 class,则此 class 未重命名。 IE。 <include>
表示“包含在 class 的集合中,其名称未更改”。
既然你想防止蜡染的东西被重命名,你的配置应该是
<keep>
<class>
<patternset>
<include name="org.apache.**.*"/>
<include name="javax.**.*"/>
</patternset>
</class>
</keep>
您的用例不需要 <exclude>
。 <exclude>
仅当您要重命名不应重命名的 class 的子集时才需要。