一款上手即用的Java代码混淆工具

本文介绍了基于Allatori的Java代码混淆Maven插件,该插件简化了Allatori的配置,允许用户仅混淆指定的类。通过在项目中引入此插件并配置 classNames.properties 文件,可以轻松实现对源码的混淆,提高代码安全性。文章提供了插件使用方法及代码示例,适用于Windows、Linux和MacOS系统。
摘要由CSDN通过智能技术生成

基于Allatori的Java代码混淆 maven插件工具

推荐一个好用的 程序员效率工具,代码生成、yml和properties互转、 AI 问答 等实用功能


以下为原文:
项目地址:GitHub

Java代码很容易进行反编译,如果有人想要研究你的项目,随便反编译一下就看得清清楚楚了,很多时候公司的项目对外发布时希望能够进行加密,所以这时候就需要对源码进行混淆,增加阅读成本,当然只要花时间,总还是能看懂的,这个是java底层限制了,不可能完全加密。

不过一般人看到这种代码,应该会放弃了!
在这里插入图片描述

在这里插入图片描述

接下来就具体说说这个插件吧!

这个插件是基于Allatori来实现的。

Allatori本身是支持在maven中集成使用的,但是它只能指定哪些文件不混淆,然后会对剩余文件全部混淆,在实际业务中有时候可能只是想对部分涉密文件进行混淆,所以封装了这个工具。

另外刚开始接触这个Allatori,可能对它的配置文件比较陌生,也容易踩坑,所以我在这个插件中直接定义了一些通用配置,无需你再改配置,只需要在项目根目录下创建一个classNames.properties文件,在其中指定需要混淆的类全类名即可。

使用方式:

  1. mvn install 此项目到本地仓库,然后在想要混淆的项目的pom文件中引入此插件
  2. 在需要混淆的项目的pom文件中导入依赖即可使用。build -> plugins中导入依赖即可使用
  3. 注意事项:如果需要在正式环境中使用,请将此maven插件项目放到私服远程maven仓库中
  4. 在对项目进行打包时此插件便会运行

pom文件中引入:

</build>
 </plugins>
   <plugin>
                <groupId>com.dwp</groupId>
                <artifactId>obfuscation</artifactId>
                <version>1.0.0</version>
                <executions>
                    <execution>
                        <phase>compile</phase>
                        <goals>
                            <goal>obfuscation</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <basePath>${basedir}</basePath>
                    <classPath>${basedir}/target/classes</classPath>
                </configuration>
            </plugin>
        </plugins>
    </build>

在要混淆的项目根目录下创建classNames.properties文件,填写内容示例(将需要混淆的类全类名写到此文件中即可):

com.dwp.a
com.dwp.b
com.dwp.c

支持Windows、Linux、MacOS系统下使用。

插件主类代码如下欢迎各位大佬去github下载
(要是能帮我点点star,更是不胜感激了),水平有限,欢迎指教:

package com.dwp;

import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;

import java.net.URL;

/**
 * 混淆插件主类
 *
 * @author denngweiping
 * 2020-04-01
 */
@Mojo(name = "obfuscation", defaultPhase = LifecyclePhase.PACKAGE)
public class Obfuscation extends AbstractMojo {
    /**
     * 项目根目录
     */
    @Parameter
    private String basePath="D:/aaa/code/svc/aaa-licence-obfuscation";//不要一开始就让人把你看透
    /**
     * class文件所在目录
     */
    @Parameter
    private String classPath="D:/aaa/code/svc/aaa-licence-obfuscation/target/classes";//学会保留30%的神秘感

    public void execute() {
        try {
            //学会给予,你才能获得更多(复制工具jar包、配置文件到目标目录)
            URL url = this.getClass().getResource("");
            JarFileLoader.copyFile(url, classPath);
            //学会从外界获取自己想要的东西(获取传入的混淆类列表,创建并修改配置文件)
            String resourcePath = basePath + "/classNames.properties";
            DocumentUtil.createConfigFile(classPath, resourcePath);
            //人生需要一盏指路明灯(指定class类所在路径)
            DocumentUtil.setConfigDirPath(classPath + "/config.xml", classPath);
            //道理都懂得和实际去体会是不一样的(创建并运行脚本文件)
            ShellExcutor.createAndRunShell(classPath);
            //不带片履来到这人世间,走的时候也要干干净净的离去(删除多余文件,避免项目污染)
            FileUtil.delFile(resourcePath);
            FileUtil.delFile(classPath + "/obfuscation-main.jar");
            FileUtil.delFile(classPath + "/obfuscation-annotations.jar");
            if (OSUtil.isMac() || OSUtil.isLinux()) {
                FileUtil.delFile(classPath + "/run.sh");
            } else if (OSUtil.isWindows()) {
                FileUtil.delFile(classPath + "/run.bat");
            }
            FileUtil.delFile(classPath + "/config.xml");
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}

附:allatori官方文档

### 回答1: 好的,下面是一份 PySide6 上手文档: ## 什么是 PySide6? PySide6 是一个 Python 库,它提供了用于创建 GUI 应用程序的工具。它使用 Qt 库作为后端,允许开发人员创建跨平台的 GUI 应用程序(支持 Windows、Linux 和 MacOS 等操作系统)。 ## 如何安装 PySide6? 要安装 PySide6,您需要先安装 Python 和 pip。然后,您可以使用 pip 命令安装 PySide6: ``` pip install pyside6 ``` ## 如何使用 PySide6? 要使用 PySide6,您需要先导入 PySide6 库: ```python import PySide6 ``` 然后,您可以使用 PySide6 库中的各种类和函数来创建 GUI 应用程序。例如,要创建一个简单的窗口,可以使用 PySide6 中的 `QMainWindow` 类: ```python import PySide6.QtWidgets app = PySide6.QtWidgets.QApplication() window = PySide6.QtWidgets.QMainWindow() window.show() app.exec_() ``` 这会创建一个空白的窗口,并在用户关闭窗口时退出应用程序。 您还可以使用 PySide6 库中的其他类和函数来创建按钮、菜单、布局等等。有关 PySide6 的更多信息,请参阅 [PySide6 文档](https://pyside6.readthedocs.io/)。 ### 回答2: PySide6 是一款基于 Qt 框架的 Python 第三方库,它提供了与 Qt 库相对应的 API,用于开发跨平台的图形用户界面 (GUI) 应用程序。使用 Markdown 来编写 PySide6 的上手文档可以更好地结构化和呈现相关信息。 ## 安装 PySide6 首先,确保已经正确安装了 Python 解释器和相应的开发环境。然后,通过以下命令安装 PySide6: ``` pip install PySide6 ``` ## Hello World 示例 以下是一个简单的 Hello World 示例,用于验证 PySide6 的安装是否成功。创建一个名为 `hello.py` 的文件,并输入以下代码: ```python import sys from PySide6.QtWidgets import QApplication, QLabel app = QApplication(sys.argv) label = QLabel("Hello World!") label.show() sys.exit(app.exec()) ``` 然后,在终端中运行以下命令来启动应用程序: ``` python hello.py ``` 如果一切顺利,应该会看到一个显示着 "Hello World!" 的窗口。 ## 进阶使用 了解了基础示例后,可以开始探索更多 PySide6 的功能和用法。可以参考 PySide6 的官方文档(https://doc.qt.io/qtforpython/),其中包含了详细的 API 参考、教程和示例。 此外,还可以参加 PySide6 的社区论坛、在线课程和开发者大会,与其他开发者交流经验和解决问题。 ## 总结 通过 Markdown 编写的 PySide6 上手文档使得阅读和理解更加方便。以上只是一个简单的入门指引,希望能够帮助你快速上手 PySide6 开发。请继续深入学习和探索,享受使用 PySide6 构建强大的 GUI 应用程序的乐趣! ### 回答3: PySide6是一款用于创建图形用户界面(GUI)的Python库。对于那些希望快速上手PySide6的开发者来说,使用Markdown来编写上手文档是一种简洁有效的方式。 PySide6安装: 要使用PySide6,首先需要将其安装到Python环境中。可以通过运行以下命令来安装PySide6: ``` pip install PySide6 ``` 创建PySide6应用程序: 创建一个基本PySide6应用程序有以下几个步骤: 1. 导入必要的模块: ```python from PySide6.QtWidgets import QApplication, QLabel ``` 2. 创建应用程序对象: ```python app = QApplication([]) ``` 3. 创建窗口对象: ```python label = QLabel('Hello PySide6!') ``` 4. 将窗口显示出来: ```python label.show() ``` 5. 运行应用程序的主循环: ```python app.exec() ``` 更复杂的PySide6应用程序可以使用其他PySide6模块来创建按钮、文本框、标签等图形组件,并为这些组件添加事件处理器。 事件处理: 可以使用PySide6的信号-槽(Signal-Slot)机制来处理各种事件,例如按钮被点击时的事件。 1. 导入所需的模块: ```python from PySide6.QtWidgets import QPushButton from PySide6.QtCore import Slot ``` 2. 创建按钮对象和事件处理器: ```python button = QPushButton('Click me') @Slot() def on_button_clicked(): print('Button clicked!') ``` 3. 将事件处理器连接到按钮的点击事件: ```python button.clicked.connect(on_button_clicked) ``` 以上是PySide6的基本用法。使用Markdown编写的上手文档提供了简洁的步骤和示例代码,能够帮助开发者快速上手并开始开发PySide6应用程序。
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值