29 Commits
Author SHA1 Message Date
pengzhile 1095be6b25 fix hash order
Signed-off-by: pengzhile <pengzhile@gmail.com>
2021-09-16 11:46:52 +08:00
pengzhile d5b9b974d7 update for license hash. cheers~ 2021-09-15 19:38:10 +08:00
pengzhile 65c05e4215 update readme
Signed-off-by: pengzhile <pengzhile@gmail.com>
2019-10-10 12:35:00 +08:00
pengzhile 492cfd580e plugin add datacenter property
Signed-off-by: pengzhile <pengzhile@gmail.com>
2019-10-10 12:12:47 +08:00
pengzhile 11d9af18ec add ref
Signed-off-by: pengzhile <pengzhile@gmail.com>
2019-06-20 15:46:28 +08:00
pengzhileandGitee 1e24662f50 更新 README.md 2019-06-03 09:38:38 +08:00
Neo PengandGitHub 44cf41fd63 Update Confluence_FAQ.md 2019-04-24 14:25:57 +08:00
Neo PengandGitHub 5b58d9a573 Update Confluence_FAQ.md 2019-04-24 14:25:34 +08:00
pengzhile c4861fa8f1 add confluence faq
Signed-off-by: pengzhile <pengzhile@gmail.com>
2019-04-24 14:24:29 +08:00
pengzhile 73a565ae10 add tutorial posts
Signed-off-by: pengzhile <pengzhile@gmail.com>
2019-04-19 10:27:37 +08:00
Neo PengandGitHub 10744bec65 Merge pull request #21 from materliu/master
feat: add Bamboo FAQ
2019-04-11 13:20:41 +08:00
liujuguang 3d0c38f5cb feat: add Crucible & FishEye FAQ 2019-04-10 23:29:15 +08:00
liujuguang 2b16f1988b feat: add Bamboo FAQ 2019-04-10 21:19:11 +08:00
Neo PengandGitHub 930f8f2630 Merge pull request #17 from materliu/master
feat: add Bitbucket FAQ
2019-04-09 09:51:25 +08:00
liujuguang b680f45d9c style: wrong spell 2019-04-08 20:36:29 +08:00
liujuguang 3e55d2ad1b feat: add Bitbucket FAQ 2019-04-08 20:34:42 +08:00
Neo PengandGitHub 6dd8519c83 Merge pull request #16 from materliu/master
feat: add JIRA&Crowd FAQ
2019-04-04 10:01:48 +08:00
liujuguang 31d9b2c069 feat: add JIRA&Crowd FAQ 2019-04-03 20:15:14 +08:00
pengzhile 59a60ea2ee update
Signed-off-by: pengzhile <pengzhile@gmail.com>
2019-03-18 12:10:28 +08:00
pengzhile da447a8be5 remove useless
Signed-off-by: pengzhile <pengzhile@gmail.com>
2019-03-12 14:20:25 +08:00
pengzhile 9a27cde450 update
Signed-off-by: pengzhile <pengzhile@gmail.com>
2019-03-06 10:36:28 +08:00
pengzhile 50da83e87d update readme
Signed-off-by: pengzhile <pengzhile@gmail.com>
2019-03-05 16:51:52 +08:00
pengzhile 190ea47ac4 fix jdk 11
Signed-off-by: pengzhile <pengzhile@gmail.com>
2019-03-05 15:41:33 +08:00
pengzhile d0eb2f315a support jdk11
Signed-off-by: pengzhile <pengzhile@gmail.com>
2019-03-01 10:30:38 +08:00
pengzhile 235ca21eb3 add link
Signed-off-by: pengzhile <pengzhile@gmail.com>
2019-02-28 10:35:11 +08:00
pengzhile 422f660025 update env name
Signed-off-by: pengzhile <pengzhile@gmail.com>
2018-12-10 13:36:06 +08:00
pengzhile 69e9b4edc3 add third party plugins
Signed-off-by: pengzhile <pengzhile@gmail.com>
2018-12-06 16:13:58 +08:00
pengzhile 25071349d9 update
Signed-off-by: pengzhile <pengzhile@gmail.com>
2018-12-06 10:48:15 +08:00
pengzhile 2163b56341 update readme
Signed-off-by: pengzhile <pengzhile@gmail.com>
2018-12-06 10:17:23 +08:00
35 changed files with 380 additions and 200 deletions
+33 -19
View File
@@ -1,59 +1,66 @@
# Atlassian Agent
# Atlassian Agent v1.3.1
#### Support (almost any version):
* JIRA Software
#### Support (almost any version, include 8.0):
* JIRA Software [FAQ](doc/JIRA_FAQ.md)
* JIRA Core
* JIRA Service Desk
* JIRA plugin: Capture
* JIRA plugin: Training
* JIRA plugin: Portfolio
* Confluence
* Confluence [Windows特别注意](doc/Confluence_FAQ.md)
* Confluence plugin: Questions
* Confluence plugin: Team Calendars
* Bamboo
* Bitbucket
* FishEye
* Crowd
* Crucible
* Bamboo [FAQ](doc/Bamboo_FAQ.md)
* Bitbucket [FAQ](doc/Bitbucket_FAQ.md)
* FishEye [FAQ](doc/FishEye_Crucible_FAQ.md)
* Crowd [FAQ](doc/Crowd_FAQ.md)
* Crucible [FAQ](doc/FishEye_Crucible_FAQ.md)
* Third party plugins
## 使用说明
### 优势
* 支持Atlassian家几乎所有产品,同时支持插件。
* 支持Atlassian家几乎所有产品,同时支持插件(包括插件市场的第三方插件)
* 支持DataCenter模式。
* 相比较于传统的crack来说可以很容易的升级你的服务,而不用重新再次破解。
* 提供基于java的命令行 keygen,更方便在终端环境使用。
* 开源项目,你知道破解时都做了什么。
### 直接下载
* 直接下载本项目release包。
* 直接下载本项目[release](https://gitee.com/pengzhile/atlassian-agent/releases)包。
### 自行编译
* Clone本项目源码,pom.xml同级目录执行`mvn package`后即可进行编译。
* 使用`target`目录产出的`atlassian-agent-jar-with-dependencies.jar`,而非`atlassian-agent.jar`
* *如果你不知道我在说什么,最好还是直接下载我编译好的包。*
### 使用帮助
* 破解需要成套使用,不能只破解插件,要先使用`atlassian-agent.jar`破解服务。
* 如果你已经获得`atlassian-agent.jar`,可以试着执行`java -jar atlassian-agent.jar`看看输出的帮助。
* 这里的帮助以Atlassian家的Confluence服务为例。
### 配置Agent
1.`atlassian-agent.jar`放在一个你不会随便删除的位置(你服务器上的所有Atlassian服务可共享同一个`atlassian-agent.jar`)。
2. 设置环境变量`CATALINA_OPTS`(这其实是Tomcat的环境变量,用来指定其启动java程序时附带的参数),把`-javaagent`参数附带上。具体可以这么做:
* 你可以把:`export CATALINA_OPTS="-javaagent:/path/to/atlassian-agent.jar ${CATALINA_OPTS}"`这样的命令放到`.bashrc``.bash_profile`这样的文件内。
* 你可以把:`export CATALINA_OPTS="-javaagent:/path/to/atlassian-agent.jar ${CATALINA_OPTS}"`这样的命令放到服务安装所在`bin目录`下的`setenv.sh``setenv.bat(供windows使用)`中。
* 你还可以直接命令行执行:`CATALINA_OPTS="-javaagent:/path/to/atlassian-agent.jar" /path/to/start-confluence.sh`来启动你的服务。
* 或者你所知的其他修改环境变量的方法,但如果你机器上有无关的Tomcat服务,则不建议修改全局`CATALINA_OPTS`环境变量。
3. 如果你想验证是否配置成功,可以这么做:
2. 设置环境变量`JAVA_OPTS`(这其实是Java的环境变量,用来指定其启动java程序时附带的参数),把`-javaagent`参数附带上。具体可以这么做:
* 你可以把:`export JAVA_OPTS="-javaagent:/path/to/atlassian-agent.jar ${JAVA_OPTS}"`这样的命令放到`.bashrc``.bash_profile`这样的文件内。
* 你可以把:`export JAVA_OPTS="-javaagent:/path/to/atlassian-agent.jar ${JAVA_OPTS}"`这样的命令放到服务安装所在`bin目录`下的`setenv.sh``setenv.bat(供windows使用)`中。
* 你还可以直接命令行执行:`JAVA_OPTS="-javaagent:/path/to/atlassian-agent.jar" /path/to/start-confluence.sh`来启动你的服务。
* 或者你所知的其他修改环境变量的方法,但如果你机器上有无关的服务,则不建议修改全局`JAVA_OPTS`环境变量。
* 总之你想办法把`-javaagent`参数附带到要启动的java进程上。
3. 配置完成请重启你的Confluence服务。
4. 如果你想验证是否配置成功,可以这么做:
* 执行类似命令:`ps aux|grep java` 找到对应的进程看看`-javaagent`参数是否正确附上。
* 在软件安装目录类似:`/path/to/confluence/logs/catalina.out`Tomcat日志内应该能找到:`========= agent working =========`的输出字样。
### 使用KeyGen
* 你得确认已经配置好agent,参考上面说明。
* 当你试着执行`java -jar /path/to/atlassian-agent.jar`时应该可以看到输出的KeyGen参数帮助。
* 请仔细看看每个参数的作用,特别是`-p`参数的取值范围。
* 请仔细看看每个参数的作用,特别是`-p`参数的取值范围。`-p`参数内容最好用引号包住,否则可能影响参数解析。
* 第三方插件将其`应用密钥/插件关键字`作为`-p`参数。如:`-p 'com.gliffy.integration.confluence'`
* 在Atlassian服务安装时你应该能看到类似:`AAAA-BBBB-CCCC-DDDD`的server id,请留意。
* 提供了正确的参数运行KeyGen会在终端输出计算好的激活码。
* 将生成的激活码复制出来去激活你要使用的服务。
* 举个栗子:`java -jar atlassian-agent.jar -p conf -m aaa@bbb.com -n my_name -o https://zhile.io -s ABCD-1234-EFGH-5678`
### 申明
* 本项目只做个人学习研究之用,不得用于商业用途!
@@ -65,4 +72,11 @@
* 给本项目发issue。
* 欢迎你来一起完善这个项目,请发PR。
* 你可以加入QQ群:30347511 和我实时交流。
* 访问网站:[https://zhile.io](https://zhile.io) 给我留言。
* 访问网站:[https://zhile.io](https://zhile.io) 给我留言。
### 热心网友教程(感谢原作者,侵删!)
* [热心大佬的一键安装配置脚本](https://github.com/alues/atlassian_install_script)
* [confluence 安装及破解](https://www.qinjj.tech/2019/01/04/confluence%20install/)
* [【黑科技】Atlassian产品线全破解](https://tech.cuixiangbin.com/?p=1248)
* [通过Docker安装JIRA和Confluence(破解版)](https://www.jianshu.com/p/b95ceabd3e9d)
* [通过Docker安装JIRA和Confluence(破解版)](https://my.oschina.net/wuweixiang/blog/3014644)
+15
View File
@@ -0,0 +1,15 @@
# Bamboo FAQ
### 明明按照文档中说的配置了agent,并且成功激活了confluence,但Bamboo激活时提示生成的密钥无效
这种情况往往是 `JAVA_OPTS` 设置的问题,如果是按照下边方式设置的 `JAVA_OPTS` ,会出现激活失败
* 你可以把:`export JAVA_OPTS="-javaagent:/path/to/atlassian-agent.jar ${JAVA_OPTS}"` 这样的命令放到 `.bashrc``.bash_profile` 这样的文件内。
原因即是 Bamboo 并没有使用全局设置的这个变量,主要还是依赖的其自身目录中 `安装目录下/bin/setenv.sh` 中的配置,所以编辑这个文件,修改
`JAVA_OPTS="-Xms${JVM_MINIMUM_MEMORY} -Xmx${JVM_MAXIMUM_MEMORY} ${JAVA_OPTS} ${JVM_REQUIRED_ARGS} ${JVM_SUPPORT_RECOMMENDED_ARGS} ${BAMBOO_HOME_MINUSD}"`
处为
`JAVA_OPTS="-javaagent:/atlassian-agent存放目录/atlassian-agent.jar -Xms${JVM_MINIMUM_MEMORY} -Xmx${JVM_MAXIMUM_MEMORY} ${JAVA_OPTS} ${JVM_REQUIRED_ARGS} ${JVM_SUPPORT_RECOMMENDED_ARGS} ${BAMBOO_HOME_MINUSD}"`
再重新尝试激活即可
+15
View File
@@ -0,0 +1,15 @@
# Bitbucket FAQ
### 明明按照文档中说的配置了agent,并且成功激活了confluence,但Bitbucket激活时提示生成的密钥无效
这种情况往往是 `JAVA_OPTS` 设置的问题,如果是按照下边方式设置的 `JAVA_OPTS` ,会出现激活失败
* 你可以把:`export JAVA_OPTS="-javaagent:/path/to/atlassian-agent.jar ${JAVA_OPTS}"` 这样的命令放到 `.bashrc``.bash_profile` 这样的文件内。
原因即是 Bitbucket 并没有使用全局设置的这个变量,主要还是依赖的其自身目录中 `安装目录下/bin/_start-webapp.sh` 中的配置,所以编辑这个文件,修改
`JAVA_OPTS="-classpath $INST_DIR/app $JAVA_OPTS $BITBUCKET_ARGS $JMX_OPTS $JVM_REQUIRED_ARGS $JVM_SUPPORT_RECOMMENDED_ARGS"`
处为
`JAVA_OPTS="-javaagent:/atlassian-agent存放目录/atlassian-agent.jar -classpath $INST_DIR/app $JAVA_OPTS $BITBUCKET_ARGS $JMX_OPTS $JVM_REQUIRED_ARGS $JVM_SUPPORT_RECOMMENDED_ARGS"`
再重新尝试激活即可
+15
View File
@@ -0,0 +1,15 @@
# Confluence FAQ
### Windows下Confluence的激活注意点
* 不要使用start-service.bat启动(如果非要这样启动,自己去注册表改-javaagent参数)
* 使用bin\start-confluence.bat启动
* 在bin\setenv.bat里添加-javaagent参数
* Windows下Confluence有个bug,需要改动setenv.bat修复
```bash
set CATALINA_OPTS=-Xloggc:"%atlassian_logsdir%\gc-%atlassian_timestamp%.log" %CATALINA_OPTS%
//改成
set CATALINA_OPTS=-Xloggc:"%atlassian_logsdir%\gc-%%t.log" %CATALINA_OPTS%
```
+7
View File
@@ -0,0 +1,7 @@
# Crowd FAQ
### 明明按照文档中说的配置了agent,并且成功激活了confluence,但Crowd激活时提示生成的密钥无效
这种情况往往是 `JAVA_OPTS` 设置的问题,如果是按照下边方式设置的 `JAVA_OPTS` ,会出现激活失败
* 你可以把:`export JAVA_OPTS="-javaagent:/path/to/atlassian-agent.jar ${JAVA_OPTS}"` 这样的命令放到 `.bashrc``.bash_profile` 这样的文件内。
原因即是 Crowd 并没有使用全局设置的这个变量,主要还是依赖的其自身目录中 `安装目录下/apache-tomcat/bin/setenv.sh` 中的配置,所以编辑这个文件,加上 `JAVA_OPTS="-javaagent:/atlassian-agent存放目录/atlassian-agent.jar $JAVA_OPTS"`,再重新尝试激活即可
+17
View File
@@ -0,0 +1,17 @@
# FishEye & Crucible FAQ
### 明明按照文档中说的配置了agent,并且成功激活了confluence,但 FishEye or Crucible 激活时提示生成的密钥无效
这种情况往往是 `JAVA_OPTS` 设置的问题,如果是按照下边方式设置的 `JAVA_OPTS` ,会出现激活失败
* 你可以把:`export JAVA_OPTS="-javaagent:/path/to/atlassian-agent.jar ${JAVA_OPTS}"` 这样的命令放到 `.bashrc``.bash_profile` 这样的文件内。
原因即是 FishEye 和 Crucible 没有直接使用这个环境变量,使用的是 `FISHEYE_OPTS` 这一环境变量
所以我们打开bin目录中的fisheyectl.sh文件,将其中的
```FISHEYE_CMD="$JAVACMD $FISHEYE_OPTS -Dfisheye.library.path=$FISHEYE_LIBRARY_PATH -Dfisheye.inst=$FISHEYE_INST -Djava.awt.headless=true -Djava.endorsed.dirs=$FISHEYE_HOME/lib/endorsed -jar $FISHEYE_HOME/fisheyeboot.jar"```
添加成
```FISHEYE_CMD="$JAVACMD $FISHEYE_OPTS -javaagent:/path/to/atlassian-agent-v1.2.2/atlassian-agent.jar -Dfisheye.library.path=$FISHEYE_LIBRARY_PATH -Dfisheye.inst=$FISHEYE_INST -Djava.awt.headless=true -Djava.endorsed.dirs=$FISHEYE_HOME/lib/endorsed -jar $FISHEYE_HOME/fisheyeboot.jar"```
再重新尝试激活即可。
+7
View File
@@ -0,0 +1,7 @@
# JIRA FAQ
### 明明按照文档中说的配置了agent,并且成功激活了confluence,但JIRA激活时提示生成的密钥无效
这种情况往往是 `JAVA_OPTS` 设置的问题,如果是按照下边方式设置的 `JAVA_OPTS` ,会出现激活失败
* 你可以把:`export JAVA_OPTS="-javaagent:/path/to/atlassian-agent.jar ${JAVA_OPTS}"` 这样的命令放到 `.bashrc``.bash_profile` 这样的文件内。
原因即是 JIRA 并没有使用全局设置的这个变量,主要还是依赖的其自身目录中 `安装目录下/bin/setenv.sh` 中的配置,所以编辑这个文件,加上 `JAVA_OPTS="-javaagent:/atlassian-agent存放目录/atlassian-agent.jar $JAVA_OPTS"``JAVA_OPTS` 处,再重新尝试激活即可
+7 -2
View File
@@ -20,8 +20,8 @@
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>7</source>
<target>7</target>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
@@ -72,6 +72,11 @@
<artifactId>commons-cli</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
@@ -10,10 +10,11 @@ import java.util.Map;
/**
* @author pengzhile
* @link https://zhile.io
* @version 1.0
* @link https://zhile.io
*/
public class Usage {
private static final String VERSION = "v1.3.1";
private static final Options OPTIONS = new Options();
private static final Map<String, String> PRODUCTS = new HashMap<>(16);
private static final String PRODUCTS_DESC;
@@ -31,8 +32,10 @@ public class Usage {
PRODUCTS.put("jc", "JIRA Core");
PRODUCTS.put("portfolio", "Portfolio plugin for JIRA");
PRODUCTS.put("jsd", "JIRA Service Desk");
PRODUCTS.put("jsm", "JIRA Service Management");
PRODUCTS.put("training", "Training plugin for JIRA");
PRODUCTS.put("capture", "Capture plugin for JIRA");
PRODUCTS.put("*", "Third party plugin key, looks like: com.foo.bar");
StringBuilder sb = new StringBuilder();
for (Map.Entry<String, String> entry : PRODUCTS.entrySet()) {
@@ -48,7 +51,7 @@ public class Usage {
public static void main(String[] args) {
String usage = "\n====================================================\n" +
"======= Atlassian Crack Agent =======\n" +
"======= Atlassian Crack Agent " + VERSION + " =======\n" +
"======= https://zhile.io =======\n" +
"======= QQ Group: 30347511 =======\n" +
"====================================================\n\n";
@@ -83,9 +86,9 @@ public class Usage {
formatter.printHelp("java -jar " + selfPath, OPTIONS, true);
System.out.println("\n================================================================================");
System.out.println("\n# Crack agent usage: append -javaagent arg to system environment: CATALINA_OPTS.");
System.out.println("\n# Crack agent usage: append -javaagent arg to system environment: JAVA_OPTS.");
System.out.println("# Example(execute this command or append it to setenv.sh/setenv.bat file): \n");
System.out.println(" export CATALINA_OPTS=\"-javaagent:" + selfPath + " ${CATALINA_OPTS}\"");
System.out.println(" export JAVA_OPTS=\"-javaagent:" + selfPath + " ${JAVA_OPTS}\"");
System.out.println("\n# Then start your confluence/jira server.\n");
System.exit(1);
@@ -119,41 +122,44 @@ public class Usage {
property = new TeamCalendars(contactName, contactEMail, serverID, organisation, dataCenter);
break;
case "bamboo":
property = new Bamboo(contactName, contactEMail, serverID, organisation);
property = new Bamboo(contactName, contactEMail, serverID, organisation, dataCenter);
break;
case "bitbucket":
property = new Bitbucket(contactName, contactEMail, serverID, organisation, dataCenter);
break;
case "fisheye":
property = new FishEye(contactName, contactEMail, serverID, organisation);
property = new FishEye(contactName, contactEMail, serverID, organisation, dataCenter);
break;
case "crucible":
property = new Crucible(contactName, contactEMail, serverID, organisation);
property = new Crucible(contactName, contactEMail, serverID, organisation, dataCenter);
break;
case "crowd":
property = new Crowd(contactName, contactEMail, serverID, organisation, dataCenter);
break;
case "jc":
property = new JIRACore(contactName, contactEMail, serverID, organisation);
property = new JIRACore(contactName, contactEMail, serverID, organisation, dataCenter);
break;
case "portfolio":
property = new Portfolio(contactName, contactEMail, serverID, organisation, dataCenter);
break;
case "jsd":
case "jsm":
property = new JIRAServiceDesk(contactName, contactEMail, serverID, organisation, dataCenter);
break;
case "training":
property = new Training(contactName, contactEMail, serverID, organisation);
property = new Training(contactName, contactEMail, serverID, organisation, dataCenter);
break;
case "capture":
property = new Capture(contactName, contactEMail, serverID, organisation);
property = new Capture(contactName, contactEMail, serverID, organisation, dataCenter);
break;
default:
printUsage();
return;
property = new ThirdPlugin(contactName, contactEMail, serverID, organisation, dataCenter);
((ThirdPlugin) property).setProductName(product);
break;
}
try {
property.init();
String licenseCode = Encoder.encode(property.toString());
System.out.println("Your license code(Don't copy this line!!!): \n");
@@ -4,8 +4,8 @@ import java.lang.instrument.Instrumentation;
/**
* @author pengzhile
* @link https://zhile.io
* @version 1.0
* @link https://zhile.io
*/
public class Agent {
public static void premain(String args, Instrumentation inst) {
@@ -1,6 +1,9 @@
package io.zhile.crack.atlassian.agent;
import javassist.*;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtConstructor;
import javassist.CtField;
import java.lang.instrument.ClassFileTransformer;
import java.lang.instrument.IllegalClassFormatException;
@@ -8,8 +11,8 @@ import java.security.ProtectionDomain;
/**
* @author pengzhile
* @link https://zhile.io
* @version 1.0
* @link https://zhile.io
*/
public class KeyTransformer implements ClassFileTransformer {
private static final String CN_KEY_SPEC = "java/security/spec/EncodedKeySpec";
@@ -29,21 +32,29 @@ public class KeyTransformer implements ClassFileTransformer {
private byte[] handleKeySpec() throws IllegalClassFormatException {
try {
String b64f;
ClassPool cp = ClassPool.getDefault();
cp.importPackage("java.util.Arrays");
cp.importPackage("javax.xml.bind.DatatypeConverter");
int mod = Modifier.PRIVATE | Modifier.STATIC | Modifier.FINAL;
CtClass cc = cp.get(CN_KEY_SPEC.replace('/', '.'));
CtClass cb = cp.get("byte[]");
CtField cfOld = new CtField(cb, "__h_ok", cc);
CtField cfNew = new CtField(cb, "__h_nk", cc);
cfOld.setModifiers(mod);
cfNew.setModifiers(mod);
cc.addField(cfOld, "DatatypeConverter.parseBase64Binary(\"MIIBuDCCASwGByqGSM44BAEwggEfAoGBAP1/U4EddRIpUt9KnC7s5Of2EbdSPO9EAMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdrmVClpJ+f6AR7ECLCT7up1/63xhv4O1fnxqimFQ8E+4P208UewwI1VBNaFpEy9nXzrith1yrv8iIDGZ3RSAHHAhUAl2BQjxUjC8yykrmCouuEC/BYHPUCgYEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6EwoFhO3zwkyjMim4TwWeotUfI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhRkImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoDgYUAAoGBAIvfweZvmGo5otwawI3no7Udanxal3hX2haw962KL/nHQrnC4FG2PvUFf34OecSK1KtHDPQoSQ+DHrfdf6vKUJphw0Kn3gXm4LS8VK/LrY7on/wh2iUobS2XlhuIqEc5mLAUu9Hd+1qxsQkQ50d0lzKrnDqPsM0WA9htkdJJw2nS\");");
cc.addField(cfNew, "DatatypeConverter.parseBase64Binary(\"MIIBuDCCASwGByqGSM44BAEwggEfAoGBAP1/U4EddRIpUt9KnC7s5Of2EbdSPO9EAMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdrmVClpJ+f6AR7ECLCT7up1/63xhv4O1fnxqimFQ8E+4P208UewwI1VBNaFpEy9nXzrith1yrv8iIDGZ3RSAHHAhUAl2BQjxUjC8yykrmCouuEC/BYHPUCgYEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6EwoFhO3zwkyjMim4TwWeotUfI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhRkImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoDgYUAAoGBAO0DidNibJHhtgxAnM9NszURYU25CVLAlwFdOWhiUkjrjOY459ObRZDVd35hQmN/cCLkDox7y2InJE6PDWfbx9BsgPmPvH75yKgPs3B8pClQVkgIpJp08R59hoZabYuvm7mxCyDGTl2lbrOi0a3j4vM5OoCWKQjIEZ28OpjTyCr3\");");
cp.importPackage("java.util.Arrays");
try {
Class.forName("java.util.Base64");
cp.importPackage("java.util.Base64");
b64f = "Base64.getDecoder().decode";
} catch (ClassNotFoundException e) {
try {
Class.forName("javax.xml.bind.DatatypeConverter");
cp.importPackage("javax.xml.bind.DatatypeConverter");
b64f = "DatatypeConverter.parseBase64Binary";
} catch (ClassNotFoundException e1) {
throw new RuntimeException(e1);
}
}
cc.addField(CtField.make("private static final byte[] __h_ok1=" + b64f + "(\"MIIBuDCCASwGByqGSM44BAEwggEfAoGBAP1/U4EddRIpUt9KnC7s5Of2EbdSPO9EAMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdrmVClpJ+f6AR7ECLCT7up1/63xhv4O1fnxqimFQ8E+4P208UewwI1VBNaFpEy9nXzrith1yrv8iIDGZ3RSAHHAhUAl2BQjxUjC8yykrmCouuEC/BYHPUCgYEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6EwoFhO3zwkyjMim4TwWeotUfI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhRkImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoDgYUAAoGBAIvfweZvmGo5otwawI3no7Udanxal3hX2haw962KL/nHQrnC4FG2PvUFf34OecSK1KtHDPQoSQ+DHrfdf6vKUJphw0Kn3gXm4LS8VK/LrY7on/wh2iUobS2XlhuIqEc5mLAUu9Hd+1qxsQkQ50d0lzKrnDqPsM0WA9htkdJJw2nS\");", cc));
cc.addField(CtField.make("private static final byte[] __h_ok2=" + b64f + "(\"MIIBtzCCASwGByqGSM44BAEwggEfAoGBAP1/U4EddRIpUt9KnC7s5Of2EbdSPO9EAMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdrmVClpJ+f6AR7ECLCT7up1/63xhv4O1fnxqimFQ8E+4P208UewwI1VBNaFpEy9nXzrith1yrv8iIDGZ3RSAHHAhUAl2BQjxUjC8yykrmCouuEC/BYHPUCgYEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6EwoFhO3zwkyjMim4TwWeotUfI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhRkImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoDgYQAAoGALZHuJwQzgGnYm/X9BkMcewYQnWjMIGWHd9Yom5Qw7cVIdiZkqpiSzSKurO/WAHHLN31obg7NgGkitWUysECRE3zuJVbKGhx9xjVMnP6z5SwI89vB7Gn7UWxoCvT0JZgcMyQobXeVBtM9J3EgzkdDx/+Dck7uz/l1y+HDNdRzW00=\");", cc));
cc.addField(CtField.make("private static final byte[] __h_nk=" + b64f + "(\"MIIBuDCCASwGByqGSM44BAEwggEfAoGBAP1/U4EddRIpUt9KnC7s5Of2EbdSPO9EAMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdrmVClpJ+f6AR7ECLCT7up1/63xhv4O1fnxqimFQ8E+4P208UewwI1VBNaFpEy9nXzrith1yrv8iIDGZ3RSAHHAhUAl2BQjxUjC8yykrmCouuEC/BYHPUCgYEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6EwoFhO3zwkyjMim4TwWeotUfI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhRkImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoDgYUAAoGBAO0DidNibJHhtgxAnM9NszURYU25CVLAlwFdOWhiUkjrjOY459ObRZDVd35hQmN/cCLkDox7y2InJE6PDWfbx9BsgPmPvH75yKgPs3B8pClQVkgIpJp08R59hoZabYuvm7mxCyDGTl2lbrOi0a3j4vM5OoCWKQjIEZ28OpjTyCr3\");", cc));
CtConstructor cm = cc.getConstructor("([B)V");
cm.insertBeforeBody("if(Arrays.equals($1,__h_ok)){$1=__h_nk;System.out.println(\"============================== agent working ==============================\");}");
cm.insertBefore("if(Arrays.equals($1,__h_ok1)||Arrays.equals($1,__h_ok2)){$1=__h_nk;System.out.println(\"============================== agent working ==============================\");}");
return cc.toBytecode();
} catch (Exception e) {
@@ -6,7 +6,10 @@ import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.security.*;
import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.Signature;
import java.security.spec.EncodedKeySpec;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
@@ -32,7 +35,7 @@ public class Encoder {
}
}
public static String encode(String licenseText) throws IOException, NoSuchAlgorithmException, InvalidKeyException, SignatureException {
public static String encode(String licenseText) throws Exception {
byte[] licenseData = zipText(licenseText.getBytes());
byte[] text = new byte[licenseData.length + 5];
text[0] = 13; // license prefix
@@ -42,11 +45,15 @@ public class Encoder {
text[4] = 15;
System.arraycopy(licenseData, 0, text, 5, licenseData.length);
return packLicense(text, sign(text));
}
public static byte[] sign(byte[] bytes) throws Exception {
Signature signature = Signature.getInstance("SHA1withDSA");
signature.initSign(PRIVATE_KEY);
signature.update(text);
signature.update(bytes);
return packLicense(text, signature.sign());
return signature.sign();
}
private static byte[] zipText(byte[] licenseText) throws IOException {
@@ -2,8 +2,8 @@ package io.zhile.crack.atlassian.license;
/**
* @author pengzhile
* @link https://zhile.io
* @version 1.0
* @link https://zhile.io
*/
public enum LicenseEdition {
BASIC,
@@ -1,22 +1,41 @@
package io.zhile.crack.atlassian.license;
import io.zhile.crack.atlassian.keygen.Encoder;
import io.zhile.crack.atlassian.utils.Base64;
import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeSet;
/**
* @author pengzhile
* @link https://zhile.io
* @version 1.0
* @link https://zhile.io
*/
abstract public class LicenseProperty {
protected Date date = new Date();
protected Map<String, String> data = new HashMap<>(32);
protected String contactName;
protected String contactEMail;
protected String serverID;
protected String organisation;
protected boolean dataCenter;
abstract public String getProductName();
public LicenseProperty(String ContactName, String ContactEMail, String ServerID, String Organisation, boolean dataCenter) {
public LicenseProperty(String contactName, String contactEMail, String serverID, String organisation, boolean dataCenter) {
this.contactName = contactName;
this.contactEMail = contactEMail;
this.serverID = serverID;
this.organisation = organisation;
this.dataCenter = dataCenter;
}
public void init() {
Date expiryDate = new Date(3771590399000L);
String licenseId = "L" + System.currentTimeMillis();
@@ -33,17 +52,14 @@ abstract public class LicenseProperty {
setDescription("Unlimited license by https://zhile.io");
setEvaluation(false);
setContactName(ContactName);
setContactEMail(ContactEMail);
setServerID(ServerID);
setOrganisation(Organisation);
setContactName(contactName);
setContactEMail(contactEMail);
setServerID(serverID);
setOrganisation(organisation);
setDataCenter(dataCenter);
data.put("licenseVersion", "2");
}
public LicenseProperty(String ContactName, String ContactEMail, String ServerID, String Organisation) {
this(ContactName, ContactEMail, ServerID, Organisation, false);
setLicenseVersion("2");
setKeyVersion("1600708331");
}
public void setDescription(String description) {
@@ -110,6 +126,14 @@ abstract public class LicenseProperty {
data.put("PurchaseDate", new SimpleDateFormat("yyyy-MM-dd").format(purchaseDate));
}
public void setLicenseVersion(String version) {
data.put("licenseVersion", version);
}
public void setKeyVersion(String version) {
data.put("keyVersion", version);
}
public void setDataCenter(boolean dataCenter) {
if (dataCenter) {
data.put(productProperty("DataCenter"), "true");
@@ -124,11 +148,74 @@ abstract public class LicenseProperty {
return getProductName() + "." + property;
}
protected void setLicenseHash() {
data.remove("licenseHash");
StringBuilder sb = new StringBuilder();
for (String key : new TreeSet<>(data.keySet())) {
String val = data.get(key);
if (val == null) {
continue;
}
sb.append(escape(key, true)).append("=").append(escape(val, false)).append("\n");
}
try {
data.put("licenseHash", Base64.encode(Encoder.sign(sb.toString().getBytes(StandardCharsets.UTF_8))));
} catch (Exception e) {
// never
}
}
protected String escape(String str, boolean isKey) {
int len = str.length();
StringBuilder sb = new StringBuilder(len * 2);
for (int index = 0; index < len; ++index) {
char c = str.charAt(index);
switch (c) {
case '\t':
sb.append("\\t");
break;
case '\n':
sb.append("\\n");
break;
case '\f':
sb.append("\\f");
break;
case '\r':
sb.append("\\r");
break;
case ' ':
if (index == 0 || isKey) {
sb.append('\\');
}
sb.append(' ');
break;
case '\\':
sb.append("\\\\");
break;
default:
if ("=: \t\r\n\f#!".indexOf(c) != -1) {
sb.append('\\');
}
sb.append(c);
break;
}
}
return sb.toString();
}
@Override
public final String toString() {
StringBuilder sb = new StringBuilder("#");
sb.append(date.toString());
setLicenseHash();
for (Map.Entry<String, String> entry : data.entrySet()) {
if (entry.getValue() == null) {
continue;
@@ -2,8 +2,8 @@ package io.zhile.crack.atlassian.license;
/**
* @author pengzhile
* @link https://zhile.io
* @version 1.0
* @link https://zhile.io
*/
public enum LicenseType {
ACADEMIC,
@@ -5,12 +5,17 @@ import io.zhile.crack.atlassian.license.LicenseProperty;
/**
* @author pengzhile
* @link https://zhile.io
* @version 1.0
* @link https://zhile.io
*/
public class Bamboo extends LicenseProperty {
public Bamboo(String ContactName, String ContactEMail, String ServerID, String Organisation) {
super(ContactName, ContactEMail, ServerID, Organisation);
public Bamboo(String contactName, String contactEMail, String serverID, String organisation, boolean dataCenter) {
super(contactName, contactEMail, serverID, organisation, dataCenter);
}
@Override
public void init() {
super.init();
setLicenseEdition(LicenseEdition.UNLIMITED);
setNumberOfBambooLocalAgents(-1);
@@ -25,7 +30,7 @@ public class Bamboo extends LicenseProperty {
@Override
public void setNumberOfUsers(int numberOfUsers) {
//
// disabled
}
public void setLicenseEdition(LicenseEdition licenseEdition) {
@@ -4,16 +4,12 @@ import io.zhile.crack.atlassian.license.LicenseProperty;
/**
* @author pengzhile
* @link https://zhile.io
* @version 1.0
* @link https://zhile.io
*/
public class Bitbucket extends LicenseProperty {
public Bitbucket(String ContactName, String ContactEMail, String ServerID, String Organisation, boolean dataCenter) {
super(ContactName, ContactEMail, ServerID, Organisation, dataCenter);
}
public Bitbucket(String ContactName, String ContactEMail, String ServerID, String Organisation) {
this(ContactName, ContactEMail, ServerID, Organisation, false);
public Bitbucket(String contactName, String contactEMail, String serverID, String organisation, boolean dataCenter) {
super(contactName, contactEMail, serverID, organisation, dataCenter);
}
@Override
@@ -1,26 +1,14 @@
package io.zhile.crack.atlassian.license.products;
import io.zhile.crack.atlassian.license.LicenseType;
/**
* @author pengzhile
* @link https://zhile.io
* @version 1.0
* @link https://zhile.io
*/
public class Capture extends Plugin {
public Capture(String ContactName, String ContactEMail, String ServerID, String Organisation) {
super(ContactName, ContactEMail, ServerID, Organisation);
public class Capture extends ThirdPlugin {
public Capture(String contactName, String contactEMail, String serverID, String organisation, boolean dataCenter) {
super(contactName, contactEMail, serverID, organisation, dataCenter);
setServerID(null);
}
@Override
public String getProductName() {
return "bonfire";
}
@Override
public void setLicenseType(LicenseType licenseType) {
data.put("LicenseTypeName", licenseType.toString());
setProductName("bonfire");
}
}
@@ -4,16 +4,12 @@ import io.zhile.crack.atlassian.license.LicenseProperty;
/**
* @author pengzhile
* @link https://zhile.io
* @version 1.0
* @link https://zhile.io
*/
public class Confluence extends LicenseProperty {
public Confluence(String ContactName, String ContactEMail, String ServerID, String Organisation, boolean dataCenter) {
super(ContactName, ContactEMail, ServerID, Organisation, dataCenter);
}
public Confluence(String ContactName, String ContactEMail, String ServerID, String Organisation) {
this(ContactName, ContactEMail, ServerID, Organisation, false);
public Confluence(String contactName, String contactEMail, String serverID, String organisation, boolean dataCenter) {
super(contactName, contactEMail, serverID, organisation, dataCenter);
}
@Override
@@ -4,16 +4,12 @@ import io.zhile.crack.atlassian.license.LicenseProperty;
/**
* @author pengzhile
* @link https://zhile.io
* @version 1.0
* @link https://zhile.io
*/
public class Crowd extends LicenseProperty {
public Crowd(String ContactName, String ContactEMail, String ServerID, String Organisation, boolean dataCenter) {
super(ContactName, ContactEMail, ServerID, Organisation, dataCenter);
}
public Crowd(String ContactName, String ContactEMail, String ServerID, String Organisation) {
this(ContactName, ContactEMail, ServerID, Organisation, false);
public Crowd(String contactName, String contactEMail, String serverID, String organisation, boolean dataCenter) {
super(contactName, contactEMail, serverID, organisation, dataCenter);
}
@Override
@@ -4,12 +4,12 @@ import io.zhile.crack.atlassian.license.LicenseProperty;
/**
* @author pengzhile
* @link https://zhile.io
* @version 1.0
* @link https://zhile.io
*/
public class Crucible extends LicenseProperty {
public Crucible(String ContactName, String ContactEMail, String ServerID, String Organisation) {
super(ContactName, ContactEMail, ServerID, Organisation);
public Crucible(String contactName, String contactEMail, String serverID, String organisation, boolean dataCenter) {
super(contactName, contactEMail, serverID, organisation, dataCenter);
}
@Override
@@ -4,12 +4,12 @@ import io.zhile.crack.atlassian.license.LicenseProperty;
/**
* @author pengzhile
* @link https://zhile.io
* @version 1.0
* @link https://zhile.io
*/
public class FishEye extends LicenseProperty {
public FishEye(String ContactName, String ContactEMail, String ServerID, String Organisation) {
super(ContactName, ContactEMail, ServerID, Organisation);
public FishEye(String contactName, String contactEMail, String serverID, String organisation, boolean dataCenter) {
super(contactName, contactEMail, serverID, organisation, dataCenter);
}
@Override
@@ -6,12 +6,17 @@ import io.zhile.crack.atlassian.license.LicenseType;
/**
* @author pengzhile
* @link https://zhile.io
* @version 1.0
* @link https://zhile.io
*/
public class JIRACore extends LicenseProperty {
public JIRACore(String ContactName, String ContactEMail, String ServerID, String Organisation) {
super(ContactName, ContactEMail, ServerID, Organisation);
public JIRACore(String contactName, String contactEMail, String serverID, String organisation, boolean dataCenter) {
super(contactName, contactEMail, serverID, organisation, dataCenter);
}
@Override
public void init() {
super.init();
setLicenseEdition(LicenseEdition.UNLIMITED);
}
@@ -5,21 +5,22 @@ import io.zhile.crack.atlassian.license.LicenseType;
/**
* @author pengzhile
* @link https://zhile.io
* @version 1.0
* @link https://zhile.io
*/
public class JIRAServiceDesk extends LicenseProperty {
public JIRAServiceDesk(String ContactName, String ContactEMail, String ServerID, String Organisation, boolean dataCenter) {
super(ContactName, ContactEMail, ServerID, Organisation, dataCenter);
public JIRAServiceDesk(String contactName, String contactEMail, String serverID, String organisation, boolean dataCenter) {
super(contactName, contactEMail, serverID, organisation, dataCenter);
}
@Override
public void init() {
super.init();
setEnterprise(true);
setNumRoleCount(-1);
}
public JIRAServiceDesk(String ContactName, String ContactEMail, String ServerID, String Organisation) {
this(ContactName, ContactEMail, ServerID, Organisation, false);
}
@Override
public String getProductName() {
return "jira.product.jira-servicedesk";
@@ -6,21 +6,22 @@ import io.zhile.crack.atlassian.license.LicenseType;
/**
* @author pengzhile
* @link https://zhile.io
* @version 1.0
* @link https://zhile.io
*/
public class JIRASoftware extends LicenseProperty {
public JIRASoftware(String ContactName, String ContactEMail, String ServerID, String Organisation, boolean dataCenter) {
super(ContactName, ContactEMail, ServerID, Organisation, dataCenter);
public JIRASoftware(String contactName, String contactEMail, String serverID, String organisation, boolean dataCenter) {
super(contactName, contactEMail, serverID, organisation, dataCenter);
}
@Override
public void init() {
super.init();
setLicenseEdition(LicenseEdition.UNLIMITED);
setEnterprise(true);
}
public JIRASoftware(String ContactName, String ContactEMail, String ServerID, String Organisation) {
this(ContactName, ContactEMail, ServerID, Organisation, false);
}
@Override
public String getProductName() {
return "jira.product.jira-software";
@@ -4,21 +4,22 @@ import io.zhile.crack.atlassian.license.LicenseProperty;
/**
* @author pengzhile
* @link https://zhile.io
* @version 1.0
* @link https://zhile.io
*/
abstract public class Plugin extends LicenseProperty {
Plugin(String ContactName, String ContactEMail, String ServerID, String Organisation, boolean dataCenter) {
super(ContactName, ContactEMail, ServerID, Organisation, dataCenter);
public Plugin(String contactName, String contactEMail, String serverID, String organisation, boolean dataCenter) {
super(contactName, contactEMail, serverID, organisation, dataCenter);
}
@Override
public void init() {
super.init();
setLicenseID(null);
setEnterprise(true);
}
Plugin(String ContactName, String ContactEMail, String ServerID, String Organisation) {
this(ContactName, ContactEMail, ServerID, Organisation, false);
}
@Override
public void setNumberOfUsers(int numberOfUsers) {
data.put("NumberOfUsers", String.valueOf(numberOfUsers));
@@ -2,16 +2,12 @@ package io.zhile.crack.atlassian.license.products;
/**
* @author pengzhile
* @link https://zhile.io
* @version 1.0
* @link https://zhile.io
*/
public class Portfolio extends Plugin {
public Portfolio(String ContactName, String ContactEMail, String ServerID, String Organisation, boolean dataCenter) {
super(ContactName, ContactEMail, ServerID, Organisation, dataCenter);
}
public Portfolio(String ContactName, String ContactEMail, String ServerID, String Organisation) {
this(ContactName, ContactEMail, ServerID, Organisation, false);
public Portfolio(String contactName, String contactEMail, String serverID, String organisation, boolean dataCenter) {
super(contactName, contactEMail, serverID, organisation, dataCenter);
}
@Override
@@ -2,16 +2,12 @@ package io.zhile.crack.atlassian.license.products;
/**
* @author pengzhile
* @link https://zhile.io
* @version 1.0
* @link https://zhile.io
*/
public class Questions extends Plugin {
public Questions(String ContactName, String ContactEMail, String ServerID, String Organisation, boolean dataCenter) {
super(ContactName, ContactEMail, ServerID, Organisation, dataCenter);
}
public Questions(String ContactName, String ContactEMail, String ServerID, String Organisation) {
this(ContactName, ContactEMail, ServerID, Organisation, false);
public Questions(String contactName, String contactEMail, String serverID, String organisation, boolean dataCenter) {
super(contactName, contactEMail, serverID, organisation, dataCenter);
}
@Override
@@ -2,16 +2,12 @@ package io.zhile.crack.atlassian.license.products;
/**
* @author pengzhile
* @link https://zhile.io
* @version 1.0
* @link https://zhile.io
*/
public class TeamCalendars extends Plugin {
public TeamCalendars(String ContactName, String ContactEMail, String ServerID, String Organisation, boolean dataCenter) {
super(ContactName, ContactEMail, ServerID, Organisation, dataCenter);
}
public TeamCalendars(String ContactName, String ContactEMail, String ServerID, String Organisation) {
this(ContactName, ContactEMail, ServerID, Organisation, false);
public TeamCalendars(String contactName, String contactEMail, String serverID, String organisation, boolean dataCenter) {
super(contactName, contactEMail, serverID, organisation, dataCenter);
}
@Override
@@ -0,0 +1,30 @@
package io.zhile.crack.atlassian.license.products;
import io.zhile.crack.atlassian.license.LicenseType;
/**
* @author pengzhile
* @version 1.0
* @link https://zhile.io
*/
public class ThirdPlugin extends Plugin {
protected String productName;
public ThirdPlugin(String contactName, String contactEMail, String serverID, String organisation, boolean dataCenter) {
super(contactName, contactEMail, serverID, organisation, dataCenter);
}
@Override
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
@Override
public void setLicenseType(LicenseType licenseType) {
data.put("LicenseTypeName", licenseType.toString());
}
}
@@ -2,12 +2,17 @@ package io.zhile.crack.atlassian.license.products;
/**
* @author pengzhile
* @link https://zhile.io
* @version 1.0
* @link https://zhile.io
*/
public class Training extends Plugin {
public Training(String ContactName, String ContactEMail, String ServerID, String Organisation) {
super(ContactName, ContactEMail, ServerID, Organisation);
public Training(String contactName, String contactEMail, String serverID, String organisation, boolean dataCenter) {
super(contactName, contactEMail, serverID, organisation, dataCenter);
}
@Override
public void init() {
super.init();
setSubscription(true);
}
@@ -4,8 +4,8 @@ import javax.xml.bind.DatatypeConverter;
/**
* @author pengzhile
* @link https://zhile.io
* @version 1.0
* @link https://zhile.io
*/
public class Base64 {
public static byte[] decode(String val) {
@@ -1,21 +0,0 @@
package io.zhile.crack.atlassian.utils;
import java.security.*;
/**
* @author pengzhile
* @link https://zhile.io
* @version 1.0
*/
public class DSA {
public static void genKeyPair() throws NoSuchAlgorithmException {
KeyPairGenerator dsa = KeyPairGenerator.getInstance("DSA");
SecureRandom random = new SecureRandom();
dsa.initialize(1024, random);
KeyPair keypair = dsa.generateKeyPair();
PrivateKey privateKey = keypair.getPrivate();
PublicKey publicKey = keypair.getPublic();
System.out.println(Base64.encode(privateKey.getEncoded()));
System.out.println(Base64.encode(publicKey.getEncoded()));
}
}
-7
View File
@@ -1,7 +0,0 @@
MIIBSwIBADCCASwGByqGSM44BAEwggEfAoGBAP1/U4EddRIpUt9KnC7s5Of2EbdS
PO9EAMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdrmVCl
pJ+f6AR7ECLCT7up1/63xhv4O1fnxqimFQ8E+4P208UewwI1VBNaFpEy9nXzrith
1yrv8iIDGZ3RSAHHAhUAl2BQjxUjC8yykrmCouuEC/BYHPUCgYEA9+GghdabPd7L
vKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6EwoFhO3
zwkyjMim4TwWeotUfI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhRkImo
g9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoEFgIUNYsbkapILzW8VhfGrU4eHo6/Dqw=
-10
View File
@@ -1,10 +0,0 @@
MIIBuDCCASwGByqGSM44BAEwggEfAoGBAP1/U4EddRIpUt9KnC7s5Of2EbdSPO9E
AMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdrmVClpJ+f
6AR7ECLCT7up1/63xhv4O1fnxqimFQ8E+4P208UewwI1VBNaFpEy9nXzrith1yrv
8iIDGZ3RSAHHAhUAl2BQjxUjC8yykrmCouuEC/BYHPUCgYEA9+GghdabPd7LvKtc
NrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6EwoFhO3zwky
jMim4TwWeotUfI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhRkImog9/h
WuWfBpKLZl6Ae1UlZAFMO/7PSSoDgYUAAoGBAO0DidNibJHhtgxAnM9NszURYU25
CVLAlwFdOWhiUkjrjOY459ObRZDVd35hQmN/cCLkDox7y2InJE6PDWfbx9BsgPmP
vH75yKgPs3B8pClQVkgIpJp08R59hoZabYuvm7mxCyDGTl2lbrOi0a3j4vM5OoCW
KQjIEZ28OpjTyCr3