- 浏览: 285668 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
jim8757:
能提供下完整的代码吗?
实例解析java + jQuery + json工作过程(登录) -
befairy:
收藏,谢谢LZ
基于Java、jQuery应用的账务管理系统开源了(09.3.19更新) -
Gilbert_Sam:
我看过这本书,很好,看到二十几章的地方,结果网站就登陆不上,写 ...
Linux C编程一站式学习 http://learn.akae.cn/ -
ljy520zhiyong:
这个网址进入不了呀
Linux C编程一站式学习 http://learn.akae.cn/ -
蜀山红日:
如果后台要向前台返回复杂数据该怎么办呢
实例解析java + jQuery + json工作过程(登录)
上周在springside上看到jira这个团队软件,下载下来试用了一番,觉得挺好用得,正好前一段看到了jad这个反编译软件,就想试手一下自己破解这个jira。下面详细叙述了破解的过程,因为不太熟悉这个破解,只是以前大概知道,几乎没有用过所以想试手一下。整个过程花费了昨天晚上一晚上,从6点多到11点,总算破解好了。
先说一下我用得工具吧
eclipse3.2,这个就不用说了吧,主要是试一下3.2的新特性,用3.1也可以的
winrar 解压*.jar文件
然后就是我关键的工具了, Jad 1.5.8e for Windows 9x/NT/2000 on Intel platform
其实我最开始使用的不是这个版本,而是1.5.7然后再破解的过程中,反编译java文件总是有问题,说
JavaClassFileParseException: Class file version mismatch
Parsing atlassian-extras-0.7.19/com\atlassian\license\applications\perforceplugi
n/PeforcePluginLicenseTypeStore.class...The class file version is 47.0 (only 45.
3 and 46.0 are supported)
然后就去google了一下,发现原来是jad的版本问题,所以到http://www.kpdus.com/jad.html#download 下载了最新的JAD,就是1.5.8e这个版本。
下面说一下我破解的过程吧,首先,我们可以使用评估版本的license搭建并且跑起来jira,那么可以看到在每一个具体页面底部,都可以看到一个license信息。既然这个页面可以看到license信息,那么,这个文件肯定最终是去读取了license文件信息的,那么具体逻辑是在哪里呢,我就看了一下web.xml,可以知道,jira是使用sitemath来做页面布局的,具体查看 sitemath.xml以及相应的 decorator.xml,可以知道每个页面底部几乎都是使用 footer.jsp来显示的
打开footer.jsp,可以看到最初几句
1
7 看到其中com.atlassian.license. *,那么我们可以猜测,具体的license就应该与这个相关了
在 footer.jsp 中可以发现下面这句
License curLicense = null ;
if (JiraLicenseUtils.isLicenseSetup())
curLicense = LicenseManager.getInstance().getLicense(JiraLicenseUtils.JIRA_LICENSE_KEY);
使用如下命令行,反编译atlassian-extras-0.7.19.jar包(注:这个包JIRA 3.6破解
http://www.blogjava.net/martinx/archive/2006/05/07/44914.html 这篇文章也提到了,但是没有给出如何确定这个包的,其实可以通过eclipse的工程,把整个工程加载,包括类库,然后就可以看到类层次结构了,然后就可以知道具体在那个包了)
jad -o -r -sjava -dsrc atlassian-extras-0.7.19/**/*.class
这样可以把整个atlassian-extras-0.7.19.jar包下的文件都反编译,然后我把反编译的结果java文件导入到了eclipse,新建了一个工程,这样方便后续的处理和查找以及编译等等。
接着,从反编译出来的
JiraLicenseUtils.java 可以发现如下定义
public static final String JIRA_LICENSE_KEY = " JIRA " ;
分析这一句
curLicense = LicenseManager.getInstance().getLicense(JiraLicenseUtils.JIRA_LICENSE_KEY);
主要是 LicenseManager 的 getLicense 方法
License license = LicenseDecoder.getLicense(pair, applicationName);
licenseList.put(applicationName, license);
可以看出,是通过 LicenseDecoder 类得到 License 方法的,后面一句是作缓存。
在继续跟踪 LicenseDecoder
可以发现是通过
License loadLicense(LicensePair pair, PublicKey publicKey, String applicationName)
方法来初始化 License 的
继续看下去,可以发现只有这一句具体实例化了一个 Lisence
return new DefaultLicense(dateCreated, datePurchased, organisation, licenseType, users, partnerName, licenseId); 到现在,就已经定位到具体的License类了,但是具体是不是这个类呢,这时候就是使用eclipse强大的功能的时候了
使用classic search,如下,可以发现声明中有License的,大约有7、8个类,具体看一下,可以发现仅有刚才的DefaultLIcense是继承了License接口的,那么可以基本确定就是这个类了。
但是,又不是很放心,所以又在License接口上如下查看了一下
这个两个综合,可以印证一个思想,就是所有的License只有一个实现,就是DefaultLicense,那么,问题就好办了,只要修改DefaultLicense类文件就可以了
看看反编译的文件,知道License接口如下,在具体看一下License接口:
1public interface License
2 2{
3 3
4 4 public abstract Date getDateCreated();
5 5
6 6 public abstract Date getDatePurchased();
7 7
8 8 public abstract String getOrganisation();
9 9
1010 public abstract LicenseType getLicenseType();
1111
1212 public abstract boolean isExpired();
1313
1414 public abstract Date getExpiryDate();
1515
1616 public abstract String toString();
1717
1818 public abstract boolean isLicenseLevel(Collection collection);
1919
2020 public abstract int getUsers();
2121
2222 public abstract String getPartnerName();
2323
2424 public abstract String getLicenseId();
2525}
26
可以猜想,修改这个接口的实现,使其返回我们需要的值,那么就可以绕过License验证了。另外,我们注意到
public abstract LicenseType getLicenseType();
这个方法,返回值是LicenseType,大概就是我们不同的License类型的一个区别吧,突然想到,其实把这些LicenseType都改成JIRA_ENTERPRISE_FULL_LICENSE几乎类似的,那么也可以绕过这个,不过这个没有具体试过,有兴趣的可以一试。
public class JiraLicenseTypeStore extends LicenseTypeStore
2 {
3
4 public JiraLicenseTypeStore()
5 {
6 applicationLicenseTypes.add(JIRA_STANDARD_ACADEMIC);
7 applicationLicenseTypes.add(JIRA_STANDARD_EVALUATION);
8 applicationLicenseTypes.add(JIRA_STANDARD_NON_PROFIT);
9 applicationLicenseTypes.add(JIRA_STANDARD_FULL_LICENSE);
10 applicationLicenseTypes.add(JIRA_PROFESSIONAL_ACADEMIC);
11 applicationLicenseTypes.add(JIRA_PROFESSIONAL_EVALUATION);
12 applicationLicenseTypes.add(JIRA_PROFESSIONAL_NON_PROFIT);
13 applicationLicenseTypes.add(JIRA_PROFESSIONAL_FULL_LICENSE);
14 applicationLicenseTypes.add(JIRA_ENTERPRISE_ACADEMIC);
15 applicationLicenseTypes.add(JIRA_ENTERPRISE_EVALUATION);
16 applicationLicenseTypes.add(JIRA_ENTERPRISE_NON_PROFIT);
17 applicationLicenseTypes.add(JIRA_ENTERPRISE_FULL_LICENSE);
18 }
19
20 public Collection getAllLicenses()
21 {
22 return applicationLicenseTypes;
23 }
24
25 public String getPublicKeyFileName()
26 {
27 return publicKeyFileName;
28 }
29
30 public String getPrivateKeyFileName()
31 {
32 return privateKeyFileName;
33 }
34
35 public static LicenseType JIRA_STANDARD_ACADEMIC = new DefaultLicenseType( 197 , " JIRA Standard: Academic " , false , false );
36 public static LicenseType JIRA_STANDARD_EVALUATION = new DefaultLicenseType( 109 , " JIRA Standard: Evaluation " , true , false );
37 public static LicenseType JIRA_STANDARD_NON_PROFIT = new DefaultLicenseType( 157 , " JIRA Standard: Non-Profit / Open Source " , false , false );
38 public static LicenseType JIRA_STANDARD_FULL_LICENSE = new DefaultLicenseType( 179 , " JIRA Standard: Commercial Server " , false , false );
39 public static LicenseType JIRA_PROFESSIONAL_ACADEMIC = new DefaultLicenseType( 91 , " JIRA Professional: Academic " , false , false );
40 public static LicenseType JIRA_PROFESSIONAL_EVALUATION = new DefaultLicenseType( 47 , " JIRA Professional: Evaluation " , true , false );
41 public static LicenseType JIRA_PROFESSIONAL_NON_PROFIT = new DefaultLicenseType( 76 , " JIRA Professional: Non-Profit / Open Source " , false , false );
42 public static LicenseType JIRA_PROFESSIONAL_FULL_LICENSE = new DefaultLicenseType( 87 , " JIRA Professional: Commercial Server " , false , false );
43 public static LicenseType JIRA_ENTERPRISE_ACADEMIC = new DefaultLicenseType( 269 , " JIRA Enterprise: Academic " , false , false );
44 public static LicenseType JIRA_ENTERPRISE_EVALUATION = new DefaultLicenseType( 201 , " JIRA Enterprise: Evaluation " , true , false );
45 public static LicenseType JIRA_ENTERPRISE_NON_PROFIT = new DefaultLicenseType( 213 , " JIRA Enterprise: Non-Profit / Open Source " , false , false );
46 public static LicenseType JIRA_ENTERPRISE_FULL_LICENSE = new DefaultLicenseType( 267 , " JIRA Enterprise: Commercial Server " , false , false );
47 public static String publicKeyFileName = " com/atlassian/jira/issue/Bug.class " ;
48 public static String privateKeyFileName = " jira/jira.byte " ;
49
50 }
那么,分析了上述的类,那么,就来修改一下DefaultLicense了,首先把初始化修改一下,如下:
1 public DefaultLicense(Date dateCreated, Date datePurchased, String organisation, LicenseType licenseType, int users, String partnerName, String licenseId)
2 2 {
3 3 Calendar calendar = Calendar.getInstance();
4 4 calendar.set( 1982 , 4 , 21 );
5 5 this .dateCreated = calendar.getTime();
6 6 this .datePurchased = calendar.getTime();
7 7 this .organisation = " escout@sjtu " ;
8 8 this .licenseType = JiraLicenseTypeStore.JIRA_ENTERPRISE_ACADEMIC;
9 9 this .users = 10000 ;
10 10 this .partnerName = partnerName;
11 11 this .licenseId = licenseId;
12 12 }
接着,把修改的DefaultLicense文件,覆盖到atlassian-extras-0.7.19.jar解压开的同名文件处覆盖,同时使用下面的命令重新打包
D:\develope\jadnt157\atlassian-extras-0.7.19>jar cvf atlassianextras-0.7.19.jar
./
然后把修改后的jar放到web-inf/lib目录下覆盖同名文件。重启tomcat,这时候,我本来想应该就可以了,谁知打开浏览器,白屏!没有任何页面显示,ft。
想了想,打开tomcat的log文件,发现如下几行。
2006-05-12 21:26:08,421 ERROR [web.action.util.JiraLicenseUtils] The current license is too old (Mon Jun 14 21:26:05 CST 1982) to run this version (3.6 - Tue Apr 11 00:00:00 CST 2006) of JIRA.
埃,本来想用一个比较有纪念意义的日期呢,看来不能随心所欲啊。
后来又改了一下,最终如下:
1 public class DefaultLicense
2 implements License
3 {
4
5 public DefaultLicense(Date dateCreated, Date datePurchased, String organisation, LicenseType licenseType, int users, String partnerName)
6 {
7 Calendar calendar = Calendar.getInstance();
8 calendar.add(Calendar.DAY_OF_MONTH, - 5 );
9 this .dateCreated = calendar.getTime();
10 this .datePurchased = calendar.getTime();
11 this .organisation = " escout@sjtu " ;
12 this .licenseType = JiraLicenseTypeStore.JIRA_ENTERPRISE_ACADEMIC;
13 this .users = 10000 ;
14 this .partnerName = partnerName;
15 this .licenseId = "" ;
16 }
17
18 public DefaultLicense(Date dateCreated, Date datePurchased, String organisation, LicenseType licenseType, int users, String partnerName, String licenseId)
19 {
20 Calendar calendar = Calendar.getInstance();
21 calendar.add(Calendar.DAY_OF_MONTH, - 1 );
22 this .dateCreated = calendar.getTime();
23 this .datePurchased = calendar.getTime();
24 this .organisation = " escout@sjtu " ;
25 this .licenseType = JiraLicenseTypeStore.JIRA_ENTERPRISE_ACADEMIC;
26 this .users = 10000 ;
27 this .partnerName = partnerName;
28 this .licenseId = licenseId;
29 }
30
31 public Date getDateCreated()
32 {
33 return dateCreated;
34 }
35
36 public Date getDatePurchased()
37 {
38 return datePurchased;
39 }
40
41 public String getOrganisation()
42 {
43 return organisation;
44 }
45
46 public LicenseType getLicenseType()
47 {
48 return licenseType;
49 }
50
51 public String toString()
52 {
53 return licenseType.getNiceName() + " licensed to " + organisation;
54 }
55
56 public boolean isExpired()
57 {
58 return false ;
59 }
60
61 public Date getExpiryDate()
62 {
63 return null ;
64 }
65
66 public String getPartnerName()
67 {
68 return partnerName;
69 }
70
71 public boolean isLicenseLevel(Collection levels)
72 {
73 for (Iterator iterator = levels.iterator(); iterator.hasNext();)
74 {
75 String level = (String)iterator.next();
76 if (getLicenseType().getDescription().toLowerCase().indexOf(level.toLowerCase()) != - 1 )
77 return true ;
78 }
79
80 return false ;
81 }
82
83 public int getUsers()
84 {
85 return - 1 ;
86 }
87
88 public String getLicenseId()
89 {
90 return licenseId;
91 }
92
93 public static long EVALUATION_PERIOD = 0x9fa52400L ;
94 protected Date dateCreated;
95 protected Date datePurchased;
96 protected String organisation;
97 protected LicenseType licenseType;
98 private int users;
99 private String partnerName;
100 private String licenseId;
101
102 }
再次打包放到jira/web-inf/lib/目录下,重启,这下好了,jira license detail显示:
Organisation
escout@sjtu
Date Purchased
08/五月/06
License Type
JIRA Enterprise: Commercial Server
License ID
R5AM<<8X9R
Support Period
Your commercial JIRA support and updates are available until 09/五月/07.
哈哈,初次破解成功!!
附记:初次破解,没有多少经验,所以更多记录了一下实际的步骤。后来我测试了一下,当把系统时间更改了之后,Support Period在重启tomcat之后才会更新,所以大概这个状态在运行时是保存在Application对象中的吧
先说一下我用得工具吧
eclipse3.2,这个就不用说了吧,主要是试一下3.2的新特性,用3.1也可以的
winrar 解压*.jar文件
然后就是我关键的工具了, Jad 1.5.8e for Windows 9x/NT/2000 on Intel platform
其实我最开始使用的不是这个版本,而是1.5.7然后再破解的过程中,反编译java文件总是有问题,说
JavaClassFileParseException: Class file version mismatch
Parsing atlassian-extras-0.7.19/com\atlassian\license\applications\perforceplugi
n/PeforcePluginLicenseTypeStore.class...The class file version is 47.0 (only 45.
3 and 46.0 are supported)
然后就去google了一下,发现原来是jad的版本问题,所以到http://www.kpdus.com/jad.html#download 下载了最新的JAD,就是1.5.8e这个版本。
下面说一下我破解的过程吧,首先,我们可以使用评估版本的license搭建并且跑起来jira,那么可以看到在每一个具体页面底部,都可以看到一个license信息。既然这个页面可以看到license信息,那么,这个文件肯定最终是去读取了license文件信息的,那么具体逻辑是在哪里呢,我就看了一下web.xml,可以知道,jira是使用sitemath来做页面布局的,具体查看 sitemath.xml以及相应的 decorator.xml,可以知道每个页面底部几乎都是使用 footer.jsp来显示的
打开footer.jsp,可以看到最初几句
1
7 看到其中com.atlassian.license. *,那么我们可以猜测,具体的license就应该与这个相关了
在 footer.jsp 中可以发现下面这句
License curLicense = null ;
if (JiraLicenseUtils.isLicenseSetup())
curLicense = LicenseManager.getInstance().getLicense(JiraLicenseUtils.JIRA_LICENSE_KEY);
使用如下命令行,反编译atlassian-extras-0.7.19.jar包(注:这个包JIRA 3.6破解
http://www.blogjava.net/martinx/archive/2006/05/07/44914.html 这篇文章也提到了,但是没有给出如何确定这个包的,其实可以通过eclipse的工程,把整个工程加载,包括类库,然后就可以看到类层次结构了,然后就可以知道具体在那个包了)
jad -o -r -sjava -dsrc atlassian-extras-0.7.19/**/*.class
这样可以把整个atlassian-extras-0.7.19.jar包下的文件都反编译,然后我把反编译的结果java文件导入到了eclipse,新建了一个工程,这样方便后续的处理和查找以及编译等等。
接着,从反编译出来的
JiraLicenseUtils.java 可以发现如下定义
public static final String JIRA_LICENSE_KEY = " JIRA " ;
分析这一句
curLicense = LicenseManager.getInstance().getLicense(JiraLicenseUtils.JIRA_LICENSE_KEY);
主要是 LicenseManager 的 getLicense 方法
License license = LicenseDecoder.getLicense(pair, applicationName);
licenseList.put(applicationName, license);
可以看出,是通过 LicenseDecoder 类得到 License 方法的,后面一句是作缓存。
在继续跟踪 LicenseDecoder
可以发现是通过
License loadLicense(LicensePair pair, PublicKey publicKey, String applicationName)
方法来初始化 License 的
继续看下去,可以发现只有这一句具体实例化了一个 Lisence
return new DefaultLicense(dateCreated, datePurchased, organisation, licenseType, users, partnerName, licenseId); 到现在,就已经定位到具体的License类了,但是具体是不是这个类呢,这时候就是使用eclipse强大的功能的时候了
使用classic search,如下,可以发现声明中有License的,大约有7、8个类,具体看一下,可以发现仅有刚才的DefaultLIcense是继承了License接口的,那么可以基本确定就是这个类了。
但是,又不是很放心,所以又在License接口上如下查看了一下
这个两个综合,可以印证一个思想,就是所有的License只有一个实现,就是DefaultLicense,那么,问题就好办了,只要修改DefaultLicense类文件就可以了
看看反编译的文件,知道License接口如下,在具体看一下License接口:
1public interface License
2 2{
3 3
4 4 public abstract Date getDateCreated();
5 5
6 6 public abstract Date getDatePurchased();
7 7
8 8 public abstract String getOrganisation();
9 9
1010 public abstract LicenseType getLicenseType();
1111
1212 public abstract boolean isExpired();
1313
1414 public abstract Date getExpiryDate();
1515
1616 public abstract String toString();
1717
1818 public abstract boolean isLicenseLevel(Collection collection);
1919
2020 public abstract int getUsers();
2121
2222 public abstract String getPartnerName();
2323
2424 public abstract String getLicenseId();
2525}
26
可以猜想,修改这个接口的实现,使其返回我们需要的值,那么就可以绕过License验证了。另外,我们注意到
public abstract LicenseType getLicenseType();
这个方法,返回值是LicenseType,大概就是我们不同的License类型的一个区别吧,突然想到,其实把这些LicenseType都改成JIRA_ENTERPRISE_FULL_LICENSE几乎类似的,那么也可以绕过这个,不过这个没有具体试过,有兴趣的可以一试。
public class JiraLicenseTypeStore extends LicenseTypeStore
2 {
3
4 public JiraLicenseTypeStore()
5 {
6 applicationLicenseTypes.add(JIRA_STANDARD_ACADEMIC);
7 applicationLicenseTypes.add(JIRA_STANDARD_EVALUATION);
8 applicationLicenseTypes.add(JIRA_STANDARD_NON_PROFIT);
9 applicationLicenseTypes.add(JIRA_STANDARD_FULL_LICENSE);
10 applicationLicenseTypes.add(JIRA_PROFESSIONAL_ACADEMIC);
11 applicationLicenseTypes.add(JIRA_PROFESSIONAL_EVALUATION);
12 applicationLicenseTypes.add(JIRA_PROFESSIONAL_NON_PROFIT);
13 applicationLicenseTypes.add(JIRA_PROFESSIONAL_FULL_LICENSE);
14 applicationLicenseTypes.add(JIRA_ENTERPRISE_ACADEMIC);
15 applicationLicenseTypes.add(JIRA_ENTERPRISE_EVALUATION);
16 applicationLicenseTypes.add(JIRA_ENTERPRISE_NON_PROFIT);
17 applicationLicenseTypes.add(JIRA_ENTERPRISE_FULL_LICENSE);
18 }
19
20 public Collection getAllLicenses()
21 {
22 return applicationLicenseTypes;
23 }
24
25 public String getPublicKeyFileName()
26 {
27 return publicKeyFileName;
28 }
29
30 public String getPrivateKeyFileName()
31 {
32 return privateKeyFileName;
33 }
34
35 public static LicenseType JIRA_STANDARD_ACADEMIC = new DefaultLicenseType( 197 , " JIRA Standard: Academic " , false , false );
36 public static LicenseType JIRA_STANDARD_EVALUATION = new DefaultLicenseType( 109 , " JIRA Standard: Evaluation " , true , false );
37 public static LicenseType JIRA_STANDARD_NON_PROFIT = new DefaultLicenseType( 157 , " JIRA Standard: Non-Profit / Open Source " , false , false );
38 public static LicenseType JIRA_STANDARD_FULL_LICENSE = new DefaultLicenseType( 179 , " JIRA Standard: Commercial Server " , false , false );
39 public static LicenseType JIRA_PROFESSIONAL_ACADEMIC = new DefaultLicenseType( 91 , " JIRA Professional: Academic " , false , false );
40 public static LicenseType JIRA_PROFESSIONAL_EVALUATION = new DefaultLicenseType( 47 , " JIRA Professional: Evaluation " , true , false );
41 public static LicenseType JIRA_PROFESSIONAL_NON_PROFIT = new DefaultLicenseType( 76 , " JIRA Professional: Non-Profit / Open Source " , false , false );
42 public static LicenseType JIRA_PROFESSIONAL_FULL_LICENSE = new DefaultLicenseType( 87 , " JIRA Professional: Commercial Server " , false , false );
43 public static LicenseType JIRA_ENTERPRISE_ACADEMIC = new DefaultLicenseType( 269 , " JIRA Enterprise: Academic " , false , false );
44 public static LicenseType JIRA_ENTERPRISE_EVALUATION = new DefaultLicenseType( 201 , " JIRA Enterprise: Evaluation " , true , false );
45 public static LicenseType JIRA_ENTERPRISE_NON_PROFIT = new DefaultLicenseType( 213 , " JIRA Enterprise: Non-Profit / Open Source " , false , false );
46 public static LicenseType JIRA_ENTERPRISE_FULL_LICENSE = new DefaultLicenseType( 267 , " JIRA Enterprise: Commercial Server " , false , false );
47 public static String publicKeyFileName = " com/atlassian/jira/issue/Bug.class " ;
48 public static String privateKeyFileName = " jira/jira.byte " ;
49
50 }
那么,分析了上述的类,那么,就来修改一下DefaultLicense了,首先把初始化修改一下,如下:
1 public DefaultLicense(Date dateCreated, Date datePurchased, String organisation, LicenseType licenseType, int users, String partnerName, String licenseId)
2 2 {
3 3 Calendar calendar = Calendar.getInstance();
4 4 calendar.set( 1982 , 4 , 21 );
5 5 this .dateCreated = calendar.getTime();
6 6 this .datePurchased = calendar.getTime();
7 7 this .organisation = " escout@sjtu " ;
8 8 this .licenseType = JiraLicenseTypeStore.JIRA_ENTERPRISE_ACADEMIC;
9 9 this .users = 10000 ;
10 10 this .partnerName = partnerName;
11 11 this .licenseId = licenseId;
12 12 }
接着,把修改的DefaultLicense文件,覆盖到atlassian-extras-0.7.19.jar解压开的同名文件处覆盖,同时使用下面的命令重新打包
D:\develope\jadnt157\atlassian-extras-0.7.19>jar cvf atlassianextras-0.7.19.jar
./
然后把修改后的jar放到web-inf/lib目录下覆盖同名文件。重启tomcat,这时候,我本来想应该就可以了,谁知打开浏览器,白屏!没有任何页面显示,ft。
想了想,打开tomcat的log文件,发现如下几行。
2006-05-12 21:26:08,421 ERROR [web.action.util.JiraLicenseUtils] The current license is too old (Mon Jun 14 21:26:05 CST 1982) to run this version (3.6 - Tue Apr 11 00:00:00 CST 2006) of JIRA.
埃,本来想用一个比较有纪念意义的日期呢,看来不能随心所欲啊。
后来又改了一下,最终如下:
1 public class DefaultLicense
2 implements License
3 {
4
5 public DefaultLicense(Date dateCreated, Date datePurchased, String organisation, LicenseType licenseType, int users, String partnerName)
6 {
7 Calendar calendar = Calendar.getInstance();
8 calendar.add(Calendar.DAY_OF_MONTH, - 5 );
9 this .dateCreated = calendar.getTime();
10 this .datePurchased = calendar.getTime();
11 this .organisation = " escout@sjtu " ;
12 this .licenseType = JiraLicenseTypeStore.JIRA_ENTERPRISE_ACADEMIC;
13 this .users = 10000 ;
14 this .partnerName = partnerName;
15 this .licenseId = "" ;
16 }
17
18 public DefaultLicense(Date dateCreated, Date datePurchased, String organisation, LicenseType licenseType, int users, String partnerName, String licenseId)
19 {
20 Calendar calendar = Calendar.getInstance();
21 calendar.add(Calendar.DAY_OF_MONTH, - 1 );
22 this .dateCreated = calendar.getTime();
23 this .datePurchased = calendar.getTime();
24 this .organisation = " escout@sjtu " ;
25 this .licenseType = JiraLicenseTypeStore.JIRA_ENTERPRISE_ACADEMIC;
26 this .users = 10000 ;
27 this .partnerName = partnerName;
28 this .licenseId = licenseId;
29 }
30
31 public Date getDateCreated()
32 {
33 return dateCreated;
34 }
35
36 public Date getDatePurchased()
37 {
38 return datePurchased;
39 }
40
41 public String getOrganisation()
42 {
43 return organisation;
44 }
45
46 public LicenseType getLicenseType()
47 {
48 return licenseType;
49 }
50
51 public String toString()
52 {
53 return licenseType.getNiceName() + " licensed to " + organisation;
54 }
55
56 public boolean isExpired()
57 {
58 return false ;
59 }
60
61 public Date getExpiryDate()
62 {
63 return null ;
64 }
65
66 public String getPartnerName()
67 {
68 return partnerName;
69 }
70
71 public boolean isLicenseLevel(Collection levels)
72 {
73 for (Iterator iterator = levels.iterator(); iterator.hasNext();)
74 {
75 String level = (String)iterator.next();
76 if (getLicenseType().getDescription().toLowerCase().indexOf(level.toLowerCase()) != - 1 )
77 return true ;
78 }
79
80 return false ;
81 }
82
83 public int getUsers()
84 {
85 return - 1 ;
86 }
87
88 public String getLicenseId()
89 {
90 return licenseId;
91 }
92
93 public static long EVALUATION_PERIOD = 0x9fa52400L ;
94 protected Date dateCreated;
95 protected Date datePurchased;
96 protected String organisation;
97 protected LicenseType licenseType;
98 private int users;
99 private String partnerName;
100 private String licenseId;
101
102 }
再次打包放到jira/web-inf/lib/目录下,重启,这下好了,jira license detail显示:
Organisation
escout@sjtu
Date Purchased
08/五月/06
License Type
JIRA Enterprise: Commercial Server
License ID
R5AM<<8X9R
Support Period
Your commercial JIRA support and updates are available until 09/五月/07.
哈哈,初次破解成功!!
附记:初次破解,没有多少经验,所以更多记录了一下实际的步骤。后来我测试了一下,当把系统时间更改了之后,Support Period在重启tomcat之后才会更新,所以大概这个状态在运行时是保存在Application对象中的吧
发表评论
-
SVN tag和branch的选择及应用
2009-06-10 10:57 1442在SVN中Branch/tag在一个功能选项中,在使用中也往往 ... -
svn利用TortoiseSVN忽略文件或文件夹(目录)
2009-04-07 15:33 9527忽略已经版本控制的文件 如果你不小心添加了一些应该被忽略的文件 ... -
svn的一个hooks,有过滤特定后缀名,指定文件大小及必须填写注解三个功能
2009-04-01 14:36 4070在redhat el5.0+svn1.5.6平台测试没有问题. ... -
9个免费开源的bug追踪软件
2009-03-18 08:45 2123一个Web应用或软件在其 ... -
Linux有可能成为java OS
2009-03-18 08:44 988Sun公司已经开放了对java技术的最后限制,并且鼓励在lin ... -
jira邮件服务器配置错误Unknown SMTP host:以解决
2009-03-13 17:25 8114今天在linux上配置jira邮件服务器,居然报错,同样的配置 ... -
Jira Enable RPC plugin
2009-03-02 15:37 1364To invoke JIRA operations remot ... -
Eclipse中集成JIRA
2009-03-02 13:37 4362Eclipse连接器 Eclipse Connector是 ... -
fisheye1.6.5.a给破解了?
2009-02-26 11:14 1513ps:今天刚刚出了1.6.5.a版本,找了一下,没了这个e.c ... -
Confluence破解方法
2009-02-26 11:13 5881Confluence破解方法 为了方便文档的管理,最近装了At ... -
J2EE架构师之路
2009-02-26 11:09 1526J2EE架构师之路 不经意 ... -
【jira日记系列】十步完成自定义问题类型及配套工作流
2009-02-20 08:53 2563首先对这篇文章做个说 ... -
在Red Hat AS4 下装 subversion1.5.4 的心得
2009-02-20 08:49 2085错误 configure: error: could not ...
相关推荐
### JIRA 3.12.3:专业问题跟踪与管理解决方案 #### 一、JIRA概述 JIRA,由Atlassian公司开发,被定位为一款专业的“问题追踪器”(Professional Issue Tracker)。这里的问题(Issue)涵盖了软件开发过程中可能...
进行安装过后,关掉jira服务,然后...在进行后面得配置,在最后再次关掉jira,然后重启,去查看你的技术支持,如果显示时间到期为33年,那么就是破解成功了!步骤可参考网页上的此博客https://www.ilanni.com/?p=12119
Jira 6.X破解license 格式(包括Jira,敏捷,插件license)
极好的破解JIRA6 的方法,试过,100%成功。
适用于jira4.4 jira_crack.zip(JIRA4破解补丁) 使用说明:http://blog.csdn.net/ctbinzi/archive/2010/11/06/5991892.aspx
破解jira4.4最关键的步骤 运行jira_keygen.jar 1、破解之前先关掉jira 2、输入 Name 和 Server ID ,再patch,显示patch success,再genkey,然后启动tomcat,通过web登陆jira输入key,即可 破解 GreenHopper 5.7...
将atlassian-extras-2.2.2.jar 覆盖至%JIRA_HOME%/atlassian-jira/WEB-INF/lib/atlassian-extras-2.2.2.jar 2.将atlassian-extras-2.2.2.crack 覆盖至先将这个文件复制到%JIRA_HOME%/atlassian-jira/WEB-INF/...
# 查看系统位数以及下载对应版本jira安装包Getconf LONG_BITJira下载地址:https://product-downloads.atlass
Linux下安装JIRA6.3.6的破解包和汉化包
Jira是一款广受欢迎的项目管理和问题追踪工具,尤其在IT行业中被广泛应用。Tempo是Jira的一款强大插件,专门用于时间跟踪和管理。这款插件增强了Jira的基础功能,帮助团队更有效地追踪工作时间,优化资源分配,提高...
jira
1、将破解包atlassian-jira1.zip 解压缩以后,分两步来操作: A.把 atlassian-jira1\WEB-INF\classes\com\atlassian\jira\license\JiraLicenseStoreImpl.class文件 覆盖到JIRA5.2.3安装目录..\Atlassian\JIRA\...
Description=JIRA: Commercial, CreationDate=2015-01-30, jira.LicenseEdition=ENTERPRISE, Evaluation=false, jira.LicenseTypeName=COMMERCIAL, jira.active=true, licenseVersion=2, MaintenanceExpiryDate=2099...
atlassian-jira4.3.4破解文件 经过验证可行
JIRA4.1/4.0安装破解 1.首先去下载JIRA 2.创建数据 3.设置环境变量和修改配置文件 4.启动Tomcat安装JIRA 5.破解JIRA
jira 4.4破解包。官网下载解压后直接覆盖$jira_home/atlassian-jira/下源文件即可。 安装时的注册码参考里面的.txt文件,修改日期为当天
### JIRA插件安装方法详解 #### 一、前言 在现代软件开发与项目管理领域,JIRA作为一款功能强大的工具,不仅能够帮助团队高效地跟踪问题、管理任务,还能通过丰富的插件进一步增强其功能性和灵活性。本文将详细...
Jira工时表插件tempo-plugin-7.9.1
1、jira-misc-workflow-extensions-2.5.7.1.jar; 2、jira流扩展插件; 3、提供更多的 触发条件/校验条件/结果处理;
《Jira 8.4.1插件加载与卸载机制详解》 Jira,作为Atlassian公司的一款强大且灵活的项目管理工具,允许开发者通过插件系统进行功能扩展,以满足不同团队的需求。在Jira 8.4.1版本中,其插件加载与卸载机制是整个...