首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用yGuard混淆胖jar (maven项目)中的特定包

用yGuard混淆胖jar (maven项目)中的特定包
EN

Stack Overflow用户
提问于 2021-05-20 12:58:44
回答 1查看 519关注 0票数 0

我正试图为我的工具制造一个模糊的脂肪罐。在尝试了Pro卫兵之后,我发现yGuard也是出于同样的目的。

以下是混淆的步骤

  • 步骤1:使用maven阴影插件

创建胖jar

  • 步骤2:在步骤1中创建的胖罐将由yGuard ant任务使用。

我只需要混淆自定义包,因为混淆外部jars (如batik库)会产生错误。例:

代码语言:javascript
运行
复制
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任务配置。

代码语言:javascript
运行
复制
    <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>

任何解决这个问题的建议都受到高度赞赏。提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-24 10:26:40

<rename>元素的<keep>子元素的工作方式正好相反:如果您在<keep>中的<include>类,这个类是而不是重命名的。也就是说,<include>的意思是“在名称不变的一组类中包含”。

由于您希望防止Batik内容被重命名,您的配置应该是

代码语言:javascript
运行
复制
<keep>
  <class>
    <patternset>
      <include name="org.apache.**.*"/>
      <include name="javax.**.*"/>
    </patternset>
  </class>
</keep>

用例不需要<exclude>。只有当您想重命名不应该重命名的类的子集时,<exclude>才是必要的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67620826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档