<b>Java程序的反加密</b>[Java编程]
本文“<b>Java程序的反加密</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
首先我们来看看Java程序的反加密,也就是普通所说的Crack历程,只有懂得了这个历程,我们才能有效的对我们的程序举行加密.
普通我们得到的Java程序的Crack包有两种,一种属于KeyGen(注册码生成器)、一种属于替换改正;
我们先看第一种,当我们找到一个利用程序的KeyGen的时刻我们老是很敬佩那个做出KeyGen的人,认为他很利害,但是你细心解析一下,为什么他能做出KeyGen呢?只有
他对这个Java程序的加密算法理解的非常清楚;这种人有哪些呢?一个是那个公司里面的人,那不大概,除非内讧,还又呢,就是猜想,反推,这个大概吗?呵呵,更不大概,那这个算法从那边来呢?呵呵,常常泄露奥秘的就是奥秘本身……回过头来想想,Java利用程序怎么知道你输入的注册码能否精确呢?呵呵,那你就该从利用程序动手……
得到的它的加密算法,自然KeyGen就不在话下了……(但是这也有列外,假如它是用的公钥秘钥对加密的,就没有办法喽,只能用第二种办法.)
这种办法只合适对付只要一个注册号,别的什么都不要的情形,经典代表Borland JBuilder & Optimizeit Suite
再看第二种,为什么要用替换改正?我们是改正了那部份呢?不用想,必定是License考证的部份,为什么我们不像上面的办法那样找加密算法呢?缘由有两种:(1)利用上面的办法搞不定;(2)Java程序不但要Key,还有其他的License配置;碰到这种情形,我们只要找到用于License考证的类,举行改正替换就行了.
这种办法利用于任何情形,经典代表BEA WebLogic
经过上面的解析,我们的问题就集合了,关键就是怎么找到用于License考证的部份或加密算法的部份,我们需求3个工具:一个是Sun公司供应的尺度JVM:),一个是你的耐烦和细心:),一个是Jad(经典Java反编译工具).
第一步是定位,这也是最关键的一步,我们这里以Together For JBuilder Edition为例,启动Together,先看看长什么模样?喔,上来就问我要License;Ok,
每关系,退出;找到Together的启动Bat文件,找到它的启动号令:java .....,OK,在Java启动的时刻给一个参数:“ -Xrunhprof:cpu=times”,保存,在启动,还是要
License,退出,这个时刻,我们可以发现,在这个目录下多了一个“java.hprof.txt”文件,翻开一看,就是我要的JVM的Dump文件,好多内容啊,不要紧,渐渐看来.
我们可以瞥见这个文件里面有好多熟习的东西啊:java.*/com.sun.*/javax.*等等,但这个不是我们关心的,我们要的是com.togethersoft.*大概是一些没有包名的zd.d等等.(这里插一句,几近全部的Java利用程序城市混合的,其实混合的原理也很简单,我们背面再说.)先找找有没有License有关的,Serach一下,嘿嘿,公然,474行:com.togethersoft.together.impl.ide.license.LicenseSetup.execute([DashoPro-V2-050200]:Unknown line),Ok上那堆classpath中的Jar包里面找一下吧(举荐用WinRAR),找到了之后用Jad反编译,一看,这个没有混合,但是用了一个zae的类,这个看名字就知道混合过了,先不睬它,再看看下面一句IdeLicenseAccess.setLicense(zae1),Ok接着找到IdeLicenseAccess,哈哈,就这点名堂,全部的License考证都是走的这个类,面向对象的思惟不错,呵呵:)
定位定完了,接下来的事情就是按猜想的办法改正这两个类,屏蔽掉LicenseSetup里面execute办法的实际内容,改正IdeLicenseAccess,让多有的考证都返回true,然后编译,替换;不要高兴太早,这还没有完呢,要有责任心!!启动Together,公然,这下不要License了,有启动画面,进去了,但是一片灰色,怎么回事,一看掌握台,一堆错,不要紧,就怕不出错,查找本源,还有一个IdeLicenseUtil类出了问题,再反编译,改正,替换;这下搞定了.再启动,测试一下,OK.
就这样,一个Java利用程序搞定了.看看其实也很简单.
再来说说混合,大家大概都知道没有经过混合的Java的Class反编译回来连办法和变量的名字都不会变,这是什么缘由呢?这就要追述到Class文件的构造了,简单来说,Class文件种包含又一个常数池(constant pool)这个里面就存放了变量和办法的名称等一下和Class相关的东西,我们普通所说的混合就是用一种工具把这个常数池里面的东东弄的胡涂一点,这样就可以骗过反编译器和你,呵呵:)这就是为什么有时刻反编译回来的东西编译不过去的缘由.
以上是“<b>Java程序的反加密</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |