将java包装成exe

特点:将jar包装成可执行文件,便于使用,但对java程序没有任何保护。

不要以为生成了exe就和普通可执行文件效果一样了。这些包装成exe的程序运行时都会将jar文件释放到临时目录,很容易获取。

常用的工具有exe4j、jsmooth、NativeJ等等。jsmooth生成的exe运行时临时目录在exe所在目录中或是用户临时目录

中;exe4j生成的exe运行时临时目录在用户临时目录中;NativeJ生成的exe直接用winrar打开,然后用zip格式修复成一个jar文

件,就得到了原文件。如果只是为了使用和发布方便,不需要保护java代码,使用这些工具是很好的选择。

java混淆器

特点:使用一种或多种处理方式将class文件、java源代码进行混淆处理后生成新的class,使混淆后的代码不易被反编译,而反编译后的代码难以阅

读和理解。

这类混淆器工具很多,而且也很有成效。

缺点:虽然混淆的代码反编译后不易读懂,但对于有经验的人或是多花些时间,还是能找到或计算出你代码中隐藏的敏感内容,而且在很多应用中不是全部代码都能

混淆的,往往一些关键的库、类名、方法名、变量名等因使用要求的限制反而还不能混淆。

隔离java程序到服务端

特点:把java程序放到服务端,让用户不能访问到class文件和相关配套文件,客户端只通过接口访问。

这种方式在客户/服务模式的应用中能较好地保护java代码。

缺点是:必须是客户/服务模式,这种特点限制了此种方式的使用范围;客户端因为逻辑的暴露始终是较为薄弱的环节,所以访问接口时一般都需要安全性认证。

java加密保护

特点:自定义ClassLoader,将class文件和相关文件加密,运行时由此ClassLoader解密相关文件并装载类,要起到保护作用必须自定

义本地代码执行器将自定义ClassLoader和加密解密的相关类和配套文件也保护起来。

此种方式能很有效地保护java代码。

缺点:可以通过替换JRE包中与类装载相关的java类或虚拟机动态库截获java字节码。

jar2exe属于这类工具。

提前编译技术(AOT)

特点:将java代码静态编译成本地机器码,脱离通用JRE。

此种方式能够非常有效地保护java代码,且程序启动比通用JVM快一点。

具有代表性的是GNU的gcj,可以做到对java代码完全提前编译,但gcj存在诸多局限性,如:对JRE

5不能完整支持、不支持JRE 6及以后的版本。

由于java平台的复杂性,做到能及时支持最新java版本和JRE的完全提前编译是非常困难的,所以这类工具往往采取灵活方式,该用即时编译的地方还是

要用,成为提前编译和即时编译的混合体。

缺点:由于与通用JRE的差异和java运用中的复杂性,并非java程序中的所有jar都能得到完全的保护;只能使用此种工具提供的一个运行环境,如果

工具更新滞后或你需要特定版本的JRE,有可能得不到此种工具的支持。

Excelsior JET属于这类工具。

使用jni方式保护

特点:将敏感的方法和数据通过jni方式处理。

此种方式和“隔离java程序到服务端”有些类似,可以看作把需要保护的代码和数据“隔离”到动态库中,不同的是可以在单机程序中运用。

缺点和上述“隔离java程序到服务端”类似。

不脱离JRE的综合方式保护

特点:非提前编译,不脱离JRE,采用多种软保护方式,从多方面防止java程序被窃取。

此种方式由于采取了多种保护措施,比如自定义执行器和装载器、加密、JNI、安全性检测、生成可执行文件等等,使保护力度大大增强,同样能够非常有效地保

护java代码。

缺点:由于jar文件存在方式的改变和java运用中的复杂性,并非java程序中的所有jar都能得到完全的保护;很有可能并不支持所有的JRE版本。

JXMaker属于此类工具。

用加密锁硬件保护

特点:使用与硬件相关的专用程序将java虚拟机启动程序加壳,将虚拟机配套文件和java程序加密,启动的是加壳程序,由加壳程序建立一个与硬件相关的

受保护的运行环境,为了加强安全性可以和加密锁内植入的程序互动。

此种方式与以上“不脱离JRE的综合方式保护”相似,只是使用了专用硬件设备,也能很好地保护java代码。

缺点:有人认为加密锁用户使用上不太方便,且每个安装需要附带一个。

java run_javarun相关推荐

  1. springboot实现SSE服务端主动向客户端推送数据,java服务端向客户端推送数据,kotlin模拟客户端向服务端推送数据

    SSE服务端推送 服务器向浏览器推送信息,除了 WebSocket,还有一种方法:Server-Sent Events(以下简称 SSE).本文介绍它的用法. 在很多业务场景中,会涉及到服务端向客户端 ...

  2. Java 获取当前时间之后的第一个周几,java获取当前日期的下一个周几

    Java 获取当前时间之后的第一个周几,java获取当前日期的下一个周几 //获得入参的日期 Calendar cd = Calendar.getInstance(); cd.setTime(date ...

  3. 在k8s中使用gradle构建java web项目镜像Dockerfile

    在k8s中使用gradle构建java web项目镜像Dockerfile FROM gradle:6-jdk8 AS build COPY --chown=gradle:gradle . /home ...

  4. Java | kotlin 手动注入bean,解决lateinit property loginService has not been initialized异常

    kotlin.UninitializedPropertyAccessException: lateinit property loginService has not been initialized ...

  5. SpringBoot项目使用nacos,kotlin使用nacos,java项目使用nacos,gradle项目使用nacos,maven项目使用nacos

    SpringBoot项目使用nacos kotlin demo见Gitte 一.引入依赖 提示:这里推荐使用2.2.3版本,springboot与nacos的依赖需要版本相同,否则会报错. maven ...

  6. OpenAPI使用(swagger3),Kotlin使用swagger3,Java使用swagger3,gradle、Maven使用swagger3

    OpenAPI使用(swagger3) demo见Gitte 一.背景及名词解释 OpenAPI是规范的正式名称.规范的开发工作于2015年启动,当时SmartBear(负责Swagger工具开发的公 ...

  7. Gradle错误提示:Java home supplied via ‘xxx.xxx.xxx‘ is invalid

    Gradle错误提示:Java home supplied via 'org.gradle.java.home' is invalid 描述:在使用idea采用gradle进行依赖的管理功能,当想切换 ...

  8. 查看Hotspot源码,查看java各个版本源码的网站,如何查看jdk源码

    java开发必知必会之看源码,而看源码的第一步则是找到源码

  9. java基本类型转换,随记

    java基本类型转换: double double 转 long double random = Math.round(Math.random()*10000); long l = new Doubl ...

最新文章

  1. python自动华 (十四)
  2. 在腾讯云上创建您的SQL Cluster(3)
  3. 学python买什么书好-学python3什么书好
  4. 同盾科技完成 7280 万美元 C 轮融资
  5. studio项目上传svn服务器,SVN在AndroidStudio中的使用(一),SVN安装配置和项目检出更新...
  6. mooc构建结构数组的笔记
  7. vim 命令_Vim 操作命令手册
  8. python网络运维案例代码库_OLDboy-python第八期运维教程
  9. [XML-Jsoup]Jsoup_对象的使用(Jsoup工具类,Document,Elements,Element,Node)
  10. 加速Java应用开发速度3——单元/集成测试+CI
  11. 苹果经典复古彩虹Logo回归?这效果图 看了只想告辞!
  12. 服务器系统设计流程,图书馆管理系统设计(含业务流程图).doc
  13. 你不知道的 Web 性能优化 | 原力计划
  14. 题目1512:用两个栈实现队列
  15. java p39课后答案_面向对象程序设计(JAVA)答案
  16. java班级管理系统代码_基于jsp的班级管理系统-JavaEE实现班级管理系统 - java项目源码...
  17. knowledge transfer
  18. win7 计算机打不开搜狗,Win7电脑搜狗输入法不见了如何解决?
  19. FineReport制作报表讲解(基本操作以及网络报表)
  20. mysql insert详解_Mysql学习Mysql INSERT INTO语句用法详解

热门文章

  1. xgboost不能解决哪些问题?为什么?进而说明树模型有哪些缺陷?那种模型能够树模型的这种缺陷?
  2. 创建c语言编译错误,创建C语言项目时,无法编译成*.exe文件,提示系统找不到指定的文件...
  3. 如何用c语言打出 * * * * * * * * * * * * *?
  4. 赵方庆 北京生科院Computational strategies in exploring circular RNAs 探索环状rna的计算策略
  5. Linux下boost库的编译、安装详解
  6. android sd卡列目录文件_Android正确获取SD卡目录及使用SD卡目录
  7. TensorFlow基础10-(误差反向传播算法以及实现多层神经网络)
  8. sql基础教程和mysql基础教程_书评「SQL基础教程(第2版)」| 你应该知道的基础知识点梳理·上...
  9. 3.Git的基本操作
  10. 【自然语言处理】N-最短路径法进行中文分词