acdr-ui/tootls/JRebel激活工具/JrebelMain.java

146 lines
5.3 KiB
Java

package JRebel激活工具;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileOutputStream;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.*;
public class JrebelMain {
private final static String url = "https://headless.zeroturnaround.com/public/api/registrations/add-jrebel-evaluation.php";
public static void main(String[] args) {
JFrame jf = new JFrame("JrebelEvaluation");
jf.setSize(240, 320);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
jf.setLocationRelativeTo(null);
// 创建内容面板,指定使用 流式布局
JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER, 100, 5));
JButton button = new JButton();
button.setText("Get License");
button.addActionListener(new JrebelMain.ButtonClick());
panel.add(button);
jf.setContentPane(panel);
jf.setVisible(true); // PS: 最后再设置为可显示(绘制), 所有添加的组件才会显示
}
public static int randNumber(int max, int min) {
return min + (int) (Math.random() * (max - min + 1));
}
public static String uuid() {
return UUID.randomUUID().toString().replaceAll("-", "");
}
public static String subText(String source, String startText, String endText, int offSet) {
int start = source.indexOf(startText, offSet) + 1;
if (start == -1) {
return null;
}
int end = source.indexOf(endText, start + offSet + startText.length() - 1);
if (end == -1) {
end = source.length();
}
return source.substring(start + startText.length() - 1, end);
}
static class ButtonClick implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
try {
action();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
private static void action() throws Exception {
final File jrebelHome = new File(System.getProperty("user.home") + "/.jrebel");
final String[] jrebelFiless = new String[]{
"jrebel.prefs",
"jrebel.prefs.lock",
"jrebel.properties"
};
// 删除 jrebel 配置文件
Arrays.stream(jrebelFiless).map(it -> new File(jrebelHome.getAbsolutePath() + "/" + it)).filter(it -> it.exists()).forEach(it -> it.delete());
//write license jrebel.lic
StringBuffer phone = new StringBuffer();
for (int i = 0; i < randNumber(6, 11); i++) {
phone.append(randNumber(0, 9));
}
Map<String, Object> body = new HashMap<>() {{
put("referer_url", "IDE");
put("email", uuid() + "%40qq.com");
put("first_name", uuid().substring(0, randNumber(3, 5)));
put("last_name", uuid().substring(0, randNumber(3, 6)));
put("phone", phone.toString());
put("organization", uuid().substring(0, randNumber(1, 5)));
put("output_format", "json");
put("client_os", "Windows+11");
put("guid", uuid());
put("jrebel-version", "2023.1.2");
put("ide", "intellij");
put("ide-product", "IU");
put("ide-version", "2022.3.3");
put("jvm.version", "17.0." + randNumber(0, 20));
put("jvm.vendor", "JetBrains+s.r.o");
put("os.name", "Windows+11");
}};
String queryText = String.join("&", body.entrySet().stream().map(it -> it.getKey() + "=" + it.getValue()).toArray(String[]::new));
final URI uri = URI.create(url + "?" + queryText);
final HttpClient httpClient = HttpClient.newBuilder()
.build();
final HttpRequest request = HttpRequest.newBuilder()
.version(HttpClient.Version.HTTP_1_1)
.GET()
.uri(uri)
.build();
String ret = httpClient.send(request, HttpResponse.BodyHandlers.ofString()).body();
String content = subText(ret, "content\":\"", "\"", 0);
System.out.println(content);
byte[] bin = Base64.getMimeDecoder().decode(content);
File jrebelLicFile = new File(jrebelHome.getAbsolutePath() + "/jrebel.lic");
FileOutputStream jrebelLicOutputStream = new FileOutputStream(jrebelLicFile);
jrebelLicOutputStream.write(bin);
jrebelLicOutputStream.flush();
jrebelLicOutputStream.close();
//write jrebel.properties
FileOutputStream jrebelPropertiesOutputStream = new FileOutputStream(jrebelHome.getAbsolutePath() + "/jrebel.properties");
jrebelPropertiesOutputStream.write(("rebel.license=" + jrebelLicFile.getAbsolutePath() + "\r\n").getBytes());
jrebelPropertiesOutputStream.write(("rebel.preferred.license=0\r\n").getBytes());
jrebelPropertiesOutputStream.write(("rebel.properties.version=2\r\n").getBytes());
jrebelPropertiesOutputStream.flush();
jrebelPropertiesOutputStream.close();
JOptionPane.showMessageDialog(null, "please restart idea , license : \n" + jrebelLicFile.getAbsolutePath());
}
}