仓酷云
标题:
MSSQL教程之怎样无效避免Java程序源码被人窃看?
[打印本页]
作者:
爱飞
时间:
2015-1-16 22:17
标题:
MSSQL教程之怎样无效避免Java程序源码被人窃看?
对于insert操作,只需要把event_type改成DELETE_ROWS_EVENT;对于delete操作,改成WRITE_ROWS_EVENTJava程序的源代码很简单被他人偷看,只需有一个反编译器,任何人都能够剖析他人的代码。本文会商怎样在不修正原有程序的情形下,经由过程加密手艺回护源代码。
1、为何要加密?
关于传统的C或C++之类的言语来讲,要在Web上回护源代码是很简单的,只需不公布它就能够。遗憾的是,Java程序的源代码很简单被他人偷看。只需有一个反编译器,任何人都能够剖析他人的代码。Java的天真性使得源代码很简单被夺取,但与此同时,它也使经由过程加密回护代码变得绝对简单,我们独一必要懂得的就是Java的ClassLoader工具。固然,在加密过程当中,有关JavaCryptographyExtension(JCE)的常识也是必不成少的。
有几种手艺能够“含混”Java类文件,使得反编译器处置类文件的效果年夜打扣头。但是,修正反编译器使之可以处置这些经由含混处置的类文件并非甚么难事,以是不克不及复杂地依附含混手艺来包管源代码的平安。
我们能够用盛行的加密工具加密使用,好比PGP(PrettyGoodPrivacy)或GPG(GNUPrivacyGuard)。这时候,终极用户在运转使用之前必需先辈行解密。但解密以后,终极用户就有了一份不加密的类文件,这和事前不举行加密没有甚么不同。
Java运转古装进字节码的机制隐含地意味着能够对字节码举行修正。JVM每次装进类文件时都必要一个称为ClassLoader的工具,这个工具卖力把新的类装进正在运转的JVM。JVM给ClassLoader一个包括了待装进类(好比java.lang.Object)名字的字符串,然后由ClassLoader卖力找到类文件,装进原始数据,并把它转换成一个Class工具。
我们能够经由过程定制ClassLoader,在类文件实行之前修正它。这类手艺的使用十分普遍??在这里,它的用处是在类文件装进之时举行解密,因而能够当作是一种立即解密器。因为解密后的字节码文件永久不会保留到文件体系,以是保密者很可贵到解密后的代码。
因为把原始字节码转换成Class工具的历程完整由体系卖力,以是创立定制ClassLoader工具实在其实不坚苦,只需先取得原始数据,接着就能够举行包括解密在内的任何转换。
Java2在必定水平上简化了定制ClassLoader的构建。在Java2中,loadClass的缺省完成仍然卖力处置一切必须的步骤,但为了顾及各类定制的类装进历程,它还挪用一个新的findClass办法。
这为我们编写定制的ClassLoader供应了一条捷径,削减了贫苦:只需掩盖findClass,而不是掩盖loadClass。这类办法制止了反复一切装进器必须实行的大众步骤,由于这统统由loadClass卖力。
不外,本文的定制ClassLoader其实不利用这类办法。缘故原由很复杂。假如由默许的ClassLoader先寻觅经由加密的类文件,它能够找到;但因为类文件已加密,以是它不会承认这个类文件,装进历程将失利。因而,我们必需本人完成loadClass,略微增添了一些事情量。
2、定制类装进器
每个运转着的JVM已具有一个ClassLoader。这个默许的ClassLoader依据CLASSPATH情况变量的值,在当地文件体系中寻觅符合的字节码文件。
使用定制ClassLoader请求对这个历程有较为深切的熟悉。我们起首必需创立一个定制ClassLoader类的实例,然后显式地请求它装进别的一个类。这就强迫JVM把该类和一切它所必要的类联系关系到定制的ClassLoader。Listing1显现了怎样用定制ClassLoader装进类文件。
【Listing1:使用定制的ClassLoader装进类文件】
以下为援用的内容:
//起首创立一个ClassLoader工具
ClassLoadermyClassLoader=newmyClassLoader();
//使用定制ClassLoader工具装进类文件
//并把它转换成Class工具
ClassmyClass=myClassLoader.loadClass("mypackage.MyClass");
//最初,创立该类的一个实例
ObjectnewInstance=myClass.newInstance();
//注重,MyClass所必要的一切其他类,都将经由过程
//定制的ClassLoader主动装进
如前所述,定制ClassLoader只需先猎取类文件的数据,然后把字节码传送给运转时体系,由后者完成余下的义务。
ClassLoader有几个主要的办法。创立定制的ClassLoader时,我们只需掩盖个中的一个,即loadClass,供应猎取原始类文件数据的代码。这个办法有两个参数:类的名字,和一个暗示JVM是不是请求剖析类名字的标志(便是否同古装进有依附干系的类)。假如这个标志是true,我们只需在前往JVM之前挪用resolveClass。
【Listing2:ClassLoader.loadClass()的一个复杂完成】
以下为援用的内容:
publicClassloadClass(Stringname,booleanresolve)
throwsClassNotFoundException{
try{
//我们要创立的Class工具
Classclasz=null;
//必须的步骤1:假如类已在体系缓冲当中,
//我们不用再次装进它
clasz=findLoadedClass(name);
if(clasz!=null)
returnclasz;
//上面是定制部分
byteclassData[]=/*经由过程某种办法猎取字节码数据*/;
if(classData!=null){
//乐成读取字节码数据,如今把它转换成一个Class工具
clasz=defineClass(name,classData,0,classData.length);
}
//必须的步骤2:假如下面没有乐成,
//我们实验用默许的ClassLoader装进它
if(clasz==null)
clasz=findSystemClass(name);
//必须的步骤3:若有需要,则装进相干的类
if(resolve&&clasz!=null)
resolveClass(clasz);
//把类前往给挪用者
returnclasz;
}catch(IOExceptionie){
thrownewClassNotFoundException(ie.toString());
}catch(GeneralSecurityExceptiongse){
thrownewClassNotFoundException(gse.toString());
}
}
<p>
共3页:上一页1[2][3]下一页
CSV逻辑上由逗号分割数据的存储引擎
作者:
飘飘悠悠
时间:
2015-1-19 06:52
比如,MicrosoftSQLServer2008的某一个版本可以满足现在的这个业务的需要,而且价格还比Oracle11g要便宜,那么这一产品就是适合的。
作者:
若相依
时间:
2015-2-5 17:09
你可以简单地认为适合的就是好,不适合就是不好。
作者:
乐观
时间:
2015-2-13 03:09
很多书籍啊,不过个人认为看书太慢,还不如自己学。多做实际的东西,就会遇到很多问题,网上搜下解决问题。不断重复这个过程,在配合sql的F1功能。
作者:
简单生活
时间:
2015-3-3 13:25
总感觉自己还是不会SQL
作者:
精灵巫婆
时间:
2015-3-11 11:25
比如日志传送、比如集群。。。
作者:
飘灵儿
时间:
2015-3-18 13:09
原来公司用过MYSQL自己也只是建个表写个SQL
作者:
变相怪杰
时间:
2015-3-26 02:21
如果,某一版本可以提供强大的并发响应,但是没有Oracle的相应版本稳定,或者价格较贵,那么,它就是不适合的。
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2