java代码禁止反编译_Java代码防止反编译
今天因为需要,需要对内部的Java代码进行加密保护。由于时间紧迫,于是搜了很多网站。代码保护大家常用的方法大概有如下几种:
1)代码混淆,即使用代码混淆的工具,将程序结构打乱,这样即使源代码被反编译了,仍然很难梳理出程序的正常逻辑结构;
2)代码隔离。即在别的服务器上仅仅存放页面的代码,实际的应用程序访问到自己的服务器上。这种保护效果也比较好,问题就是,如果被部署服务器和访问服务器之间网络无法共通,那么此方法则不可行。
3)本地代码保护,通过本地加密技术动态生成可执行的jar包,将加密之后的应用发布,则在反编译时,需要输入密码,如果无密码,则无法解密。
4)通过加密工具进行加密,之后发布已经加密的包,通过GO语言生成的动态脚本执行启动命令。
今天我使用到的就是第四种,通过GO语言动态生成执行文件的方式启动java程序。
下面就是整个加密解密的过程:
1).通过idea或者Eclipse开发工具,将要部署的源代码打成jar包;
2)单独写一个test方法,执行以下逻辑对生成的jar包进行加密。XCryptos.encryption() .from( "/XXXX/test.jar" ) .use( "123456" ) .include( "/com/123/**/*.class" ) .include( "/mapper/**/*Mapper.xml" ) .exclude( "/static/**/*" ) .exclude( "/conf/*" ) .to( "XXX/backend-gateway.jar" );
注:其中的from函数中的参数是已经打包好的jar包的绝对路径,to函数中的参数为加密后的jar文件的输出绝对路径;
use函数的参数是加密的密码;
include函数的参数为指定需要加密的class文件
exclude函数为加密时,需要排除的一些静态文件
3)在编译环境中安装GO环境,具体方法可以网上搜索。
4)在输出jar包的目录中有一个xjar.go的文件,用cmd命令行进入到当前目录执行:build go xjar.go
5)windows环境编译完后可得到一个xjar.exe 文件,linux环境的执行脚本问xjar文件;具体可参考:
https://github.com/core-lib/xjar中的方法
6)执行程序启动命令,启动程序。
注意:生成的xjar.exe文件或者linux下的xjar文件,需要与启动脚本放同一目录;
例如:启动本地加密后的jar包:
正常执行启动命令:../boot/Test.jar --spring.config.location=../config/ --safetyuser.isEnableAnsi=false
加密之后的程序启动命令:
C:/Users/Laptop/Desktop/test/Myproject/bin/xjar java -jar ../boot/Test.jar --spring.config.location=../config/ --safetyuser.isEnableAnsi=false
即可启动程序。
注意:加密时所使用的jdk的版本,与启动时所使用的jdk版本应保持一至,否则启动会报如下错误:Exception in thread "main" java.lang.RuntimeException: java.lang.ClassCastException: jdk.internal.loader.ClassLoaders$AppClassLoader (in module: java.base) cannot be cast to java.net.URLClassLoader (in module: java.base)
若出现以上问题,将加密时使用的JDK指定为启动JDK,具体如下:
C:/Users/Laptop/Desktop/test/Myproject/bin/xjar C:/ProgramFile/java/jdk_1.8_0.161/bin/java -jar ../boot/Test.jar --spring.config.location=../config/ --safetyuser.isEnableAnsi=false
加黑部分为JDK的安装目录。
java代码禁止反编译_Java代码防止反编译相关推荐
- java代码块执行顺序_JAVA代码块执行顺序分析测试
在实际的工作过程中,几乎从没用过JAVA的代码块.不过既然做了这方面的学习与测试,就索性记录下来防止忘记.同一个招式,圣斗士是不会学习第二遍的... 首先,上代码: public class Code ...
- java 静态 编译_Java中的动态和静态编译实例详解
Java中的动态和静态编译实例详解 首先,我们来说说动态和静态编译的问题. Q: java和javascript有什么区别? 总结了一下:有以下几点吧: 1.首先从运行环境来说java代码是在JVM上 ...
- .so文件反编译_java加密防止反编译-VirboxProtector
Virbox Protector Java版 VBP 支持对 Java 的 JAR 包.WAR 包进行保护.通过加密 Java 中每个方法的字节码防止反编译,操作简单,运行环境易部署,支持当前主流的 ...
- java 如何转化成机器指令_Java代码到底是如何编译成机器指令的
白衣染霜花 编译器把一种语言规范转化为另一种语言规范的这个过程需要哪些步骤?回答这个问题需要参照<编译原理>,总结过程如下: 1)词法分析:读取源代码,一个字节一个字节的读进 ...
- java代码解决的问题_java代码规范问题及解决方案
java代码规范问题总结 1.没有总是检查ResultSet结果对象 解决方案是通过if判断ResultSet结果是有有元素,常用条件是ResultSet结果的next,previous,first, ...
- 在线运行java代码并得到结果_Java代码是如何运行的?
作为一名Java程序员,你应该知道Java有很多种运行方式.比如说可以在开发工具中运行,可以双击jar包运行,可以在网页端运行.当然这些运行方式都离不开JRE「也就是java运行时环境」. 实际上, ...
- java ip加密如何访问_java代码中如何实现http访问
作者:释怀Na 出自:CSDN 原文:blog.csdn.net/qq_35906921/article/details/98076258 java代码中如何实现http访问 大概的实现就是 请求ht ...
- java 中组合与复用_Java 代码复用(组合与继承)
java中的类都是围绕着类进行的.可以通过创建新类来复用代码,而不必从头编写.可以使用别人已经开发并调试好的类.此方法使用的窍门在于使用类而不破坏现有的程序代码.达到这一目的的方法有两种: 第一种方法 ...
- java css网页布局实例_java代码例子
JAVA 类名.方法名(这里面写的是什么)能不能写个代要是类名直接调用的方法,那这个方法就是静态的(static)方法,是不用new出新对象实例就可以直接调用的方法.看下面例子: class A{ p ...
- java如何添加自定义的图片_java代码将图片加上自定义水印 -4
java代码将图片加上自定义水印,然后生成了新的图片 import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; ...
最新文章
- 交通优化需求下 智能交通已达千亿市场
- 万字长文 | 美团王慧文,王兴14年的带刀护卫
- html js 动态表格数据,HTML+JS动态表格
- 【LuoguP3241】[HNOI2015] 开店
- [转载] 微服务安全和治理
- com/fasterxml/jackson/core/exc/InputCoercionException
- volatile关键字和Java线程安全问题
- 小米手机如何关闭悬浮球
- elasticsearch docker无法挂载_Docker 容器监控方案怎么选?看看这套开源方案
- IP地址和子网划分学习笔记之《预备知识:进制计数》
- 针对binlog MIXED格式对表的增删改统计分析
- Knx ip协议和Java实现
- 前端 - 实习一个月总结
- Android开发入门前准备
- 帝国时代2决定版服务器维护,帝国时代2决定版闪退问题解决方法
- macbook android 屏幕共享,苹果设备小技巧:iPhone,iPad,Mac进行屏幕共享和远程控制...
- 一文读懂C++虚函数的内存模型
- jQuery中常需引用的jquery.min.js文件的内容
- 心理学实验程序编程(python)
- 适用于K700的java模拟器的GPS现在没??