IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> jar包加密程序,防止反编译 -> 正文阅读

[Java知识库]jar包加密程序,防止反编译

本窗体程序基于开源项目xjar
https://gitee.com/core-lib/xjar/tree/2.1.1/src/main/java/io/xjar

1.pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.lingxiao</groupId>
    <artifactId>m</artifactId>
    <version>1.0</version>

    <dependencies>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-controls</artifactId>
            <version>11</version>
        </dependency>
        <dependency>
            <groupId>org.kordamp.bootstrapfx</groupId>
            <artifactId>bootstrapfx-core</artifactId>
            <version>0.2.4</version>
        </dependency>

        <dependency>
            <groupId>com.github.core-lib</groupId>
            <artifactId>xjar</artifactId>
            <version>2.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-compress</artifactId>
            <version>1.19</version>
        </dependency>
        <dependency>
            <groupId>com.github.core-lib</groupId>
            <artifactId>loadkit</artifactId>
            <version>v1.0.1</version>
        </dependency>

    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>com.zenjava</groupId>
                <artifactId>javafx-maven-plugin</artifactId>
                <version>8.8.3</version>
                <configuration>
                    <vendor>lingxiao</vendor>
                    <mainClass>com.lingxiao.Mm</mainClass>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

其中xjar和loadkit我这里maven下载不下来可以自己找源码地址下载后编译打包到本地maven仓库
xjar地址:https://gitee.com/core-lib/xjar/tree/2.1.1/src/main/java/io/xjar
loadkit地址:https://gitee.com/core-lib/loadkit

2.启动类

package com.lingxiao;
import io.xjar.XKit;
import io.xjar.boot.XBoot;
import io.xjar.jar.XJarAntEntryFilter;
import io.xjar.key.XKey;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.FlowPane;
import javafx.stage.Stage;
import java.io.*;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;

public class Mm extends Application {
    public void start(Stage primaryStage) throws Exception {
        FlowPane pane = new FlowPane();
        pane.setPadding(new Insets(11,500,13,14));
        pane.setHgap(5);
        pane.setVgap(5);

        Label lab1 = new Label("指定加密前jar包路径(例如:D:\\work\\zike\\target\\zike.jar)");
        Label lab2 = new Label("指定加密密码");
        /*Label lab3 = new Label("指定需要加密的资源(例如:com/lingxiao/**)");*/
        Label lab4 = new Label("加密后JAR包输出路径(例如:D:\\work\\zike\\target\\zikeMm.jar)");

        TextField text1 = new TextField();
        text1.setPrefWidth(320);
        TextField text2 = new TextField();
        /*TextField text3 = new TextField();
        text3.setPrefWidth(320);*/
        TextField text4 = new TextField();
        text4.setPrefWidth(320);
        TextArea mess = new TextArea();
        mess.setPrefWidth(400);
        mess.setPrefHeight(120);

        Button button = new Button("加密");

        button.setOnAction(e-> {
                String value1 = text1.getText();
                String value2 = text2.getText();
                /*String value3 = text3.getText();*/
                String value4 = text4.getText();
            Alert alert = new Alert(Alert.AlertType.WARNING);
            Alert alertError = new Alert(Alert.AlertType.ERROR);
            Alert alertOk = new Alert(Alert.AlertType.INFORMATION);
            if(value1 == null || value1.trim().isEmpty()){
                alert.setContentText("指定加密的jar包路径输入有误");
                alert.showAndWait();
                return;
            }
            if(value2 == null || value2.trim().isEmpty()){
                alert.setContentText("指定加密密码输入有误");
                alert.showAndWait();
                return;
            }
            /*if(value3 == null || value3.trim().isEmpty()){
                alert.setContentText("指定需要加密的资源输入有误");
                alert.showAndWait();
                return;
            }*/
            if(value4 == null || value4.trim().isEmpty()){
                alert.setContentText("指定加密后JAR包输出路径输入有误");
                alert.showAndWait();
                return;
            }
            try {
                XKey xKey = XKit.key(value2);
                XBoot.encrypt(value1, value4, xKey);
            } catch (Exception ex) {
                ex.printStackTrace();
                alertError.setContentText(ex.getMessage());
                alertError.showAndWait();
                return;
            }
            String path = value4.substring(0,value4.lastIndexOf("\\")==-1?0:value4.lastIndexOf("\\")+1)+"password.key";
            File file = new File(path);
            //判断文件是否存在
            try {
                if (file.createNewFile()) {
                    //创建一个用于操作文件的字节输出流对象,创建就必须明确数据存储目的地
                    FileOutputStream fos = new FileOutputStream(file);
                    //写入
                    fos.write(("password: "+value2).getBytes(StandardCharsets.UTF_8));
                    //刷新并关闭流
                    fos.flush();
                    fos.close();
                }
            } catch (Exception eio) {
                eio.printStackTrace();
                alertError.setContentText(eio.getMessage());
                alertError.showAndWait();
                return;
            }

            String jar = value4.substring(value4.lastIndexOf("\\")==-1?0:value4.lastIndexOf("\\")+1);
            String mes = "(1)命令行启动,输入密码\n"+
                    "java -jar "+jar+" \n"+
                    "(2)传参启动\n" +
                    "java -jar "+jar+" --xjar.password="+value2+"\n"+
                    "(3)后台启动\n" +
                    "nohup java -jar "+jar+" --xjar.keyfile=password.key";
            alertOk.setContentText("加密成功\n");
            alertOk.showAndWait();
            mess.setText(mes);

        });
        pane.getChildren().addAll(lab1,text1,lab2,text2,lab4,text4,button,mess);
        Scene scene = new Scene(pane, 480, 480);
        primaryStage.setTitle("lingxiaoMm-v1.0");
        primaryStage.setScene(scene);
        primaryStage.sizeToScene();
        primaryStage.show();
    }
    public static void main(String[] args) {
        launch();
    }
}

3.测试启动

在这里插入图片描述

4.使用

指定加密前jar包路径(例如:D:\work\zike\target\zike.jar)
指定加密密码
加密后JAR包输出路径(例如:D:\work\zike\target\zikeMm.jar)
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

(1)命令行启动,输入密码
java -jar zikeMm.jar
(2)传参启动
java -jar zikeMm.jar --xjar.password=123
(3)后台启动
nohup java -jar zikeMm.jar --xjar.keyfile=password.key

备注:
(1)输入启动密码错误无法启动
(2)加密后反编译失败
(3)可以直接打包为EXE程序
打包命令:

mvn jfx:native

打包后
在这里插入图片描述
APP包为jar包需要自己配置运行环境
native包为EXE程序自带运行jre环境
在这里插入图片描述

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-05-21 18:48:02  更:2022-05-21 18:51:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年3日历 -2024/3/29 21:09:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码