📄 586558.xml
字号:
<?xml version='1.0' encoding='GB2312'?>
<?xml-stylesheet type='text/xsl' href='../csdn.xsl'?>
<Topic>
<Issue>
<PostUserNickName>阿古</PostUserNickName>
<rank>一级(初级)</rank>
<ranknum>user1</ranknum>
<credit>110</credit>
<TopicId>586558</TopicId>
<TopicName>有没有办法破JIVE的三十天License</TopicName>
<PostUserId>209862</PostUserId>
<PostUserName>nnxdy</PostUserName>
<RoomName>JSP</RoomName>
<ReplyNum>4</ReplyNum>
<PostDateTime>2002-3-19 16:47:46</PostDateTime>
<Point>20</Point>
<ReadNum>0</ReadNum>
<RoomId>28</RoomId>
<EndState>2</EndState>
<Content>有没有办法破JIVE的三十天License,请多指教</Content>
</Issue>
<Replys>
<Reply>
<PostUserNickName>海曦</PostUserNickName>
<rank>五级(中级)</rank>
<ranknum>user5</ranknum>
<credit>100</credit>
<ReplyID>3894620</ReplyID>
<TopicID>586558</TopicID>
<PostUserId>173625</PostUserId>
<PostUserName>hax</PostUserName>
<Point>0</Point>
<Content>它不是有源代码的吗?</Content>
<PostDateTime>2002-3-19 17:26:28</PostDateTime>
</Reply>
<Reply>
<PostUserNickName>兰色梧桐</PostUserNickName>
<rank>四级(中级)</rank>
<ranknum>user4</ranknum>
<credit>100</credit>
<ReplyID>3897946</ReplyID>
<TopicID>586558</TopicID>
<PostUserId>30847</PostUserId>
<PostUserName>Justin</PostUserName>
<Point>20</Point>
<Content>很简单:
Jive2.1.1 License保护原理分析
============================
从Jive2.0开始,需要购买License才能够将Jive用于商业应用。 
现在简单分析一下Jive2中的License验证的实现。 
要访问论坛,必然要用到ForumFactory.getInstance(authorization)。J 
ive就是在这个函数中进行了License验证。看看Jive_2_1_1版本中对应的代码: 
ForumFactory getInstance(Authorization authorization) 
{ 
... 
// Note, the software license expressely forbids 
// tampering with this check. 
LicenseManager.validateLicense("Jive Forums Basic", "2.0"); 
//如果验证失败,LicenseManager会抛出一个LicenseException 
... 
} 
所以,如果希望使用破解版本的Jive,我们只要简单的屏蔽掉上面的语句就可以了。可是,看看程序上面注释,如果你是君子,就不该改动这个Source。我当然不愿意随随便便做小人,所以要是能搞一个注册机什么的大批量生产Enterprise级别的Jive License就爽啦。 
接下来研究License究竟是什么回事情。 
首先从jivesoftware.com上下载一个试用版本的jive.license文件。打开一看,一堆数据: 
D94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxsaWNlbnNlP 
................ 
MzEwMjRmY2EzNGRlYTFkOGMwNWFhOGFhMWIxYTk4MDRiZGEyM2E1PC9zaWduYXR1cmU+PC9saWNlbnNlPg0K 
看起来是base64加密过的,所以还是看代码先。 
ok,研究LicenseManager这个类。可是找遍了Jive2_1_1source,就是没有找到。原来Jivesoftware没有提供Source,只好找到对应的Class反编译。 
反编译得到两个类LicenseManager.java和License.java。 
通过分析发现,LicenseManager.validateLicense()中调用了函数loadLicense()来加载License文件。 
在loadLicense()中找到了下面的代码: 
String s1 = StringUtils.decodeBase64(stringbuffer.toString()); 
license = License.fromXML(s1); 
由此确定java.license是经过base64编码的xml文件。同时封装到了License类中 
解密的License内容如下: 
<?xml version="1.0" encoding="UTF-8"?> 
<license> 
<licenseID>3</licenseID> 
<product>Jive Forums Basic</product> 
<licenseType>Evaluation</licenseType> 
<name /> 
<company /> 
<version>2.1</version> 
<numCopies>1</numCopies> 
<url /> 
<expiresDate>2001/11/01</expiresDate> 
<creationDate>2001/10/13</creationDate> 
<signature>302d02145a27545abb3c89bbc34a3900476dfd3fd9495047021500831024fca34dea1d8c05aa8aa1b1a9804bda23a5</signature> 
</license> 
似乎我们只要修改<tag></tag>中的内容就能获得Commercial License了。 
真的这么简单?继续看下去。 
经过分析LicenseManager.validate(license),发现JiveSoft使用了DSA数字签名算法确保License不被修改。fAINT... 
static boolean validate(License license1) 
throws Exception 
{ 
//生成公钥 
String s = "308201b......d06d854a"; 
byte abyte0[] = StringUtils.decodeHex(s); 
X509EncodedKeySpec x509encodedkeyspec = new X509EncodedKeySpec(abyte0); 
KeyFactory keyfactory = KeyFactory.getInstance("DSA"); 
java.security.PublicKey publickey = keyfactory.generatePublic(x509encodedkeyspec); 
Signature signature = Signature.getInstance("DSA"); 
signature.initVerify(publickey); 
//更新指纹,也就是License中的所有内容(除了最后的signature)。 
signature.update(license1.getFingerprint()); 
//进行校验,如果内容被改动,则返回false; 
return signature.verify(StringUtils.decodeHex(license1.getSignature())); 
} 
由此可见,JiveSoftware通过DSA算法生成钥匙对,用私钥签署License,生成signagure,随同jive.license发放。并同时在程序中保存钥匙对中的公钥,利用Java.Security.*中的API进行验证。如果要自己造License,必须得到那个私钥,这一般不大可能实现。 
得出结论:牛方法搞不定,不过做个小人也不错,Let's Crack it! 
 
</Content>
<PostDateTime>2002-3-19 21:42:07</PostDateTime>
</Reply>
</Replys>
</Topic>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -