最近有个小项目用SVN作版本控制(以前都用StarTeam,为了支持开源,选择了SVN),想找个好用的SVN客户端工具,以前用过小海龟,但不喜欢往资源管理器上加插件,本来资源管理器就已经够乱的了,还加插件,无法忍受!而且,系统重装后还得重装小海龟,麻烦!在网上搜罗好久,找到了SmartSVN,挺好的,只以专业版要钱。虽说基础版功能对于一般的用户也足够了,但追求尽善尽美一直是我的性格,于是去官网申请了一个专业版试用License。试用License在1月14日即将到期,该动动手术了。
手术工具有两个:jshrink(2.39版)和rej(0.7版),如果不清楚这两个工具是啥东东的兄弟,请记住还有一个网站叫“google“,有一种方式叫“搜索”。
首先,用rej打开smartsvn.jar包,查找关键字“expired”,然后根据再查找引用该关键字的地方,最后定位到校验Lincese签名的地方,查找过程很啰嗦就不多讲了,找到的位置是smartsvn.tG类中的
static private void a(al a1, java.security.MessageDigest m2)
方法,用jshrink反编译后如下:
static private void a(al a1, java.security.MessageDigest m2) throws abp {
byte[] b3;
byte[] b4;
int i6;
b3 = a1.a();
b4 = tG.a(m2, 16);
Math.min(b3.length, b4.length);
l5 = return;
i6 = 0;
while (i6 < l5) {
if (b3[i6] != b4[i6]) {
throw new abp("Invalid signature");
}
i6++;
}
}
看来只要想办法在while循环之前跳出方法就行了。于时再用rej打开,找到Math.min(b3.length, b4.length);语句,在它的下面增加一个“return”,然后保存。再到
“用户主目录\.smartsvn\3“目录下打开license文件(纯文本的),将其中的:
DemoUntil=2008-1-14
改为
DemoUntil=2010-1-14
,再启动SmartSVN,它提示过期日期是2010-1-14,成功了!SmartSVN不再校验License的签名,可以把试用版到期时间改为任意有效日期了。至此,手术算是基本成功了,可以无限期地使用SmartSVN的专业版功能了。
前面我说过,追求尽善尽美是我的性格,每次启动喋喋不休地提示我是试用版本,累不累啊?!想办法除掉试用版提示。
再用rej打开smartsvn.jar,再查找关键字“expired”,最后找到smartsvn.Ql类的static public String a(java.util.Date d1)方法,反编译后如下:
static public String a(java.util.Date d1) {
return new StringBuffer().append("Your Professional demo license will expire on ").append(java.text.DateFormat.getDateInstance().format(d1)).append(".").toString();
}
试用版提示框上显示的就是这句话,只要找到引用这句话的地方,应该是说出提示框的位置吧,继续找,找到smartsvn.vf类的public final void a(dj d1)方法,反编译如下:
public final void a(dj d1) {
sW.b();
d1.c(Ql.a(a), Ql.h());
}
看来
d1.c(Ql.a(a), Ql.h());这句就是烦人对话框的出生地了,用rej在这句话前加个“return”,保存,再启动SmartSVN,没再出现烦人的提示框了!在干净的天空下呼吸是如此地自由!!
为了避免招来跟陈福寿一样的麻烦,我就不在这里贴手术后的smartsvn.jar包了。下面我贴一下我修改过的试用License、SmartSVN基础版和专业版界面截图。