广告
返回顶部
首页 > 资讯 > 后端开发 > Python >jar包加密方案分享
  • 711
分享到

jar包加密方案分享

2024-04-02 19:04:59 711人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录前言基础环境准备开始加密运行加密后的jar包后记其他的加密方案参考:前言 jar包相信大家都很熟悉,是通过打包java工程而获得的产物,但是jar包是有一个致命的缺点的,那就是

前言

jar包相信大家都很熟悉,是通过打包java工程而获得的产物,但是jar包是有一个致命的缺点的,那就是很容易被反编译,只需要使用jd-gui就可以很容易的获取到java源码

如果你想要防止别人反编译做逆向工程,那么对jar包进行一次加密就是一项很重要的工作了。

开源jar加密分为两种一种代码混淆,一种字节码转换。

字节码混淆,主要思路就是的对类名,变量名和方法名,局部参数名进行替换,让其命名变得无意义,很难读懂,但不影响其逻辑,但对于有耐心的人,还是能看明白!具体实现是在编译前做的混淆,还是编译后做的混淆,这个没用过不太清楚。

字节码转换,分为两块,一块是加密,对编译后class文件进行字节码转换(可以采用加密算法,字节码异或运算或自己定义规则);一块是解密,就是在类加载的时候对加密的字节码进行解密。加密这块因为在本地对class文件字节码转换,比较简单,方式也随意;解密这块主要围绕类加载器来做文章,又可分为java版实现和C/C++版实现,java版主要基于-agentJava:xxx.jar,通过Premain-Class,向Instrumentation注入ClassFileTransfORMer实现,自己在ClassFileTransformer中对需要解密的class文件进行解密;C/c++主要使用-agentpath:xxx.so,基于JVMTI通过C/C++实现,对类加载过程进行操作。

总体来说:代码混淆和字节码转换可以结合,例如,先代码混淆后,再对字节码加密,运行时对字节码解密。代码混淆,上手最简单,加密级别比较低,也容易破解。字节码转换,java版本对于java熟练人员上手很快,加密级别一般,个人理解该方式一个缺陷就是对于想加密的内容加密了,但解密方式暴露了,如果能够隐藏好解密方式,加密安全系数还是蛮高;C/C++版加密级别最高,但需要对java和C/C++都很熟练,而且需要研究JVMTI相关知识,如果真的实现了基本无破解风险,不过对于SpringBoot框架,其内部会直接分析class文件,有些坑需要解决。

另外一个问题就是,使用jar加密这块,需要确定好是对运行的主程序jar包加密,还是第三方jar加密,其还是有部分差异的。

基础环境准备

现在假设你的项目是一个Maven项目(目前不使用maven的项目已经不多了),那么加密起来特别的容易,

首先就是要在你的pom文件中增加插件仓库地址,如下:


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

然后在pom文件中增加如下插件:


<plugin>
                <groupId>com.GitHub.core-lib</groupId>
                <artifactId>xjar-maven-plugin</artifactId>
                <version>4.0.1</version>
                <executions>
                    <execution>
                        <Goals>
                            <goal>build</goal>
                        </goals>
                        <phase>install</phase>

                        <configuration>
                            <includes>
                                <include>/com/huc*.class</include>
                                <include>/mapper*Mapper.xml</include>
                                <include>/*.yml</include>
                            </includes>
                            <excludes>
                                <exclude>/templates/**.*</exclude>
                                <exclude>/static/**.*</exclude>
                            </excludes>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

这样,我们的准备工作就做完了,需要注意的是,includes代表我们想要加密的内容,采用的是Ant表达式,excludes代表的是不需要加密的内容,同样使用的Ant表达式。

一般情况下我们建议这两处内容必填,如果不填写,会加密整个jar包中的所有文件,这样其实是没有必要的,而且全部加密后启动的时候也可能产生意料之外的错误。

另外要说明的是,加密后的jar包是需要通过golang环境运行的,所以我们需要提前把golang的运行环境安装好,安装过程请自行百度。

开始加密

现在我们就开始正式的加密工作了,加密过程非常简单,只需要使用maven的install命令即可自动打包,命令如下:


mvn clean install -Dxjar.passWord=password  -Dmaven.test.skip=true

这里的password可以自行指定密码,是必填项。

执行后就会得到两个文件:一个是xjar.go的go源文件,一个是你项目的xjar包,也就是加密后的jar包。

运行加密后的jar包

运行加密后的jar包是需要先编译xjar.go源文件生成jar包启动器的。编译方式如下:


go build ./xjar.go

编译后会生成xjar.exe启动器(王子使用的是window系统,如果是linux系统就不是exe后缀了)。

之后使用如下命令即可运行加密后的jar包:


./xjar.exe java -jar ./**.xjar

可以看出,只是在使用java -jar的前边加上启动器即可,还是很方便的。

后记

防止反编译只能防止jar包被逆向破解,如果想要限制用户的使用时间,按时间付费需要怎么做呢?

这就要说到license加密技术了,我们下篇文章就来说说如何在你的项目中增加license,限制用户的使用。

其他的加密方案参考:

ClassFinal:Mr.K/ClassFinal

基于字节码转换java版,国人实现的,蛮不错的,对springBoot支持也好,其逻辑就是基于-agentJava:xxx.jar这一套原理,加密时对class文件做了两次处理,一次是对class文件的字节码完全加密,一次是对class文件混淆,这个混淆是保留成员和方法,对方法内部实现进行隐藏;解密时,判断如果该类是自己加密过的,找到完全加密的字节码进行解密,如果不是自己加密的就跳过。其对class文件混淆,就是方便类似SpringBoot等三方框架直接分析class文件。好处就是,如果你是个工具包,加密后给其它人,其他人编程时引用或者编译都不影响,但是运行时需要加密方支持,给出秘钥之类的。比较灵活和好用,也存在该方式的统一缺陷,不过其支持主程序jar加密,也支持单独的第三方工具jar加密。

JarEncrypt:Https://github.com/zhikun0704/api-zxv-jvmit

基于字节码转换C/C++版,基于JVMIT个人实现的,稍微研究了下,其支持对部分class加密,对应一般java应用问题不大,但对于SpringBoot项目支持可能有些问题。因本人C++水平有限,没有深层次研究,希望有C/C++和java都熟悉的大神有空搞一套完整的。

以上就是jar包加密方案分享的详细内容,更多关于jar包加密的资料请关注编程网其它相关文章!

--结束END--

本文标题: jar包加密方案分享

本文链接: https://www.lsjlt.com/news/128222.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • jar包加密方案分享
    目录前言基础环境准备开始加密运行加密后的jar包后记其他的加密方案参考:前言 jar包相信大家都很熟悉,是通过打包java工程而获得的产物,但是jar包是有一个致命的缺点的,那就是...
    99+
    2022-11-12
  • Java RSA加密解密实现方法分析【附BASE64 jar包下载】
    本文实例讲述了Java RSA加密解密实现方法。分享给大家供大家参考,具体如下:该工具类中用到了BASE64,需要借助第三方类库:javabase64-1.3.1.jarjavabase64-1.3.1.jar 本站下载地址。注意:RSA加...
    99+
    2023-05-30
    java rsa 加密解密
  • Android修改jar文件包名的方法分享
    前言 jar 包我们会非常高频率的使用,尤其是用一些其他三方库的时候,往往把 java 代码打包成 jar 文件,方便项目依赖使用。 带来的问题是, 多个jar包容易出现包名冲...
    99+
    2022-06-06
    jar文件 jar 方法 Android
  • Python正确调用 jar 包加密得到加密值的操作方法
    前言 在做接口自动化的时候,经常会遇到一些参数是需要加密的,比如密码参数。 加密规则一般开发也不愿意告诉你,会直接给你一个jar包,让你调用jar包得到加密值,在jmeter上是可以直接引用jar包的,但python...
    99+
    2022-06-02
    Python 调用jar 包加密 Python jar 包加密
  • PHP源码的加密方法分享
    关于PHP PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的WEB站点。 PHP是能让你生成动态网页的工具之一。PHP网页文件被当作一般HTML网页文件来处理并且在编辑时你可以用编辑HT...
    99+
    2023-09-07
    php 开发语言 加密 工具 服务器
  • Android加载长图的多种方案分享
    目录背景介绍方案1:WebView加载渲染方案2:BitmapRegionDecoder方案3:SubsamplingScaleImageView方案4:Glide+Subsampl...
    99+
    2022-11-12
  • Android图片加载案例分享
    HttpURLConnection和HttpClient都可以访问网络,前者是Java的标准类,后者是Apache的一个开源项目,两者使用起来效果一样,但后者更为简单。 以下是针对前者完成的一个实例:首先写好布局文件:<Li...
    99+
    2023-05-31
    android 图片加载 roi
  • Android AES加密工具类分享
    1、AES加密工具类 java不支持PKCS7Padding,只支持PKCS5Padding。我们知道加密算法由算法+模式+填充组成,下一篇介绍iOS和Android通用的AE...
    99+
    2022-06-06
    工具类 aes加密 工具 aes Android
  • Springboot导入本地jar后 打包依赖无法加入的解决方案
    目录Springboot导入本地jar后打包依赖无法加入1.本地jar包2.pom文件添加自定义jar包导入3.添加项目引入本地jar包,并设置maven打包一并打入pom文件中引入...
    99+
    2022-11-12
  • 第三方Jar包如何在Maven中添加
    这篇文章给大家介绍第三方Jar包如何在Maven中添加,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。在利用Maven构建项目的时候会出现某些Jar包无法下载到本地的Repository中,鉴于这种情况比较普遍存在,特归...
    99+
    2023-05-31
    maven 第三 mave
  • python代码加密方案
    为何要对代码加密? python的解释特性是将py编译为独有的二进制编码pyc 文件,然后对pyc中的指令进行解释执行,但是pyc的反编译却非常简单,可直接反编译为源码,当需要将产品发布到外部环境的时候,源码的保护尤为重要。 ...
    99+
    2023-09-17
    python代码加密
  • python代码的几种常见加密方式分享
    目录1.发行.pyc文件1.1 编译加密1.2 是否可逆1.3是否影响模块调用2.代码混淆3.生成exe可执行文件4…py文件转化为.so文件5.附加运行辅助包文件方式...
    99+
    2022-11-11
  • SpringBoot项目引入第三方sdk jar包的解决方案
    目录场景解决方案总结参考资料场景 对接第三方接口,他们有自己封装的SDK jar包,但是没有对外统一的maven仓库。我们自己项目需要集成这个离线的jar包? 解决方案 1、 jar...
    99+
    2022-11-13
  • 安卓逆向腾讯动漫app返回数据加密分析案例分享
    目录前言一、问题1.1抓包返回加密数据1.2查壳二、分析1.1 jadx-gui1.2 全局搜索加密函数1.3 疑似方法分析三、Frida1.1 反编译代码分析1.2 hook看下结...
    99+
    2022-11-13
  • 利用Pjax下载动态加载插件方案分享
    目录解决思路处理 Script处理 Head结尾在纯静态网站里,有时候会动态更新某个区域往会选择 Pjax(swup、barba.js)去处理,他们都是使用 ajax 和 pushS...
    99+
    2022-11-13
  • php源代码保护——PHP加密方案分析&解密还原
    前言 php是一种解释型脚本语言.与编译型语言不同,php源代码不是直接翻译成机器语言.而是翻译成中间代码(OPCODE) ,再由解释器(ZEND引擎)对中间代码进行解释运行 . 在php源代码的保护...
    99+
    2023-08-31
    php ide 开发语言
  • 分享Win7系统瘦身方案
    Win7系统使用时间长了,总会有很多垃圾文件。这些垃圾文件不仅占用电脑空间,还会影响系统的运行速度。因此,让我们了解一下简单的Win7减肥方法,因为很多人对此一无所知。如果你不知道,请看看小编整理的Win7减肥方案!以下是安装Win7的磁盘...
    99+
    2023-07-11
  • Unity3D加密保护解决方案
    精锐5加密锁支持Unity3D代码及资源保护,并提供授权方案产品简介可使用Virbox Protector加壳工具对Unity3D代码进行加密。Unity3D使用开源mono C#语法,代码会编译到Assembly-CSharp.dll。可...
    99+
    2023-01-31
    解决方案 Unity3D
  • springboot配置加密的正确姿势分享
    目录前言一、使用步骤1.引入依赖2. yml配置3. 使用总结主要介绍springboot项目中配置文件的加密 前言 为了保证服务器相关信息的保密,一般会采用加密的方式进行对配置文件...
    99+
    2022-11-16
    springboot配置加密 springboot配置详解
  • java实现AES 32位加密解密的方案
    目录1、常用加密32位原因2、解决方案3、AES工具类1、常用加密32位原因 网上很多解密加密是16位的,用32位密钥加密会报java.security.InvalidKeyExc...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作