概述:
想要破解一个版本的jira,需要两个文件,一个keygen.java文件,一个jar包。
不同版本的jira,可能keygen.java不同,jar包名字也不同。
keygen.java是注册码的算法文件,这个文件中import了一个类:com.atlassian.license.LicensePair。这个类在上述的jar包中声明。
所以我们需要把jar包解压,并把解压后的文件和keygen.java放在一个目录下,这样keygen.java就能找到它要引用的文件了。
运行:电脑安装好jdk,配置好环境变量JAVA_HOME,CLASSPATH。
运行javac keygen.java,先编译。再运行java keygen执行,输入用户名以后,注册码就自动生成出来了。
两个文件举例:
jar包:atlassian-extras-0.7.19.jar
keygen.java:











































































































新版的Jira4.0.1破解过程与其以前的方式有很大的不同,以下是破解过程:
找到{jira_install}/atltssian-jira/WEB-INF/lib目录下的atlassian-extras- 2.2.2.jar,反编译com.atlassian.extras.decoder.v2 包下的Version2LicenseDecoder类,可以看到loadLicenseConfiguration(Reader text)方法,仅分析这个方法是最终decode后加载License的方法,所以可以修改此方法,以明文 的方式改写license信息,这样jira启动时拿到的就是我们所提供的明文信息了。
Java代码
private Properties loadLicenseConfiguration(Reader text)
{
StringBuffer sb = new StringBuffer();
sb.append("Description=JIRA\\: COMMERCIAL\n");
sb.append("CreationDate=2009-10-25\n");
sb.append("ContactName=test@test.test\n");
sb.append("jira.LicenseEdition=ENTERPRISE\n");
sb.append("ContactEMail=test@test.com\n");
sb.append("Evaluation=false\n");
sb.append("jira.LicenseTypeName=COMMERCIAL\n");
sb.append("jira.active=true\n");
sb.append("licenseVersion=2\n");
sb.append("MaintenanceExpiryDate=2010-06-01\n");
sb.append("Organisation=test\n");
sb.append("jira.NumberOfUsers=-1\n");
sb.append("ServerID=B6FW-B4KW-J1A3-4DQB\n");
sb.append("LicenseID=LID\n");
sb.append("LicenseExpiryDate=2010-06-01\n");
sb.append("urchaseDate=2009-12-25\n");
StringReader reader = new StringReader(sb.toString());
try
{
Properties props = new Properties();
new DefaultPropertiesPersister().load(props, reader);
return props;
}
catch (IOException e)
{
throw new LicenseException("Could NOT load properties from reader", e);
}
}
private Properties loadLicenseConfiguration(Reader text)
{
StringBuffer sb = new StringBuffer();
sb.append("Description=JIRA\\: COMMERCIAL\n");
sb.append("CreationDate=2009-10-25\n");
sb.append("ContactName=test@test.test\n");
sb.append("jira.LicenseEdition=ENTERPRISE\n");
sb.append("ContactEMail=test@test.com\n");
sb.append("Evaluation=false\n");
sb.append("jira.LicenseTypeName=COMMERCIAL\n");
sb.append("jira.active=true\n");
sb.append("licenseVersion=2\n");
sb.append("MaintenanceExpiryDate=2010-06-01\n");
sb.append("Organisation=test\n");
sb.append("jira.NumberOfUsers=-1\n");
sb.append("ServerID=B6FW-B4KW-J1A3-4DQB\n");
sb.append("LicenseID=LID\n");
sb.append("LicenseExpiryDate=2010-06-01\n");
sb.append("urchaseDate=2009-12-25\n");
StringReader reader = new StringReader(sb.toString());
try
{
Properties props = new Properties();
new DefaultPropertiesPersister().load(props, reader);
return props;
}
catch (IOException e)
{
throw new LicenseException("Could NOT load properties from reader", e);
}
}
可以看到我们不使用方法的输入值text而改用自己加载的reader来替换以达到目的。
最后将编译好的类替换相关的类后使用jar命令,如:‘jar -cvf atlassian-extras-2.2.2.jar ./’打包为atlassian-extras-2.2.2.jar替换掉{jira_install}/atltssian-jira/WEB-INF /lib目录下的对应包,启动后即可。
/tx