• 使用allatori混淆代码


    引言

    为了保密需要,我们开发出来的程序在实际部署之前,需要先将jar包的代码进行混淆,让用户使用反编译也无法获得源码。
    allatori就是这样一个混淆java jar包代码的工具。

    操作步骤

    Step1.在pom中添加插件

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.6</version>
        <executions>
            <execution>
                <id>copy-and-filter-allatori-config</id>
                <phase>package</phase>
                <goals>
                    <goal>copy-resources</goal>
                </goals>
                <configuration>
                    <outputDirectory>${basedir}/target</outputDirectory>
                    <resources>
                        <resource>
                            <directory>${basedir}/allatori</directory>
                            <includes>
                                <include>allatori.xml</include>
                            </includes>
                            <filtering>true</filtering>
                        </resource>
                    </resources>
                </configuration>
            </execution>
        </executions>
    </plugin>
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.2.1</version>
        <executions>
            <execution>
                <id>run-allatori</id>
                <phase>package</phase>
                <goals>
                    <goal>exec</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <executable>java</executable>
            <arguments>
                <argument>-Xms128m</argument>
                <argument>-Xmx512m</argument>
                <argument>-jar</argument>
                <argument>${basedir}/lib/allatori.jar</argument>
                <argument>${basedir}/lib/allatori.xml</argument>
            </arguments>
        </configuration>
    </plugin>
    

    Step2.copy jar包到插件里配置的路径

    Step3.编写配置文件,并放在插件里配置的路径下

    示例配置:

    • 配置中最重要的的配置是<jar in ="xxx" out="xxx"/><ignore-classes>
      • 第一个标签用来指定将什么包混淆,混淆后的输出包名是什么
      • 第二个标签用来指定什么包、类不进行混淆。注意,主类不要进行混淆,其他第三方jar包的代码不要进行混淆(否则会出现java.lang.NoClassDefFoundError错误)。
    <config>
        <input>
            <!-- in表示输出的原始jar包,out表示输出的混淆后的jar包,后者名称可自定义,也可以是war -->
            <jar in="../target/akkaload-core-0.0.1-SNAPSHOT.jar"
                 out="../target/akkaload-core-0.0.1-SNAPSHOT.jar"/>
        </input>
        <keep-names>
            <class access="protected+">
                <field access="protected+"/>
                <method access="protected+"/>
            </class>
        </keep-names>
    
        <property name="log-file" value="log.xml"/>
    
        <!-- 忽略的包或类,这些文件将不被混淆 -->
        <ignore-classes>
            <!-- 不要混淆主类 -->
            <class template="class com.navi.akkaload.AkkaloadApplication" />
            <!-- 不要混淆第三方的代码,否则会运行jar包会报错java.lang.NoClassDefFoundError -->
            <class template="class org.dom4j.*" />
            <class template="class akka.actor.*" />
            <class template="class *alibaba*" />
            <class template="class *org*" />
            <class template="class *rabbitmq*" />
            <class template="class *springframework*" />
            <class template="class *lombok*" />
        </ignore-classes>
    
        <!-- 到期时间(到期后无法启动jar) 格式:yyyy/mm/dd-->
        <!--<expiry date="2021/04/03" string="SERVICE EXPIRED!"/>-->
        <!-- 随机命名混淆字符-->
        <!--<property name="random-seed" value="abcdef ghnljk svi"/>-->
    
    </config>
    

    效果

    打开混淆成功后的jar包,会发现代码已经被混淆。

  • 相关阅读:
    Canvas鼠标点击特效(富强、民主...)、收藏
    mysql实现当前行的值累加上一行的值
    HTML生成横向的PDF
    Java iText+FreeMarker生成PDF(HTML转PDF)
    HTML图片点击放大---关闭
    HTML页面通过JS跨域调用,子传父
    查询结果中出现行号(适用于按名次排序)
    在Nginx和Apache服务器配置https
    Rinetd 端口转发工具
    lsyncd使用中遇到的问题
  • 原文地址:https://www.cnblogs.com/daheww/p/15713596.html
Copyright © 2020-2023  润新知