设为首页 加入收藏

TOP

JRebal(原名JavaRebel)破解小记(一)
2014-11-24 02:38:55 来源: 作者: 【 】 浏览:1
Tags:JRebal 原名 JavaRebel 破解 小记

JavaRebel是一个工具,主要是用于热加载,比如说在Tomcat之类的应用服务器中,更新了class或者某些资源文件,使用了JRebel之后,就不需要重新启动应用服务器。这对于开发的人来说,是特别方便的。当然Java也提供了HotSpot的JVM,但是如果你修改的类中有方法名称变动的话,HotSpot就无能为力了,必须要重要启动应用服务器。
这里有一点先声明一下,本文只是破解仅限于学习和研究使用,勿用于其他用途。
第一步当然是下载JRebel
下载地址:http://www.zeroturnaround.com/jrebel/download/
下载下来的是一个Zip压缩包,打开之后会发现一个jrebel.jar,这就是其最重要的运行包了。其他都是一些文档和插件。
第二步,是进行反编译。
我推荐一个工具:http://java.decompiler.free.fr/,分成Eclipse插件和单独的运行程序两种,我下载的是单独的运行程序,只有一个绿色的exe文件,点击后直接运行。
看了一下,最显眼的自然是UserLicense类了。



然后就找到了调用getLicense方法的jS类(名字很奇怪,因为是混淆过的原因,jS类反编译后的源码附在最后面了)
这个类中很明确地显示了License的获取方法。
首先是:jreble.lic文件,用winrar打开jrebel.jar就看到这个文件了。
从源码来看,UserLicense是用ObjectInputStream通过ReadObject得到了。
然后,属性license里面其实是一个Map,用ObjectInputStream从ByteArrayInputSteam中通过ReadObject得到。于是写了下面这样的测试代码




Concole中果然如我所愿地,把Map里的值都打印出来了。到了这一步,剩下的就简单了,把Map里面的validateUntil属性的日期换一下,重新生成一个License文件就行了。
把上面的代码修改一下,很容易地就生成了新的License文件。
原来License里面的试用期只有一个月,比如,我是2009-10-15下载的,那么这个jrebel.lic文件里的validateUntil日期就是11月14日,现在我把他改成了明年元旦。





这是我用反编译工具反编译出来的部分源码:


/* */ package com.zeroturnaround.javarebel;
/* */ public class jS
/* */ implements dn



/* 405 */ if (localUserLicense != null) {
/* */ try {
/* 407 */ if (eO.a(localUserLicense)) {
/* 408 */ jdField_a_of_type_Int = 1;
/* */ }
/* 410 */ ObjectInputStream localObjectInputStream = new ObjectInputStream(new ByteArrayInputStream(localUserLicense.getLicense()));
/* 411 */ localMap = (Map)localObjectInputStream.readObject();
/* 412 */ localObjectInputStream.close();
/* */
/* 414 */ if ((!("JavaRebel".equals(localMap.get("Product")))) && (!("JRebel".equals(localMap.get("Product"))))) {
/* 415 */ jdField_a_of_type_Int = 0;
/* */ }
/* 417 */ iH.log("License information: " + localMap);
/* */
/* 420 */ boolean bool1 = Boolean.valueOf((String)localMap.get("commercial")).booleanValue();
/* 421 */ if ((jdField_a_of_type_Int == 1) && (bool1)) {
/* 422 */ jdField_a_of_type_Int = 3;
/* */ }
/* */
/* 425 */ localObject = (String)localMap.get("limited");
/* */
/* 427 */ if ((localObject != null) && (jdField_a_of_type_Int == 1)) {
/* 428 */ if (((String)localObject).equals("true")) {
/* 429 */ jdField_a_of_type_Int = 2;
/* 430 */ jn.a("License: eva luation");
/* */ }
/* 432 */ else if (((String)localObject).equals("scala")) {
/* 433 */ jdField_a_of_type_Int = 2;
/* 434 */ jdField_b_of_type_Int |= 1;
/* 435 */ jn.a("License: scala");
/* */ }
/* 437 */ else if (((String)localObject).equals("liverebel")) {
/* 438 */ jdField_a_of_type_Int = 2;
/* 439 */ jdField_b_of_type_Int |= 2;
/* 440 */ jn.a("License: liverebel");
/* */ }
/* */ }
/* 443 */ if (jdField_a_of_type_Int == 1) {
/* 444 */ localDate2 = (Date)localMap.get("validUntil");
/* 445 */ localDate3 = (Date)localMap.get("validFrom");
/* */ }
/* 447 */ else if (jdField_a_of_type_Int == 2) {
/* 448 */ localDate2 = (Date)localMap.get("limitedUntil");
/* 449 */ localDate3 = (Date)local

首页 上一页 1 2 3 4 5 下一页 尾页 1/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇JRebel 3.0 M1 破解版下载及破解.. 下一篇Linux Shell 下的输出重定向

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: