⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 586558.xml

📁 论坛精华帖子
💻 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&#32;License保护原理分析
============================

从Jive2.0开始,需要购买License才能够将Jive用于商业应用。&#32;
现在简单分析一下Jive2中的License验证的实现。&#32;
要访问论坛,必然要用到ForumFactory.getInstance(authorization)。J&#32;
ive就是在这个函数中进行了License验证。看看Jive_2_1_1版本中对应的代码:&#32;
ForumFactory&#32;getInstance(Authorization&#32;authorization)&#32;
{&#32;
...&#32;
//&#32;Note,&#32;the&#32;software&#32;license&#32;expressely&#32;forbids&#32;
//&#32;tampering&#32;with&#32;this&#32;check.&#32;
LicenseManager.validateLicense("Jive&#32;Forums&#32;Basic",&#32;"2.0");&#32;
 //如果验证失败,LicenseManager会抛出一个LicenseException&#32;
...&#32;
}&#32;

  所以,如果希望使用破解版本的Jive,我们只要简单的屏蔽掉上面的语句就可以了。可是,看看程序上面注释,如果你是君子,就不该改动这个Source。我当然不愿意随随便便做小人,所以要是能搞一个注册机什么的大批量生产Enterprise级别的Jive&#32;License就爽啦。&#32;

  接下来研究License究竟是什么回事情。&#32;

  首先从jivesoftware.com上下载一个试用版本的jive.license文件。打开一看,一堆数据:&#32;
D94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxsaWNlbnNlP&#32;
................&#32;
MzEwMjRmY2EzNGRlYTFkOGMwNWFhOGFhMWIxYTk4MDRiZGEyM2E1PC9zaWduYXR1cmU+PC9saWNlbnNlPg0K&#32;
  看起来是base64加密过的,所以还是看代码先。&#32;

  ok,研究LicenseManager这个类。可是找遍了Jive2_1_1source,就是没有找到。原来Jivesoftware没有提供Source,只好找到对应的Class反编译。&#32;
  反编译得到两个类LicenseManager.java和License.java。&#32;
  通过分析发现,LicenseManager.validateLicense()中调用了函数loadLicense()来加载License文件。&#32;
在loadLicense()中找到了下面的代码:&#32;
String&#32;s1&#32;=&#32;StringUtils.decodeBase64(stringbuffer.toString());&#32;
license&#32;=&#32;License.fromXML(s1);&#32;
  由此确定java.license是经过base64编码的xml文件。同时封装到了License类中&#32;
  解密的License内容如下:&#32;
&lt;?xml&#32;version="1.0"&#32;encoding="UTF-8"?&gt;&#32;
&lt;license&gt;&#32;
&lt;licenseID&gt;3&lt;/licenseID&gt;&#32;
&lt;product&gt;Jive&#32;Forums&#32;Basic&lt;/product&gt;&#32;
&lt;licenseType&gt;Evaluation&lt;/licenseType&gt;&#32;
&lt;name&#32;/&gt;&#32;
&lt;company&#32;/&gt;&#32;
&lt;version&gt;2.1&lt;/version&gt;&#32;
&lt;numCopies&gt;1&lt;/numCopies&gt;&#32;
&lt;url&#32;/&gt;&#32;
&lt;expiresDate&gt;2001/11/01&lt;/expiresDate&gt;&#32;
&lt;creationDate&gt;2001/10/13&lt;/creationDate&gt;&#32;
&lt;signature&gt;302d02145a27545abb3c89bbc34a3900476dfd3fd9495047021500831024fca34dea1d8c05aa8aa1b1a9804bda23a5&lt;/signature&gt;&#32;
&lt;/license&gt;&#32;

  似乎我们只要修改&lt;tag&gt;&lt;/tag&gt;中的内容就能获得Commercial&#32;License了。&#32;

  真的这么简单?继续看下去。&#32;

  经过分析LicenseManager.validate(license),发现JiveSoft使用了DSA数字签名算法确保License不被修改。fAINT...&#32;

static&#32;boolean&#32;validate(License&#32;license1)&#32;
throws&#32;Exception&#32;
{&#32;
  //生成公钥&#32;
  String&#32;s&#32;=&#32;"308201b......d06d854a";&#32;
byte&#32;abyte0[]&#32;=&#32;StringUtils.decodeHex(s);&#32;
X509EncodedKeySpec&#32;x509encodedkeyspec&#32;=&#32;new&#32;X509EncodedKeySpec(abyte0);&#32;
KeyFactory&#32;keyfactory&#32;=&#32;KeyFactory.getInstance("DSA");&#32;
java.security.PublicKey&#32;publickey&#32;=&#32;keyfactory.generatePublic(x509encodedkeyspec);&#32;
Signature&#32;signature&#32;=&#32;Signature.getInstance("DSA");&#32;
signature.initVerify(publickey);&#32;
  //更新指纹,也就是License中的所有内容(除了最后的signature)。&#32;
signature.update(license1.getFingerprint());&#32;
  //进行校验,如果内容被改动,则返回false;&#32;
return&#32;signature.verify(StringUtils.decodeHex(license1.getSignature()));&#32;
}&#32;

  由此可见,JiveSoftware通过DSA算法生成钥匙对,用私钥签署License,生成signagure,随同jive.license发放。并同时在程序中保存钥匙对中的公钥,利用Java.Security.*中的API进行验证。如果要自己造License,必须得到那个私钥,这一般不大可能实现。&#32;

得出结论:牛方法搞不定,不过做个小人也不错,Let's&#32;Crack&#32;it!&#32;

&#32;
</Content>
<PostDateTime>2002-3-19 21:42:07</PostDateTime>
</Reply>
</Replys>
</Topic>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -