【转】如何保护Java代码

【转】如何保护Java代码,第1张

以下从技术角度就常见的保护措施 和常用工具来看看如何有效保护java代码:1 将java包装成exe特点:将jar包装成可执行文件,便于使用,但对java程序没有任何保护。不要以为生成了exe就和普通可执行文件效果一样了。这些包装成exe的程序运行时都会将jar文件释放到临时目录,很容易获取。常用的工具有exe4j、jsmooth、NativeJ等等。jsmooth生成的exe运行时临时目录在exe所在目录中或是用户临时目录 中;exe4j生成的exe运行时临时目录在用户临时目录中;NativeJ生成的exe直接用winrar打开,然后用zip格式修复成一个jar文件,就得到了原文件。如果只是为了使用和发布方便,不需要保护java代码,使用这些工具是很好的选择。2 java混淆器特点:使用一种或多种处理方式将class文件、java源代码进行混淆处理后生成新的class,使混淆后的代码不易被反编译,而反编译后的代码难以阅 读和理解。这类混淆器工具很多,而且也很有成效。缺点:虽然混淆的代码反编译后不易读懂,但对于有经验的人或是多花些时间,还是能找到或计算出你代码中隐藏的敏感内容,而且在很多应用中不是全部代码都能混淆的,往往一些关键的库、类名、方法名、变量名等因使用要求的限制反而还不能混淆。3 隔离java程序到服务端特点:把java程序放到服务端,让用户不能访问到class文件和相关配套文件,客户端只通过接口访问。这种方式在客户/服务模式的应用中能较好地保护java代码。缺点是:必须是客户/服务模式,这种特点限制了此种方式的使用范围;客户端因为逻辑的暴露始终是较为薄弱的环节,所以访问接口时一般都需要安全性认证。4 java加密保护特点:自定义ClassLoader,将class文件和相关文件加密,运行时由此ClassLoader解密相关文件并装载类,要起到保护作用必须自定 义本地代码执行器将自定义ClassLoader和加密解密的相关类和配套文件也保护起来。此种方式能很有效地保护java代码。缺点:可以通过替换JRE包中与类装载相关的java类或虚拟机动态库截获java字节码。 jar2exe属于这类工具。5 提前编译技术(AOT)特点:将java代码静态编译成本地机器码,脱离通用JRE。此种方式能够非常有效地保护java代码,且程序启动比通用JVM快一点。具有代表性的是GNU的gcj,可以做到对java代码完全提前编译,但gcj存在诸多局限性,如:对JRE 5不能完整支持、不支持JRE 6及以后的版本。由于java平台的复杂性,做到能及时支持最新java版本和JRE的完全提前编译是非常困难的,所以这类工具往往采取灵活方式,该用即时编译的地方还是 要用,成为提前编译和即时编译的混合体。缺点:由于与通用JRE的差异和java运用中的复杂性,并非java程序中的所有jar都能得到完全的保护;只能使用此种工具提供的一个运行环境,如果工具更新滞后或你需要特定版本的JRE,有可能得不到此种工具的支持。 Excelsior JET属于这类工具。6 使用jni方式保护特点:将敏感的方法和数据通过jni方式处理。此种方式和“隔离java程序到服务端”有些类似,可以看作把需要保护的代码和数据“隔离”到动态库中,不同的是可以在单机程序中运用。缺点和上述“隔离java程序到服务端”类似。7 不脱离JRE的综合方式保护特点:非提前编译,不脱离JRE,采用多种软保护方式,从多方面防止java程序被窃取。此种方式由于采取了多种保护措施,比如自定义执行器和装载器、加密、JNI、安全性检测、生成可执行文件等等,使保护力度大大增强,同样能够非常有效地保护java代码。缺点:由于jar文件存在方式的改变和java运用中的复杂性,并非java程序中的所有jar都能得到完全的保护;很有可能并不支持所有的JRE版本。 JXMaker属于此类工具。8 用加密锁硬件保护特点:使用与硬件相关的专用程序将java虚拟机启动程序加壳,将虚拟机配套文件和java程序加密,启动的是加壳程序,由加壳程序建立一个与硬件相关的 受保护的运行环境,为了加强安全性可以和加密锁内植入的程序互动。此种方式与以上“不脱离JRE的综合方式保护”相似,只是使用了专用硬件设备,也能很好地保护java代码。缺点:有人认为加密锁用户使用上不太方便,且每个安装需要附带一个。从以上描述中我们可以看出:1 各种保护方式都有其优缺点,应根据实际选用2 要更好地保护java代码应该使用综合的保护措施3 单机环境中要真正有效保护java代码,必须要有本地代码程序配合当然,安全都是相对的,一方面看你的保护措施和使用的工具能达到的程度,一方面看黑客的意愿和能力,不能只从技术上保护知识产权。总之,在java 代码保护方面可以采取各种可能的方式,不可拘泥于那些条条框框。

Java是一种跨平台的 解释型语言 Java 源代码编译中间 字节码 存储于class文件中 Class文件是一种字节码形式的中间代码 该字节码中包括了很多源代码的信息 例如变量名 方法名等 因此 Java中间代码的反编译就变得非常容易 目前市场上有许多免费的 商用的反编译软件 都能够生成高质量的反编译后的源代码 所以 对开发人员来说 如何保护Java程序就变成了一个非常重要的挑战 本文首先讨论了保护Java程序的基本方法 然后对代码混淆问题进行深入研究 最后结合一个实际的应用程序 分析如何在实践中保护Java程序 反编译成为保护Java程序的最大挑战 通常C C++等编程语言开发的程序都被编译成目标代码 这些目标代码都是本机器的二进制可执行代码 通常所有的源文件被编译 链接成一个可执行文件 在这些可执行文件中 编译器删除了程序中的变量名称 方法名称等信息 这些信息往往是由内存地址表示 例如如果需要使用一个变量 往往是通过这个变量的地址来访问的 因此 反编译这些本地的目标代码就是非常困难的 Java语言的出现 使得反编译变得非常容易而有效 原因如下 由于跨平台的需求 Java的指令集比较简单而通用 较容易得出程序的语义信息 Java编译器将每一个类编译成一个单独的文件 这也简化了反编译的工作 Java 的Class文件中 仍然保留所有的方法名称 变量名称 并且通过这些名称来访问变量和方法 这些符号往往带有许多语义信息 由于Java程序自身的特点 对于不经过处理的Java程序反编译的效果非常好 目前 市场上有许多Java的反编译工具 有免费的 也有商业使用的 还有的是开放源代码的 这些工具的反编译速度和效果都非常不错 好的反编译软件 能够反编译出非常接近源代码的程序 因此 通过反编译器 黑客能够对这些程序进行更改 或者复用其中的程序 因此 如何保护Java程序不被反编译 是非常重要的一个问题 常用的保护技术 由于Java字节码的抽象级别较高 因此它们较容易被反编译 本节介绍了几种常用的方法 用于保护Java字节码不被反编译 通常 这些方法不能够绝对防止程序被反编译 而是加大反编译的难度而已 因为这些方法都有自己的使用环境和弱点 隔离Java程序 最简单的方法就是让用户不能够访问到Java Class程序 这种方法是最根本的方法 具体实现有多种方式 例如 开发人员可以将关键的Java Class放在服务器端 客户端通过访问服务器的相关接口来获得服务 而不是直接访问Class文件 这样黑客就没有办法反编译Class文件 目前 通过接口提供服务的标准和协议也越来越多 例如 >

以下介绍的课程主要针对零基础大数据工程师每个阶段进行通俗易懂简易介绍,方面大家更好的了解大数据学习课程。课程框架是科多大数据的零基础大数据工程师课程。

一、第一阶段:静态网页基础(HTMLCSS)

1难易程度:一颗星

2课时量(技术知识点阶段项目任务综合能力)

3主要技术包括:html常用标签、CSS常见布局、样式、定位等、静态页面的设计制作方式等

4描述如下:

从技术层面来说,该阶段使用的技术代码很简单、易于学习、方便理解。从后期课程层来说,因为我们重点是大数据,但前期需要锻炼编程技术与思维。经过我们多年开发和授课的项目经理分析,满足这两点,目前市场上最好理解和掌握的技术是J2EE,但J2EE又离不开页面技术。所以第一阶段我们的重点是页面技术。采用市场上主流的HTMlCSS。

二、第二阶段:JavaSEJavaWeb

1难易程度:两颗星

2课时量(技术知识点阶段项目任务综合能力)

3主要技术包括:java基础语法、java面向对象(类、对象、封装、继承、多态、抽象类、接口、常见类、内部类、常见修饰符等)、异常、集合、文件、IO、MYSQL(基本SQL语句 *** 作、多表查询、子查询、存储过程、事务、分布式事务)JDBC、线程、反射、Socket编程、枚举、泛型、设计模式

4描述如下:

称为Java基础,由浅入深的技术点、真实商业项目模块分析、多种存储方式的设计

与实现。该阶段是前四个阶段最最重要的阶段,因为后面所有阶段的都要基于此阶段,也是学习大数据紧密度最高的阶段。本阶段将第一次接触团队开发、产出具有前后台(第一阶段技术第二阶段的技术综合应用)的真实项目。

三、第三阶段:前端框架

1难易程序:两星

2课时量(技术知识点阶段项目任务综合能力):64课时

3主要技术包括:Java、Jquery、注解反射一起使用,XML以及XML解析、解析dom4j、jxab、jdk80新特性、SVN、Maven、easyui

4描述如下:

前两个阶段的基础上化静为动,可以实现让我们网页内容更加的丰富,当然如果从市场人员层面来说,有专业的前端设计人员,我们设计本阶段的目标在于前端的技术可以更直观的锻炼人的思维和设计能力。同时我们也将第二阶段的高级特性融入到本阶段。使学习者更上一层楼。

四、第四阶段:企业级开发框架

1难易程序:三颗星

2课时量(技术知识点阶段项目任务综合能力)

3主要技术包括:Hibernate、Spring、SpringMVC、log4jslf4j整合、myBatis、struts2、Shiro、redis、流程引擎activity,爬虫技术nutch,lucene,、Tomcat集群和热备、MySQL读写分离

4描述如下:

如果将整个JAVA课程比作一个糕点店,那前面三个阶段可以做出一个武大郎烧饼(因为是纯手工-太麻烦),而学习框架是可以开一个星巴克(高科技设备-省时省力)。从J2EE开发工程师的任职要求来说,该阶段所用到的技术是必须掌握,而我们所授的课程是高于市场(市场上主流三大框架,我们进行七大框架技术传授)、而且有真实的商业项目驱动。需求文档、概要设计、详细设计、源码测试、部署、安装手册等都会进行讲解。

五、第五阶段:初识大数据

1难易程度:三颗星

2课时量(技术知识点阶段项目任务综合能力)

3主要技术包括:大数据前篇(什么是大数据,应用场景,如何学习大数据库,虚拟机概念和安装等)、Linux常见命令(文件管理、系统管理、磁盘管理)、LinuxShell编程(SHELL变量、循环控制、应用)、Hadoop入门(Hadoop组成、单机版环境、目录结构、HDFS界面、MR界面、简单的SHELL、java访问hadoop)、HDFS(简介、SHELL、IDEA开发工具使用、全分布式集群搭建)、MapRece应用(中间计算过程、Java *** 作MapRece、程序运行、日志监控)、Hadoop高级应用(YARN框架介绍、配置项与优化、CDH简介、环境搭建)、扩展(MAP端优化,COMBINER使用方法见,TOPK,SQOOP导出,其它虚拟机VM的快照,权限管理命令,AWK与SED命令)

4描述如下:

该阶段设计是为了让新人能够对大数据有一个相对的大概念怎么相对呢在前置课程JAVA的学习过后能够理解程序在单机的电脑上是如何运行的。现在,大数据呢大数据是将程序运行在大规模机器的集群中处理。大数据当然是要处理数据,所以同样,数据的存储从单机存储变为多机器大规模的集群存储。

(你问我什么是集群好,我有一大锅饭,我一个人可以吃完,但是要很久,现在我叫大家一起吃。一个人的时候叫人,人多了呢是不是叫人群啊!)

那么大数据可以初略的分为:大数据存储和大数据处理所以在这个阶段中呢,我们课程设计了大数据的标准:HADOOP大数据的运行呢并不是在咋们经常使用的WINDOWS7或者W10上面,而是现在使用最广泛的系统:LINUX。

六、第六阶段:大数据数据库

1难易程度:四颗星

2课时量(技术知识点阶段项目任务综合能力)

3主要技术包括:Hive入门(Hive简介、Hive使用场景、环境搭建、架构说明、工作机制)、HiveShell编程(建表、查询语句、分区与分桶、索引管理和视图)、Hive高级应用(DISTINCT实现、groupby、join、sql转化原理、java编程、配置和优化)、hbase入门、HbaseSHELL编程(DDL、DML、Java *** 作建表、查询、压缩、过滤器)、细说Hbase模块(REGION、HREGIONSERVER、HMASTER、ZOOKEEPER简介、ZOOKEEPER配置、Hbase与Zookeeper集成)、HBASE高级特性(读写流程、数据模型、模式设计读写热点、优化与配置)

4描述如下:

该阶段设计是为了让大家在理解大数据如何处理大规模的数据的同时。简化咋们的编写程序时间,同时提高读取速度。

怎么简化呢在第一阶段中,如果需要进行复杂的业务关联与数据挖掘,自行编写MR程序是非常繁杂的。所以在这一阶段中我们引入了HIVE,大数据中的数据仓库。这里有一个关键字,数据仓库。我知道你要问我,所以我先说,数据仓库呢用来做数据挖掘分析的,通常是一个超大的数据中心,存储这些数据的呢,一般为ORACLE,DB2,等大型数据库,这些数据库通常用作实时的在线业务。

总之,要基于数据仓库分析数据呢速度是相对较慢的。但是方便在于只要熟悉SQL,学习起来相对简单,而HIVE呢就是这样一种工具,基于大数据的SQL查询工具,这一阶段呢还包括HBASE,它为大数据里面的数据库。纳闷了,不是学了一种叫做HIVE的数据“仓库”了么HIVE是基于MR的所以查询起来相当慢,HBASE呢基于大数据可以做到实时的数据查询。一个主分析,另一个主查询

七、第七阶段:实时数据采集

1难易程序:四颗星

2课时量(技术知识点阶段项目任务综合能力)

3主要技术包括:Flume日志采集,KAFKA入门(消息队列、应用场景、集群搭建)、KAFKA详解(分区、主题、接受者、发送者、与ZOOKEEPER集成、Shell开发、Shell调试)、KAFKA高级使用(java开发、主要配置、优化项目)、数据可视化(图形与图表介绍、CHARTS工具分类、柱状图与饼图、3D图与地图)、STORM入门(设计思想、应用场景、处理过程、集群安装)、STROM开发(STROMMVN开发、编写STORM本地程序)、STORM进阶(java开发、主要配置、优化项目)、KAFKA异步发送与批量发送时效,KAFKA全局消息有序,STORM多并发优化

4描述如下:

前面的阶段数据来源是基于已经存在的大规模数据集来做的,数据处理与分析过后的结果是存在一定延时的,通常处理的数据为前一天的数据。

举例场景:网站防盗链,客户账户异常,实时征信,遇到这些场景基于前一天的数据分析出来过后呢是否太晚了。所以在本阶段中我们引入了实时的数据采集与分析。主要包括了:FLUME实时数据采集,采集的来源支持非常广泛,KAFKA数据数据接收与发送,STORM实时数据处理,数据处理秒级别

八、第八阶段:SPARK数据分析

1难易程序:五颗星

2课时量(技术知识点阶段项目任务综合能力)

3主要技术包括:SCALA入门(数据类型、运算符、控制语句、基础函数)、SCALA进阶(数据结构、类、对象、特质、模式匹配、正则表达式)、SCALA高级使用(高阶函数、科里函数、偏函数、尾迭代、自带高阶函数等)、SPARK入门(环境搭建、基础结构、运行模式)、Spark数据集与编程模型、SPARKSQL、SPARK进阶(DATAFRAME、DATASET、SPARKSTREAMING原理、SPARKSTREAMING支持源、集成KAFKA与SOCKET、编程模型)、SPARK高级编程(Spark-GraphX、Spark-Mllib机器学习)、SPARK高级应用(系统架构、主要配置和性能优化、故障与阶段恢复)、SPARKMLKMEANS算法,SCALA隐式转化高级特性

4描述如下:

同样先说前面的阶段,主要是第一阶段。HADOOP呢在分析速度上基于MR的大规模数据集相对来说还是挺慢的,包括机器学习,人工智能等。而且不适合做迭代计算。SPARK呢在分析上是作为MR的替代产品,怎么替代呢先说他们的运行机制,HADOOP基于磁盘存储分析,而SPARK基于内存分析。我这么说你可能不懂,再形象一点,就像你要坐火车从北京到上海,MR就是绿皮火车,而SPARK是高铁或者磁悬浮。而SPARK呢是基于SCALA语言开发的,当然对SCALA支持最好,所以课程中先学习SCALA开发语言。

在科多大数据课程的设计方面,市面上的职位要求技术,基本全覆盖。而且并不是单纯的为了覆盖职位要求,而是本身课程从前到后就是一个完整的大数据项目流程,一环扣一环。

比如从历史数据的存储,分析(HADOOP,HIVE,HBASE),到实时的数据存储(FLUME,KAFKA),分析(STORM,SPARK),这些在真实的项目中都是相互依赖存在的。

界面思路:

用按钮数组模拟棋盘。

改变按钮的背景标志这个棋盘的格子上是黑棋、白棋、空。同时使用一个二维数组记录棋盘棋子的分布,比如qipan[0][0]=1标示第1行第一列的棋子是黑棋子,乙烯类推。

循环检测是否某行、某列、某斜线上是否已经有五个颜色相同的棋子。

简单的算法就是判断某行、某列、某斜线的妻子数目那个最多。通过2个for循环遍历棋盘。

复杂的算法,你看看下面的参考资料,不过下面这段材料如果看不懂的话,用简单的算法实现了五子棋也是很好的了,^_^

五子棋算法(AI)

任何一种棋类游戏其关键是对当前棋局是否有正确的评分,评分越准确则电脑的AI越高。五子棋游戏也是如此,但在打分之前,我们先扫描

整个棋盘,把每个空位从八个方向上的棋型填入数组gStyle(2, 15, 15, 8, 2),其中第一个下标为1时表示黑棋,为2时表示白棋,第二和第三

个下标表示(x,y),第四个下标表示8个方向,最后一个下标为1时表示棋子数,为2时表示空格数,如:

gStyle(1,2,2,1,1)=3表示与坐标(2,2)在第1个方向上相邻的黑棋棋子数为3

gstyle(1,2,2,1,2)=4表示与坐标(2,2)在第1个方向上的最近的空格数为4

在定义方向时,也应该注意一定的技巧,表示两个相反的方向的数应该差4,在程序中我是这样定义的:

Const DIR_UP = 1

Const DIR_UPRIGHT = 2

Const DIR_RIGHT = 3

Const DIR_RIGHTDOWN = 4

Const DIR_DOWN = 5

Const DIR_DOWNLEFT = 6

Const DIR_LEFT = 7

Const DIR_LEFTUP = 8

这样我们前四个方向可以通过加四得到另一个方向的值。如果你还是不太明白,请看下面的图:

---------

---------

---oo----

-oxxx---

---------

---------

图中的点从标为(4,4),(打的位置是空位),则:

gStyle(2,4,4,1,1)=1在(4,4)点相邻的上方白棋数为1

gStyle(2,4,4,1,2)=2在(4,4)点的上方距上方白棋最近的空格数为2

gStyle(1,4,4,3,1)=2在(4,4)点相邻的右方黑棋数为2

gStyle(1,4,4,3,2)=1在(4,4)点的右方距右方黑棋最近的空格数为3

一旦把所有空点的棋型值填完,我们很容易地得出黑棋水平方向上点(4,4)的价值,由一个冲1(我把有界的棋称为冲)和活2(两边无界的

棋称为活)组成的。对于而白棋在垂直方向上点(4,4)的价值是一个活1,而在/方向也是活1所以,只要我们把该点的对于黑棋和白棋的价值算出

来,然后我们就取棋盘上各个空点的这两个值的和的最大一点作为下棋的点。然而,对各种棋型应该取什么值呢?我们可以先作如下假设:

Fn 表示先手n个棋子的活棋型,如:F4表示先手活四

Fn'表示先手n个棋子的冲棋型,如:F4'表示先手冲四

Ln 表示后手n个棋子的活棋型,如:L3表示后手活三

Ln'表示后手n个棋子的冲棋型,如:L3'表示后手冲三

根据在一行中的棋型分析,得到如下关系:

L1'<=F1'<L2'<=F2'<=L1<F1<L2<F2<L3'<=F3'<L4'<F4'=F4

从这个关系包含了进攻和防守的关系(当然,这个关系是由我定的,你可以自己定义这些关系)。对这些关系再进一步细化,如在一个可下

棋的点,其四个方向上都有活三,也比不上一个冲四,所以我们可以又得到4F3<L4'这个关系,同样,我们还可以得到其它的关系,如:4F2<L3、4L3<F3,这些的关系由于你的定法和我的定法制可能不一样,这样计算机的AI也就不一样,最后我们把分值最小的L1'值定为1,则我们就得

到了下面各种棋型的分值,由C语言表示为:

F[2][5]={{0,2,5,50,16000},{0,10,30,750,16000}};

L[2][5]={{0,1,5,50,3750},{0,10,30,150,4000}};

F数组表示先手,第一个下标为0时表示冲型,第二个下标表示棋子数,则F2'对应F[0][2]L数组表示后手,第一个下标为0时表示冲型,第二

个下标表示棋子数,则L2对应F[1][2]Ok,棋型的分值关系确定好了以后,我们把每一个可下点的四个方向的棋型值相加(包括先手和后手的分

值),最后选择一个最大值,并把这一点作为计算机要下的点就OK了:)。

以上就是关于【转】如何保护Java代码全部的内容,包括:【转】如何保护Java代码、如何保护Java程序、做Java开发都需要学什么怎么学等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10082191.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存