• Java Jar 包加密 -- XJar


    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 pathwx-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 est2</targetDir> <!-- 目标jar名称 --> <targetJar>xxx-encrypted.jar</targetJar> </configuration> </execution> </executions> </plugin>

    四、后记

      其实所有软件,都可以被破解,只是破解过程是简单还是复杂、以及破解成本的高低。

      最关键的还是自己软件要更新迭代的快,这样才能把模仿者远远甩在身后。

      转发请注明出处!!!

  • 相关阅读:
    深度优先和广度优先搜索
    宏定义
    C++11新特性之七——final/override控制
    __declspec的用法
    zedboard学习(1)OLED驱动显示图像
    python+NLTK 自然语言学习处理三:如何在nltk/matplotlib中的图片中显示中文
    流畅python学习笔记第十八章:使用asyncio编写服务器
    流畅python学习笔记第十八章:使用asyncio包处理并发(二)
    Django之博客系统:自定义认证
    Django之博客系统:用户注册和Profile
  • 原文地址:https://www.cnblogs.com/lrj1009IRET/p/13170098.html
Copyright © 2020-2023  润新知