精华内容
参与话题
问答
  • jar包加密

    千次阅读 2019-04-30 10:15:35
    不小心把公司的jar包给解密了。。。很尴尬,研究一下。。...对jar包进行加密,然后在Java层重写类加载器对其进行解密,以达到对jar包加密保护。包括用对称加密算法和非对称加密算法。不管用什...

    不小心把公司的jar包给解密了。。。很尴尬,研究一下。。。
    转载自 JVM层对jar包字节码加密

    几个思路

    大致想到以下几种方式:

    1. 混淆器,将jar包混淆后反编译出来的东西看起来就很眼花,但如果耐心一点也是可以看出来的。eg:Jocky (一款混淆代码的工具,)
    2. 对jar包进行加密,然后在Java层重写类加载器对其进行解密,以达到对jar包的加密保护。包括用对称加密算法和非对称加密算法。不管用什么算法,在Java层面的类加载器实现的话,其实也作用不大,因为类加载器本身被反编译出来后就基本暴露无遗了。 我司是用的这种方法。。。
    3. 可以修改java编译后的class文件的某些属性,以让反编译软件分析不了,但它也不可靠,只要按照class格式深入分析下也能反编译出来。
    4. 修改JDK源码,定制JDK就涉及到JVM的整体改动,而且还要求外部使用,不太可行。
    5. 利用JDK中JVM的某些类似钩子机制和事件监听机制,监听加载class事件,使用本地方式完成class的解密。C/C++被编译后想要反编译就很麻烦了,另外还能加壳。
    展开全文
  • Jar包加密,防止反编译方法XJar加密工具XJar功能特性使用方法(手动执行方式)使用方法(Maven插件方式)exe4j加密工具使用方法jvmti加密工具使用方法参考 XJar加密工具 XJar功能特性 基于对JAR包内资源的加密以及...

    XJar加密工具

    XJar功能特性

    • 基于对JAR包内资源的加密以及拓展ClassLoader来构建的一套程序加密启动,动态解密运行的方案,避免源码泄露以及反编译。
    • 支持Maven插件
    • 加密过程需要Go环境;加密后生成Go启动器,保护密码不泄露
    • GitHub: https://github.com/core-lib/xjar

    使用方法(手动执行方式)

    1. 添加Maven依赖
    <!-- 添加jitpack.io仓库 -->
    <repositories>
        <repository>
            <id>jitpack.io</id>
            <url>https://jitpack.io</url>
        </repository>
    </repositories>
    
    <!-- 添加XJar依赖 -->
    <dependencies>
    	<dependency>
            <groupId>com.github.core-lib</groupId>
            <artifactId>xjar</artifactId>
            <version>4.0.0</version>
        </dependency>
    </dependencies>
    
    1. 对jar包进行加密的代码
    XCryptos.encryption()
            .from("D:/jars/original.jar")
            .use("1@3$qWeR")
            .include("/io/xjar/**/*.class")
            .include("/mapper/**/*Mapper.xml")
            .exclude("/static/**/*")
            .exclude("/conf/*")
            .to("D:/files/encrypted.jar");
    
    • 方法说明
    方法 参数 说明
    from (String jar) 指定待加密jar包路径
    from (File jar) 指定待加密jar包路径
    use (String password) 设置加密密码
    use (String algorithm, int keysize, int ivsize, String password) 设置加密算法及加密密码
    include (String ant) 指定要加密的资源相对于classpath的ANT路径表达式
    include (Pattern regex) 指定要加密的资源相对于classpath的正则路径表达式
    exclude (String ant) 指定不加密的资源相对于classpath的ANT路径表达式
    exclude (Pattern regex) 指定不加密的资源相对于classpath的正则路径表达式
    to (String xJar) 指定加密后jar包输出路径,并执行加密
    to (File xJar) 指定加密后jar包输出路径,并执行加密
    • algorithm: JDK内置加密算法,如:AES/CBC/PKCS5Padding(缺省值)和DES/CBC/PKCS5Padding
    • keysize: 密钥长度,如:56、128(缺省值)、256
    • ivsize: 密钥向量长度,如:128(缺省值)
    1. 用Go进行编译,生成Go启动器
    go build xjar.go
    
    • 第2步执行成功之后,在指定目录下会输出加密的jar包以及一个xjar.go文件
    • 将 xjar.go 在不同的平台进行编译即可得到不同平台的启动器可执行文件,其中Windows下文件名为 xjar.exe 而Linux下为 xjar
    • 用于编译的机器需要安装 Go 环境,用于运行的机器则可不必安装 Go 环境
    • 由于启动器自带JAR包防篡改校验,故启动器无法通用,即便密码相同也不行
    1. 启动运行
    xjar java -jar /path/to/encrypted.jar
    
    • 在 Java 启动命令前加上编译好的Go启动器可执行文件名(xjar)即可启动运行加密后的JAR包
    • 仅支持通过 -jar 方式启动,不支持-cp或-classpath的方式

    使用方法(Maven插件方式)

    Maven项目可通过集成 xjar-maven-plugin 以免去每次加密都要执行一次上述的代码,随着Maven构建自动生成加密后的JAR和Go启动器源码文件。

    1. 添加 xjar-maven-plugin
    <project>
        <!-- 设置 jitpack.io 插件仓库 -->
        <pluginRepositories>
            <pluginRepository>
                <id>jitpack.io</id>
                <url>https://jitpack.io</url>
            </pluginRepository>
        </pluginRepositories>
        <!-- 添加 XJar Maven 插件 -->
        <build>
            <plugins>
                <plugin>
                    <groupId>com.github.core-lib</groupId>
                    <artifactId>xjar-maven-plugin</artifactId>
                    <version>4.0.0</version>
                    <executions>
                        <execution>
                            <goals>
                                <goal>build</goal>
                            </goals>
                            <phase>package</phase>
                            <!-- 或使用
                            <phase>install</phase>
                            -->
                            <configuration>
                            	<!-- 建议password不要在pom文件中指定 -->
                                <password>io.xjar</password>
                                <!-- optional
                                <algorithm/>
                                <keySize/>
                                <ivSize/>
                                <includes>
                                    <include/>
                                </includes>
                                <excludes>
                                    <exclude/>
                                </excludes>
                                <sourceDir/>
                                <sourceJar/>
                                <targetDir/>
                                <targetJar/>
                                -->
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </project>
    

    对于Spring Boot 项目或模块, 该插件要后于 spring-boot-maven-plugin 插件执行, 有两种方式

    • 将插件放置于 spring-boot-maven-plugin 的后面, 因为其插件的默认 phase 也是 package
    • 将插件的 phase 设置为 install(默认值为:package), 打包命令采用 mvn clean install

    也可以通过Maven命令执行

    mvn xjar:build -Dxjar.password=io.xjar
    mvn xjar:build -Dxjar.password=io.xjar -Dxjar.targetDir=outputDir/encrypted.jar
    

    但通常情况下是让XJar插件绑定到指定的phase中自动执行,这样就能在项目构建的时候自动构建出加密的包

    mvn clean package -Dxjar.password=io.xjar
    mvn clean install -Dxjar.password=io.xjar -Dxjar.targetDir=/directory/to/save/target.xjar
    

    强烈建议
    不要在 pom.xml 的 xjar-maven-plugin 配置中写上密码,这样会导致打包出来的 xjar 包中的 pom.xml 文件保留着密码,极其容易暴露密码!强烈推荐通过 mvn 命令来指定加密密钥!

    exe4j加密工具

    使用方法

    1. 下载exe4j工具并安装
      官网下载地址:https://exe4j.apponic.com/

    2. 安装完成后打开软件,填写Name, Company 和 Licence key. Name 和 Company 随便填,Licence key 网上搜一个即可,如 A-XVK258563F-1p4lv7mg7sav
      注册

    3. 点击 Next, 选择 “JAR in EXE” mode
      在这里插入图片描述

    4. 点击 Next, 填写输出exe文件的名称和输出路径
      在这里插入图片描述

    5. 点击 Next, 进行exe程序配置;如需要兼容64位操作系统,需点击 “Advanced Options”, 选择 “32-bit or 64-bit”, 进入设置页面,勾选 “Generate 64-bit executable” 选项
      在这里插入图片描述

    6. 点击 Next, 进入 “Java invocation” 页面;点击右侧 “+” 图标,添加项目jar包以及所有依赖jar包;添加后点击下方 “…” 图标选择程序启动的 Main class;并输入启动参数(如需要)
      在这里插入图片描述

    7. 点击 Next, 填写JRE版本;点击 “Advanced Options”, 选择 “Search sequence”, 点击右侧 “+” 图标,添加本地java安装路径下的jre路径;添加后把jre路径移到第一项(或者把默认的三项删掉)
      在这里插入图片描述
      在这里插入图片描述

    8. 一直点击 Next, 直到进入 “Finished” 页面;点击上方按钮可测试exe程序运行
      在这里插入图片描述

    9. 保存 & 完成

    jvmti加密工具

    采用jvmti方式对Class文件进行加密,使用C++生成加密和解密库,先用加密库对Jar包进行加密,将加密后的Jar包及解密库文件发布出去,执行时候需要JVM引入解密库文件,解密后执行

    使用方法

    1. 下载加密程序压缩包:JarEncrypt2
      解压后目录及文件如下:
    ./JarEncrypt2/encrypt   ## 加密库
    —– encrypt.cpp
    —– Makefile
    
    ./JarEncrypt2/decrypt    ## 解密库
    —–decrypt.cpp
    —– Makefile
    
    ./JarEncrypt2/Encrypt.java   ## Java加密执行文件
    
    1. 修改 encrypt 和 decrypt 下的Makefile文件,修改其中的 "INCLUDEDIR"为实际jdk路径
    INCLUDEDIR = -I /home/jdk1.8/include -I /home/jdk1.8/include/linux
    
    1. 根据需要加密的代码,修改 Encrypt.java 和 decrypt.cpp 文件
    // Encrypt.java
    // 只对特定类型和package下的文件加密
    if (name.endsWith(".class") && name.startsWith("com/du/")) {
    
    // decrypt.cpp
    // 设置需要解密的package
    if (name && strncmp(name, "com/du/", 7) == 0) { 
    
    1. 分别进入 encrypt 和 decrypt 目录,执行 make,生成 libencrypt.so 和 liblinux.so 库文件
    2. 编译并运行Encrypt.java;生成 test_encrypt.jar 文件
    javac Encrypt.java
    
    java -Djava.library.path=./encrypt/ -cp . Encrypt -src test.jar
    
    1. 生成的加密jar包无法直接运行和反编译,直接运行会出现ClassFormatError,用jd-gui工具反编译会显示 // INTERNAL ERROR //
    Error: A JNI error has occurred, please check your installation and try again
    Exception in thread "main" java.lang.ClassFormatError: Incompatible magic value 3455696313 in class file
    
    1. 使用解密库文件 liblinux.so 解密运行
    export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/home/JarEncrypt2/decrypt
    java -agentlib:linux -jar test_encrypt.jar
    
    1. 完成;发布的时候需要把 test_encrypt.jar 和 liblinux.so 一起发布,启动时按上一步操作

    参考

    展开全文
  • Java Jar 包加密 -- XJar

    2020-09-23 14:43:03
    Java Jar 包加密 一、缘由  Java的 Jar包中的.class文件可以通过反汇编得到源码。这样一款应用的安全性就很难得到保证,别人只要得到你的应用,不需花费什么力气,就可以得到源码。  这时候就需要对jar进行加密...

    Java Jar 包加密

    一、缘由

      Java的 Jar包中的.class文件可以通过反汇编得到源码。这样一款应用的安全性就很难得到保证,别人只要得到你的应用,不需花费什么力气,就可以得到源码。

      这时候就需要对jar进行加密处理。

    二、技术&工具

      XJar

      GitHub:https://github.com/core-lib/xjar

      码云:https://gitee.com/core-lib/xjar?_from=gitee_search

      maven集成 XJar

     

      GitHub:https://github.com/core-lib/xjar-maven-plugin

      码云:https://gitee.com/core-lib/xjar-maven-plugin?_from=gitee_search

      xjar-agent-hibernate

      GitHub:https://github.com/core-lib/xjar-agent-hibernate

      码云:https://gitee.com/core-lib/xjar-agent-hibernate?_from=gitee_search

      go语言、maven、eclipse

      文档可以到github、码云上去了解,这里只描述使用过程,亲测可用!

    三、实现过程

      这里使用的maven版本是:apache-maven-3.6.3,低版本的没测试过

      1、XJar

       1-1.在github或码云上下载该项目,导入eclipse,然后新建一个main类,填入参数,直接运行得到一个xjar.go 和 加密后的jar包【xx-encrypted.jar】。

        注意:这种直接在项目中跑mian,不提倡,会导致jar包中包含这段代码,导致密码泄露,所以要通过命令行的方式来执行这段代码。

        

        1-2.这时候可以用反编译软件 jb-gui 打开jar看看加密的效果,这时候反编译软件已经看不到.class文件的源码了

     

     

         1-3.加密后的jar包,不能直接用原来的java 命令来执行,需要用到同时生成的xjar.go文件,执行命令 go build xjar.go

          这里要等待一小会,等待编译出目标文件xjar.exe

          

     

     

           

          1-4. 最后执行命令,xjar java -jar /path/to/encrypted.jar,即可运行加密后的jar包

           注意:Spring Boot + JPA(Hibernate) 启动会报错

                       1-5:没有采用 Spring Boot + JPA(Hibernate) 技术的可以略过以下步骤。

          a、到码云、GitHub上下载  xjar-agent-hibernate  项目

          b、导入eclipse 打包出jar包

          c、然后执行命令  xjar java -javaagent:xjar-agent-hibernate-v1.0.0.jar -jar path\wx-encrypted.jar,即可正常运行

          

       2、maven集成 XJar

        第二种方式就比较简单了,直接在项目中引入xjar-maven-plugin,然后打包就可以了,其他操作方式和第一种类似

        注意:密码最好采用命令行方式

    复制代码

    <pluginRepositories>
      <pluginRepository>
        <id>jitpack.io</id>
        <url>https://jitpack.io</url>
      </pluginRepository>
    </pluginRepositories>

           
    
     <plugin>
                    <groupId>com.github.core-lib</groupId>
                    <artifactId>xjar-maven-plugin</artifactId>
                    <version>4.0.0</version>
                    <executions>
                        <execution>
                            <goals>
                                <goal>build</goal>
                            </goals>
                            <phase>install</phase>
                            <configuration>
                                     <password>1233445</password>
                                <includes>
                       <!---->
                                    <include>/com/xxx/xxx/**/*.class</include>
                                </includes>
                                <!-- 无需加密的资源路径表达式 -->
                                <excludes>
                                    <exclude>static/**</exclude>
                                    <exclude>META-INF/resources/**</exclude>
                                </excludes>
                                <!-- 源jar所在目录 -->
                                <sourceDir>path\</sourceDir>
                                <!-- 源jar名称 -->
                                <sourceJar>xxx.jar</sourceJar>
                                 <!-- 目标jar存放目录 -->
                                <targetDir>path\test2</targetDir>
                                 <!-- 目标jar名称 -->
                                <targetJar>xxx-encrypted.jar</targetJar>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>

    复制代码

     

    展开全文
  • Java jar包加密

    2020-08-31 16:24:55
    Java项目中jar包在window以及Linux环境下的加密 公司项目需要交付时对项目源码进行加密,本文针对Java spring boot项目的jar包运行方式进行加密加密工具:xjar,地址:https://gitee.com/core-lib/xjar 前提...

    Java项目中jar包在window以及Linux环境下的加密

    公司项目需要交付时对项目源码进行加密,本文针对Java spring boot项目的jar包运行方式进行加密。

    加密工具:xjar,地址:https://gitee.com/core-lib/xjar

    前提条件:

    • jdk1.7+
    • Go语言环境(编辑环境需要,运行环境可不需要)

    创建一个新项目用于加密jar包

    • 新建一个项目 pom引入以下依赖
     <!-- 设置 jitpack.io 仓库 -->
        <repositories>
            <repository>
                <id>jitpack.io</id>
                <url>https://jitpack.io</url>
            </repository>
        </repositories>
    <!-- 添加 XJar 依赖 -->
    <dependency>
        <groupId>com.github.core-lib</groupId>
        <artifactId>xjar</artifactId>
        <version>4.0.1</version>
    </dependency>
    
    

    书写加密类

    package com.test.jar;
    
    import io.xjar.XCryptos;
    /**
     * @ClassName: JarEncryption
     * @Package: com.test.jar
     * @Description:
     * @Datetime: 2020/8/31   10:30
     * @author: kaishun.zhou
     */
    public class JarEncryption {
        public static void main(String[] args) throws Exception {
            // Spring-Boot Jar包加密
            XCryptos.encryption()
                    .from("C:\\zhoukaishun\\study\\target\\study.jar")
                    .use("io.xjar")
                    .exclude("/static/**/*")
                    .exclude("/templates/**/*")
                    .exclude("/META-INF/resources/**/*")
                    .to("C:\\zhoukaishun\\study\\target\\study-encryption.jar");
            System.out.println("success");
        }
    }
    
    

    运行方法得到加密后的jar 以及一个xjar.go文件,如下图

    在这里插入图片描述

    • window环境下cmd进入文件路径下执行,go build xjar.go ,会生成一个xjar.exe 文件

    在这里插入图片描述

    运行,xjar java -jar 项目名.jar

    在这里插入图片描述

    在这里插入图片描述

    如上图 可以正常访问,此时拿到加密后的jar包通过反编译工具或者idea是无法打开的。

    在这里插入图片描述
    在这里插入图片描述

    • Linux环境同理,编译环境需要go环境,将加密后的jar上传到指定目录,go编译xjar.go此时生成的就不是.exe文件,而实一个xjar,运行同理,文件目录下 ./xjar java -jar 项目名.jar ,详情下图

    目录结构

    在这里插入图片描述

    执行的sh

    在这里插入图片描述

    执行结果

    在这里插入图片描述

    访问

    在这里插入图片描述

    至此结束
    展开全文
  • jar包加密防止反编译

    2020-11-16 17:55:01
    Java加密Jar包和Class文件防止反编译的方法,此为防止反编译程序,亲测可用。如果大神有啥破解方法,希望能与楼主分享下,谢谢。
  • java jar包加密

    千次阅读 2019-04-16 23:38:04
    方案一:xjar - Spring Boot JAR 安全加密运行工具 GitHub: ... 基于对JAR包内资源的加密以及拓展ClassLoader来构建的一套程序加密启动,动态解密运行的方案,避免源码泄露或反编译。 ...
  • java项目的jar包加密(防止反编译)

    万次阅读 2018-01-11 16:30:18
    最近给公司写了一个项目,需要给其他公司用,为了不让别人看到源码,将项目打成了jar包,但是jar包用反编译工具... 其实jar包加密只是增加了反编译时间,理论上还是能破解的,但是有总比没有好。废话少说,开始吧。
  • java项目的jar包加密(用abc混淆)

    千次阅读 2020-03-09 11:02:20
    最近给公司写了一个项目,需要给其他公司用,为了不让别人看到源码,将项目打成了jar包,但是jar包...其实jar包加密只是增加了反编译时间,理论上还是能破解的,但是有总比没有好。废话少说,开始吧。 软件下载解压...
  • jar包加密方式

    2019-09-20 05:18:28
    推荐一种加壳工具保护jar包的方式—Virbox Protector 目前有两个版本可选择。 第一个是带许可版本,加壳时与许可绑定,加密后的软件需要有许可授权才能打开使用。 第二个是独立版加壳,只做加壳的处理,加密后的...
  • Java代码加密与反编译(一) 利用混淆器工具proGuard对jar包加密
  • Jar包 加密混淆

    2020-08-27 17:38:04
    转发:https://www.cnblogs.com/zqzdong/p/9923472.html
  • java对一个jar包加密

    千次阅读 2019-05-21 15:02:50
    软件无需任何代码开发,即可轻松加密Java应用程序、Jar包、War包,防止反编译逆向工程,真正实现 Java代码加密加密效果对比 加密加密加密方案 Virbox Protector 测试版工具:立即下载 使用Virbox...
  • 基于对JAR包内资源的加密以及拓展ClassLoader来构建的一套程序加密启动,动态解密运行的方案,避免源码泄露或反编译。 功能特性 无需侵入代码,只需要把编译好的JAR包通过工具加密即可。 完全内存解密,杜绝源码以及...
  • java的jar包加密

    2017-08-29 18:19:00
    由于项目要求(虽然我觉得代码没什么机密可言...),写好的jar包需要做一定加密处理 这里提供两种办法,一种奇葩,一种通用 1. 直接修改jar文件: 具体步骤:  在代码中插入一段不会运行的到的代码 1 ...
  • 基于对JAR包内资源的加密以及拓展ClassLoader来构建的一套程序加密启动,动态解密运行的方案,避免源码泄露或反编译。 功能特性 无需侵入代码,只需要把编译好的JAR包通过工具加密即可。 完全内存解密,杜绝源码...
  • 基于对JAR包内资源的加密以及拓展ClassLoader来构建的一套程序加密启动,动态解密运行的方案,避免源码泄露或反编译。 功能特性 无需侵入代码,只需要把编译好的JAR包通过工具加密即可。 完全内存解密,杜绝源码...
  • 【Java】Springboot项目中jar包加密

    千次阅读 2019-10-22 19:29:14
    使用异或加密的形式,加密jar包 异或加密的原理: 一个整数 a 和任意一个整数 b 异或两次,得到的结果是整数 a 本身,即: a == a ^ b ^ b。 这里的 a 就是需要加密的原数据,b 则是密钥。a ^ b 就是加密过程,...
  • java的jar包加密及使用

    万次阅读 2017-08-30 11:41:31
    由于项目要求(虽然我觉得代码没什么机密可言...),写好的jar包需要做一定加密处理 这里提供两种办法,一种奇葩,一种通用 1. 直接修改jar文件: 具体步骤:  在代码中插入一段不会运行的到的代码 1 ...
  • 使用xjar 对Spring-Boot jar包加密

    千次阅读 2020-05-22 14:55:03
    最近公司有个项目涉及到,部署到待签约合作的客户服务器上,因为考虑到demo的代码保护,所以对springboot打包生成的jar包进行加密。从网上找了很多资料,有些是利用 ProGuard进行代码混淆,但这个方法我尝试过很多次...

空空如也

1 2 3 4 5 ... 20
收藏数 1,762
精华内容 704
关键字:

jar包加密