From 2a008454f7fef2aa7f84915443e753f530fbb5fa Mon Sep 17 00:00:00 2001 From: 4ra1n <2023503307@qq.com> Date: Wed, 7 Aug 2024 23:54:26 +0800 Subject: [PATCH] =?UTF-8?q?[=E9=87=8D=E8=A6=81]=20=E6=94=AF=E6=8C=81=20`GU?= =?UTF-8?q?I`=20=E7=95=8C=E9=9D=A2=EF=BC=88beta=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.MD | 3 + pom.xml | 27 + .../java/me/n1ar4/jar/obfuscator/Main.java | 7 + .../n1ar4/jar/obfuscator/config/BaseCmd.java | 10 + .../me/n1ar4/jar/obfuscator/gui/MainForm.form | 654 ++++++++++++++++++ .../me/n1ar4/jar/obfuscator/gui/MainForm.java | 540 +++++++++++++++ .../n1ar4/jar/obfuscator/utils/DirUtil.java | 2 +- 7 files changed, 1242 insertions(+), 1 deletion(-) create mode 100644 src/main/java/me/n1ar4/jar/obfuscator/gui/MainForm.form create mode 100644 src/main/java/me/n1ar4/jar/obfuscator/gui/MainForm.java diff --git a/CHANGELOG.MD b/CHANGELOG.MD index 940d02d..204f39e 100644 --- a/CHANGELOG.MD +++ b/CHANGELOG.MD @@ -2,10 +2,13 @@ ## 0.1.2 +支持了 `GUI` 界面,但没有过多测试,之后逐步完善 + 解决了目标代码写法存在 `class.getResource("/dir/")` 时得到 `null` 的问题,这是最终打包 `JAR` 部分的代码问题 更新日志: +- [重要] 支持 `GUI` 界面(beta) - [功能] 字符串替换时处理反射字符串类名 - [功能] 添加对泛型 `signature` 的处理 - [优化] 优化 `builtin` 黑名单解析和注释 diff --git a/pom.xml b/pom.xml index d2889cc..38e000f 100644 --- a/pom.xml +++ b/pom.xml @@ -16,6 +16,8 @@ 9.7 1.82 2.2 + 3.5 + 7.0.3 3.3.1 @@ -55,6 +57,31 @@ snakeyaml ${snake.yaml.version} + + com.formdev + flatlaf + ${flatlaf.version} + + + com.intellij + forms_rt + ${idea.forms.version} + + + + asm + asm + + + asm + asm-commons + + + asm + asm-tree + + + diff --git a/src/main/java/me/n1ar4/jar/obfuscator/Main.java b/src/main/java/me/n1ar4/jar/obfuscator/Main.java index 288eeb5..8f83a12 100644 --- a/src/main/java/me/n1ar4/jar/obfuscator/Main.java +++ b/src/main/java/me/n1ar4/jar/obfuscator/Main.java @@ -6,6 +6,7 @@ import me.n1ar4.jar.obfuscator.config.Manager; import me.n1ar4.jar.obfuscator.config.Parser; import me.n1ar4.jar.obfuscator.core.Runner; +import me.n1ar4.jar.obfuscator.gui.MainForm; import me.n1ar4.log.LogManager; import me.n1ar4.log.Logger; @@ -29,6 +30,12 @@ public static void main(String[] args) { commander.usage(); return; } + + if (baseCmd.isGui()){ + MainForm.start(); + return; + } + if (baseCmd.isCheck()) { return; } diff --git a/src/main/java/me/n1ar4/jar/obfuscator/config/BaseCmd.java b/src/main/java/me/n1ar4/jar/obfuscator/config/BaseCmd.java index 2490a77..df18ed6 100644 --- a/src/main/java/me/n1ar4/jar/obfuscator/config/BaseCmd.java +++ b/src/main/java/me/n1ar4/jar/obfuscator/config/BaseCmd.java @@ -13,6 +13,16 @@ public class BaseCmd { private boolean check; @Parameter(names = {"-v", "--version"}, description = "version") private boolean version; + @Parameter(names = {"-gui","--gui"},description = "use GUI") + private boolean gui; + + public boolean isGui() { + return gui; + } + + public void setGui(boolean gui) { + this.gui = gui; + } public boolean isVersion() { return version; diff --git a/src/main/java/me/n1ar4/jar/obfuscator/gui/MainForm.form b/src/main/java/me/n1ar4/jar/obfuscator/gui/MainForm.form new file mode 100644 index 0000000..d61a105 --- /dev/null +++ b/src/main/java/me/n1ar4/jar/obfuscator/gui/MainForm.form @@ -0,0 +1,654 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/main/java/me/n1ar4/jar/obfuscator/gui/MainForm.java b/src/main/java/me/n1ar4/jar/obfuscator/gui/MainForm.java new file mode 100644 index 0000000..e031dd1 --- /dev/null +++ b/src/main/java/me/n1ar4/jar/obfuscator/gui/MainForm.java @@ -0,0 +1,540 @@ +package me.n1ar4.jar.obfuscator.gui; + +import com.formdev.flatlaf.FlatDarkLaf; +import com.intellij.uiDesigner.core.GridConstraints; +import com.intellij.uiDesigner.core.GridLayoutManager; +import me.n1ar4.jar.obfuscator.Const; +import me.n1ar4.jar.obfuscator.config.BaseConfig; +import me.n1ar4.jar.obfuscator.config.Manager; +import me.n1ar4.jar.obfuscator.core.Runner; + +import javax.swing.*; +import javax.swing.border.TitledBorder; +import javax.swing.filechooser.FileFilter; +import java.awt.*; +import java.io.File; +import java.nio.file.Path; +import java.nio.file.Paths; + +public class MainForm { + private JPanel rootPanel; + private JTextField jarText; + private JButton jarBtn; + private JLabel jarLabel; + private JPanel mainPanel; + private JRadioButton debugRadioButton; + private JRadioButton infoRadioButton; + private JRadioButton warnRadioButton; + private JRadioButton errorRadioButton; + private JLabel logLevelLabel; + private JPanel logLevelPanel; + private JTextField mainClassText; + private JLabel mainClassLabel; + private JTextField obfCharsText; + private JTextField obfPackText; + private JTextField rootPackText; + private JPanel obfuscateListPanel; + private JLabel obfCharsLabel; + private JLabel obfPackLabel; + private JLabel rootPackLabel; + private JPanel blackWhitePanel; + private JTextField classBlackText; + private JTextField classBlackRegexText; + private JTextField methodBlackText; + private JLabel classBlackLabel; + private JLabel classBlackRegexLabel; + private JLabel methodBlackLabel; + private JPanel mainConfigPanel; + private JCheckBox classNameObfuscateCheckBox; + private JCheckBox packageNameObfuscateCheckBox; + private JCheckBox methodNameObfuscateCheckBox; + private JCheckBox fieldNameObfuscateCheckBox; + private JCheckBox parameterNameObfuscateCheckBox; + private JCheckBox autoModifyManifestCheckBox; + private JCheckBox enableHideMethodCheckBox; + private JCheckBox enableHideFieldCheckBox; + private JCheckBox enableDeleteCompileInfoCheckBox; + private JCheckBox enableXorObfuscateCheckBox; + private JCheckBox useCPURDRANDCheckBox; + private JCheckBox keepTempFilesCheckBox; + private JCheckBox enableStringEncryptCheckBox; + private JTextField strAesText; + private JCheckBox enableAdvanceStringCheckBox; + private JTextField strAdvText; + private JTextField decClassText; + private JTextField decMethodText; + private JTextField decFieldText; + private JCheckBox enableJunkCodeCheckBox; + private JRadioButton level1RadioButton; + private JRadioButton level2RadioButton; + private JRadioButton level3RadioButton; + private JRadioButton level4RadioButton; + private JRadioButton level5RadioButton; + private JSpinner junkNumSpinner; + private JCheckBox enableEncryptBytecodeCheckBox; + private JTextField bytecodeKeyText; + private JTextField bytecodePackText; + private JButton confirmConfigBtn; + private JTextArea logArea; + private JButton startObfBtn; + private JPanel thePanel; + private JScrollPane logScroll; + private JPanel modulePanel; + private JPanel strEncPanel; + private JLabel strAesKeyLabel; + private JLabel strAdvNameLabel; + private JPanel decPanel; + private JLabel decClassLabel; + private JLabel decMethodLabel; + private JLabel decFieldLabel; + private JPanel junkPanel; + private JLabel junkLevelLabel; + private JLabel junkNumLabel; + private JPanel bytecodeEncPanel; + private JLabel bytecodeKeyLabel; + private JLabel bytecodePackLabel; + + public static MainForm instance; + + public static BaseConfig config; + + public static void log(String msg) { + instance.logArea.append("[INFO] " + msg + "\n"); + instance.logArea.setCaretPosition(instance.logArea.getDocument().getLength()); + } + + public MainForm() { + infoRadioButton.setSelected(true); + autoModifyManifestCheckBox.setSelected(true); + mainClassText.setText("me.n1ar4.jar.obfuscator.Main"); + obfCharsText.setText("i,l,L,1,I"); + obfPackText.setText("me.n1ar4,org.n1ar4"); + rootPackText.setText("me.n1ar4,org.n1ar4"); + classBlackText.setText("javafx.controller.DemoController"); + classBlackRegexText.setText("java/.*,com/intellij/.*"); + methodBlackText.setText("visit.*,start.*"); + classNameObfuscateCheckBox.setSelected(true); + packageNameObfuscateCheckBox.setSelected(true); + methodNameObfuscateCheckBox.setSelected(true); + fieldNameObfuscateCheckBox.setSelected(true); + parameterNameObfuscateCheckBox.setSelected(true); + enableStringEncryptCheckBox.setSelected(true); + strAesText.setText("Y4SuperSecretKey"); + enableAdvanceStringCheckBox.setSelected(true); + strAdvText.setText("GIiIiLA"); + decClassText.setText("org.apache.commons.collections.list.AbstractHashMap"); + decMethodText.setText("newMap"); + decFieldText.setText("LiLiLLLiiiLLiiLLi"); + enableHideFieldCheckBox.setSelected(true); + enableHideMethodCheckBox.setSelected(true); + enableDeleteCompileInfoCheckBox.setSelected(true); + enableXorObfuscateCheckBox.setSelected(true); + enableJunkCodeCheckBox.setSelected(true); + level5RadioButton.setSelected(true); + junkNumSpinner.setValue(2000); + enableEncryptBytecodeCheckBox.setSelected(false); + bytecodeKeyText.setText("4ra1n4ra1n4ra1n1"); + bytecodePackText.setText("me.n1ar4"); + keepTempFilesCheckBox.setSelected(false); + useCPURDRANDCheckBox.setSelected(true); + + jarBtn.addActionListener(e -> { + JFileChooser fileChooser = new JFileChooser(); + fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); + fileChooser.setFileHidingEnabled(false); + fileChooser.setCurrentDirectory(new File(".")); + fileChooser.setFileFilter(new FileFilter() { + @Override + public boolean accept(File f) { + return f.getName().toLowerCase().endsWith(".jar") || + f.getName().toLowerCase().endsWith(".war"); + } + + @Override + public String getDescription() { + return "jar/war"; + } + }); + int option = fileChooser.showOpenDialog(new JFrame()); + if (option == JFileChooser.APPROVE_OPTION) { + File file = fileChooser.getSelectedFile(); + String absPath = file.getAbsolutePath(); + log("load file: " + absPath); + jarText.setText(absPath); + } + }); + + confirmConfigBtn.addActionListener(e -> { + config = new BaseConfig(); + + if (debugRadioButton.isSelected()) { + config.setLogLevel("debug"); + } else if (infoRadioButton.isSelected()) { + config.setLogLevel("info"); + } else if (warnRadioButton.isSelected()) { + config.setLogLevel("warn"); + } else if (errorRadioButton.isSelected()) { + config.setLogLevel("error"); + } + + config.setMainClass(mainClassText.getText()); + + config.setModifyManifest(autoModifyManifestCheckBox.isSelected()); + + config.setObfuscateChars(obfCharsText.getText().split(",")); + + config.setObfuscatePackage(obfPackText.getText().split(",")); + + config.setRootPackages(rootPackText.getText().split(",")); + + config.setClassBlackList(classBlackText.getText().split(",")); + + config.setClassBlackRegexList(classBlackRegexText.getText().split(",")); + + config.setMethodBlackList(methodBlackText.getText().split(",")); + + config.setEnableClassName(classNameObfuscateCheckBox.isSelected()); + + config.setEnablePackageName(packageNameObfuscateCheckBox.isSelected()); + + config.setEnableMethodName(methodNameObfuscateCheckBox.isSelected()); + + config.setEnableFieldName(fieldNameObfuscateCheckBox.isSelected()); + + config.setEnableParamName(parameterNameObfuscateCheckBox.isSelected()); + + config.setEnableEncryptString(enableStringEncryptCheckBox.isSelected()); + + config.setStringAesKey(strAesText.getText()); + + config.setEnableAdvanceString(enableAdvanceStringCheckBox.isSelected()); + + config.setAdvanceStringName(strAdvText.getText()); + + config.setDecryptClassName(decClassText.getText()); + + config.setDecryptMethodName(decMethodText.getText()); + + config.setDecryptKeyName(decFieldText.getText()); + + config.setEnableHideField(enableHideFieldCheckBox.isSelected()); + + config.setEnableHideMethod(enableHideMethodCheckBox.isSelected()); + + config.setEnableDeleteCompileInfo(enableDeleteCompileInfoCheckBox.isSelected()); + + config.setEnableXOR(enableXorObfuscateCheckBox.isSelected()); + + config.setEnableJunk(enableJunkCodeCheckBox.isSelected()); + + if (level1RadioButton.isSelected()) { + config.setJunkLevel(1); + } else if (level2RadioButton.isSelected()) { + config.setJunkLevel(2); + } else if (level3RadioButton.isSelected()) { + config.setJunkLevel(3); + } else if (level4RadioButton.isSelected()) { + config.setJunkLevel(4); + } else if (level5RadioButton.isSelected()) { + config.setJunkLevel(5); + } + + config.setShowAllMainMethods(true); + + config.setEnableSuperObfuscate(enableEncryptBytecodeCheckBox.isSelected()); + + config.setSuperObfuscateKey(bytecodeKeyText.getText()); + + config.setSuperObfuscatePackage(bytecodePackText.getText()); + + config.setKeepTempFile(keepTempFilesCheckBox.isSelected()); + + config.setUseCpuRDRAND(useCPURDRANDCheckBox.isSelected()); + + log("confirm jar obfuscator config ok"); + }); + + startObfBtn.addActionListener(e -> { + Path path = Paths.get(jarText.getText()); + log("init manager..."); + boolean success = Manager.initConfig(config); + if (!success) { + return; + } + log("init manager ok"); + log("start jar obfuscator..."); + Runner.run(path, config); + }); + } + + public static void start() { + FlatDarkLaf.setup(); + String title = "jar obfuscator " + Const.VERSION + " @ jar analyzer team by 4ra1n"; + JFrame frame = new JFrame(title); + instance = new MainForm(); + log("init jar obfuscator finish"); + frame.setContentPane(instance.rootPanel); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.setResizable(false); + frame.pack(); + frame.setVisible(true); + } + + { +// GUI initializer generated by IntelliJ IDEA GUI Designer +// >>> IMPORTANT!! <<< +// DO NOT EDIT OR ADD ANY CODE HERE! + $$$setupUI$$$(); + } + + /** + * Method generated by IntelliJ IDEA GUI Designer + * >>> IMPORTANT!! <<< + * DO NOT edit this method OR call it in your code! + * + * @noinspection ALL + */ + private void $$$setupUI$$$() { + rootPanel = new JPanel(); + rootPanel.setLayout(new GridLayoutManager(1, 1, new Insets(0, 0, 0, 0), -1, -1)); + mainPanel = new JPanel(); + mainPanel.setLayout(new GridLayoutManager(2, 3, new Insets(5, 5, 5, 5), -1, -1)); + rootPanel.add(mainPanel, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false)); + jarLabel = new JLabel(); + jarLabel.setText("JAR"); + mainPanel.add(jarLabel, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + jarText = new JTextField(); + jarText.setEnabled(false); + mainPanel.add(jarText, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false)); + jarBtn = new JButton(); + jarBtn.setText("CHOSE"); + mainPanel.add(jarBtn, new GridConstraints(0, 2, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + thePanel = new JPanel(); + thePanel.setLayout(new GridLayoutManager(8, 1, new Insets(0, 0, 0, 0), -1, -1)); + mainPanel.add(thePanel, new GridConstraints(1, 0, 1, 3, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false)); + logLevelPanel = new JPanel(); + logLevelPanel.setLayout(new GridLayoutManager(2, 7, new Insets(0, 0, 0, 0), -1, -1)); + thePanel.add(logLevelPanel, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false)); + logLevelLabel = new JLabel(); + logLevelLabel.setText("log level"); + logLevelPanel.add(logLevelLabel, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + debugRadioButton = new JRadioButton(); + debugRadioButton.setText("debug"); + logLevelPanel.add(debugRadioButton, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + infoRadioButton = new JRadioButton(); + infoRadioButton.setText("info"); + logLevelPanel.add(infoRadioButton, new GridConstraints(0, 2, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + warnRadioButton = new JRadioButton(); + warnRadioButton.setText("warn"); + logLevelPanel.add(warnRadioButton, new GridConstraints(0, 3, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + errorRadioButton = new JRadioButton(); + errorRadioButton.setText("error"); + logLevelPanel.add(errorRadioButton, new GridConstraints(0, 4, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + confirmConfigBtn = new JButton(); + confirmConfigBtn.setText("CONFIRM CONFIG"); + logLevelPanel.add(confirmConfigBtn, new GridConstraints(0, 5, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + logScroll = new JScrollPane(); + logLevelPanel.add(logScroll, new GridConstraints(1, 0, 1, 7, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, null, null, null, 0, false)); + logScroll.setBorder(BorderFactory.createTitledBorder(null, "log info", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, null, null)); + logArea = new JTextArea(); + logArea.setEditable(false); + logArea.setForeground(new Color(-16718519)); + logArea.setRows(5); + logArea.setText(""); + logScroll.setViewportView(logArea); + startObfBtn = new JButton(); + startObfBtn.setText("START OBFUSCATE"); + logLevelPanel.add(startObfBtn, new GridConstraints(0, 6, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + mainConfigPanel = new JPanel(); + mainConfigPanel.setLayout(new GridLayoutManager(1, 2, new Insets(0, 0, 0, 0), -1, -1)); + thePanel.add(mainConfigPanel, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false)); + mainClassLabel = new JLabel(); + mainClassLabel.setText("main class"); + mainConfigPanel.add(mainClassLabel, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + mainClassText = new JTextField(); + mainConfigPanel.add(mainClassText, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false)); + obfuscateListPanel = new JPanel(); + obfuscateListPanel.setLayout(new GridLayoutManager(3, 2, new Insets(0, 0, 0, 0), -1, -1)); + thePanel.add(obfuscateListPanel, new GridConstraints(2, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false)); + obfuscateListPanel.setBorder(BorderFactory.createTitledBorder(null, "package config", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, null, null)); + obfCharsLabel = new JLabel(); + obfCharsLabel.setText("obfuscate chars"); + obfuscateListPanel.add(obfCharsLabel, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + obfCharsText = new JTextField(); + obfuscateListPanel.add(obfCharsText, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false)); + obfPackLabel = new JLabel(); + obfPackLabel.setText("obfuscate package"); + obfuscateListPanel.add(obfPackLabel, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + obfPackText = new JTextField(); + obfuscateListPanel.add(obfPackText, new GridConstraints(1, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false)); + rootPackLabel = new JLabel(); + rootPackLabel.setText("root package"); + obfuscateListPanel.add(rootPackLabel, new GridConstraints(2, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + rootPackText = new JTextField(); + obfuscateListPanel.add(rootPackText, new GridConstraints(2, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false)); + blackWhitePanel = new JPanel(); + blackWhitePanel.setLayout(new GridLayoutManager(3, 2, new Insets(0, 0, 0, 0), -1, -1)); + thePanel.add(blackWhitePanel, new GridConstraints(3, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false)); + blackWhitePanel.setBorder(BorderFactory.createTitledBorder(null, "black / white list config", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, null, null)); + classBlackLabel = new JLabel(); + classBlackLabel.setText("class balck list"); + blackWhitePanel.add(classBlackLabel, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + classBlackText = new JTextField(); + blackWhitePanel.add(classBlackText, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false)); + classBlackRegexLabel = new JLabel(); + classBlackRegexLabel.setText("class black regex list"); + blackWhitePanel.add(classBlackRegexLabel, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + classBlackRegexText = new JTextField(); + blackWhitePanel.add(classBlackRegexText, new GridConstraints(1, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false)); + methodBlackLabel = new JLabel(); + methodBlackLabel.setText("method black list"); + blackWhitePanel.add(methodBlackLabel, new GridConstraints(2, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + methodBlackText = new JTextField(); + blackWhitePanel.add(methodBlackText, new GridConstraints(2, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false)); + modulePanel = new JPanel(); + modulePanel.setLayout(new GridLayoutManager(4, 3, new Insets(0, 0, 0, 0), -1, -1)); + thePanel.add(modulePanel, new GridConstraints(4, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false)); + modulePanel.setBorder(BorderFactory.createTitledBorder(null, "module", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, null, null)); + classNameObfuscateCheckBox = new JCheckBox(); + classNameObfuscateCheckBox.setText("class name obfuscate"); + modulePanel.add(classNameObfuscateCheckBox, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + packageNameObfuscateCheckBox = new JCheckBox(); + packageNameObfuscateCheckBox.setText("package name obfuscate"); + modulePanel.add(packageNameObfuscateCheckBox, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + methodNameObfuscateCheckBox = new JCheckBox(); + methodNameObfuscateCheckBox.setText("method name obfuscate"); + modulePanel.add(methodNameObfuscateCheckBox, new GridConstraints(0, 2, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + fieldNameObfuscateCheckBox = new JCheckBox(); + fieldNameObfuscateCheckBox.setText("field name obfuscate"); + modulePanel.add(fieldNameObfuscateCheckBox, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + parameterNameObfuscateCheckBox = new JCheckBox(); + parameterNameObfuscateCheckBox.setText("parameter name obfuscate"); + modulePanel.add(parameterNameObfuscateCheckBox, new GridConstraints(1, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + enableHideMethodCheckBox = new JCheckBox(); + enableHideMethodCheckBox.setText("enable hide method"); + modulePanel.add(enableHideMethodCheckBox, new GridConstraints(2, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + enableHideFieldCheckBox = new JCheckBox(); + enableHideFieldCheckBox.setText("enable hide field"); + modulePanel.add(enableHideFieldCheckBox, new GridConstraints(2, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + enableDeleteCompileInfoCheckBox = new JCheckBox(); + enableDeleteCompileInfoCheckBox.setText("enable delete compile info"); + modulePanel.add(enableDeleteCompileInfoCheckBox, new GridConstraints(2, 2, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + enableXorObfuscateCheckBox = new JCheckBox(); + enableXorObfuscateCheckBox.setText("enable xor obfuscate"); + modulePanel.add(enableXorObfuscateCheckBox, new GridConstraints(1, 2, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + autoModifyManifestCheckBox = new JCheckBox(); + autoModifyManifestCheckBox.setText("auto modify manifest"); + modulePanel.add(autoModifyManifestCheckBox, new GridConstraints(3, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + useCPURDRANDCheckBox = new JCheckBox(); + useCPURDRANDCheckBox.setText("use CPU RDRAND"); + modulePanel.add(useCPURDRANDCheckBox, new GridConstraints(3, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + keepTempFilesCheckBox = new JCheckBox(); + keepTempFilesCheckBox.setText("keep temp files"); + modulePanel.add(keepTempFilesCheckBox, new GridConstraints(3, 2, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + strEncPanel = new JPanel(); + strEncPanel.setLayout(new GridLayoutManager(3, 4, new Insets(0, 0, 0, 0), -1, -1)); + thePanel.add(strEncPanel, new GridConstraints(5, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false)); + strEncPanel.setBorder(BorderFactory.createTitledBorder(null, "string encrypt", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, null, null)); + enableStringEncryptCheckBox = new JCheckBox(); + enableStringEncryptCheckBox.setText("enable string encrypt"); + strEncPanel.add(enableStringEncryptCheckBox, new GridConstraints(0, 0, 1, 2, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + strAesKeyLabel = new JLabel(); + strAesKeyLabel.setText("aes key"); + strEncPanel.add(strAesKeyLabel, new GridConstraints(0, 2, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + strAesText = new JTextField(); + strEncPanel.add(strAesText, new GridConstraints(0, 3, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false)); + enableAdvanceStringCheckBox = new JCheckBox(); + enableAdvanceStringCheckBox.setText("enable advance string"); + strEncPanel.add(enableAdvanceStringCheckBox, new GridConstraints(1, 0, 1, 2, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + strAdvNameLabel = new JLabel(); + strAdvNameLabel.setText("name"); + strEncPanel.add(strAdvNameLabel, new GridConstraints(1, 2, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + strAdvText = new JTextField(); + strEncPanel.add(strAdvText, new GridConstraints(1, 3, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false)); + decPanel = new JPanel(); + decPanel.setLayout(new GridLayoutManager(2, 4, new Insets(0, 0, 0, 0), -1, -1)); + strEncPanel.add(decPanel, new GridConstraints(2, 0, 1, 4, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false)); + decClassLabel = new JLabel(); + decClassLabel.setText("decrypt class name"); + decPanel.add(decClassLabel, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + decClassText = new JTextField(); + decPanel.add(decClassText, new GridConstraints(0, 1, 1, 3, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false)); + decMethodLabel = new JLabel(); + decMethodLabel.setText("decrypt method name"); + decPanel.add(decMethodLabel, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + decMethodText = new JTextField(); + decPanel.add(decMethodText, new GridConstraints(1, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false)); + decFieldLabel = new JLabel(); + decFieldLabel.setText("field name"); + decPanel.add(decFieldLabel, new GridConstraints(1, 2, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + decFieldText = new JTextField(); + decPanel.add(decFieldText, new GridConstraints(1, 3, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false)); + junkPanel = new JPanel(); + junkPanel.setLayout(new GridLayoutManager(1, 9, new Insets(0, 0, 0, 0), -1, -1)); + thePanel.add(junkPanel, new GridConstraints(6, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false)); + junkPanel.setBorder(BorderFactory.createTitledBorder(null, "junk code module", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, null, null)); + enableJunkCodeCheckBox = new JCheckBox(); + enableJunkCodeCheckBox.setText("enable junk code"); + junkPanel.add(enableJunkCodeCheckBox, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + junkLevelLabel = new JLabel(); + junkLevelLabel.setText("level"); + junkPanel.add(junkLevelLabel, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + level1RadioButton = new JRadioButton(); + level1RadioButton.setText("level 1"); + junkPanel.add(level1RadioButton, new GridConstraints(0, 2, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + level2RadioButton = new JRadioButton(); + level2RadioButton.setText("level 2"); + junkPanel.add(level2RadioButton, new GridConstraints(0, 3, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + level3RadioButton = new JRadioButton(); + level3RadioButton.setText("level 3"); + junkPanel.add(level3RadioButton, new GridConstraints(0, 4, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + level4RadioButton = new JRadioButton(); + level4RadioButton.setText("level 4"); + junkPanel.add(level4RadioButton, new GridConstraints(0, 5, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + level5RadioButton = new JRadioButton(); + level5RadioButton.setText("level 5"); + junkPanel.add(level5RadioButton, new GridConstraints(0, 6, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + junkNumLabel = new JLabel(); + junkNumLabel.setText("max num in one class"); + junkPanel.add(junkNumLabel, new GridConstraints(0, 7, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + junkNumSpinner = new JSpinner(); + junkPanel.add(junkNumSpinner, new GridConstraints(0, 8, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, new Dimension(100, -1), null, null, 0, false)); + bytecodeEncPanel = new JPanel(); + bytecodeEncPanel.setLayout(new GridLayoutManager(1, 5, new Insets(0, 0, 0, 0), -1, -1)); + thePanel.add(bytecodeEncPanel, new GridConstraints(7, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false)); + bytecodeEncPanel.setBorder(BorderFactory.createTitledBorder(null, "bytecode encrypt config", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, null, null)); + enableEncryptBytecodeCheckBox = new JCheckBox(); + enableEncryptBytecodeCheckBox.setText("enable encrypt bytecode"); + bytecodeEncPanel.add(enableEncryptBytecodeCheckBox, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + bytecodeKeyLabel = new JLabel(); + bytecodeKeyLabel.setText("key"); + bytecodeEncPanel.add(bytecodeKeyLabel, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + bytecodeKeyText = new JTextField(); + bytecodeEncPanel.add(bytecodeKeyText, new GridConstraints(0, 2, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false)); + bytecodePackLabel = new JLabel(); + bytecodePackLabel.setText("package"); + bytecodeEncPanel.add(bytecodePackLabel, new GridConstraints(0, 3, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + bytecodePackText = new JTextField(); + bytecodeEncPanel.add(bytecodePackText, new GridConstraints(0, 4, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false)); + ButtonGroup buttonGroup; + buttonGroup = new ButtonGroup(); + buttonGroup.add(debugRadioButton); + buttonGroup.add(infoRadioButton); + buttonGroup.add(warnRadioButton); + buttonGroup.add(errorRadioButton); + buttonGroup = new ButtonGroup(); + buttonGroup.add(level1RadioButton); + buttonGroup.add(level2RadioButton); + buttonGroup.add(level3RadioButton); + buttonGroup.add(level4RadioButton); + buttonGroup.add(level5RadioButton); + } + + /** + * @noinspection ALL + */ + public JComponent $$$getRootComponent$$$() { + return rootPanel; + } + +} diff --git a/src/main/java/me/n1ar4/jar/obfuscator/utils/DirUtil.java b/src/main/java/me/n1ar4/jar/obfuscator/utils/DirUtil.java index 24fa70d..7741656 100644 --- a/src/main/java/me/n1ar4/jar/obfuscator/utils/DirUtil.java +++ b/src/main/java/me/n1ar4/jar/obfuscator/utils/DirUtil.java @@ -61,7 +61,7 @@ public static void unzip(String ZipFilePath, String destDir) throws IOException ZipInputStream.close(); } - public static void zip(String sourceDir, String outputZip) throws IOException { + public static void zip(String sourceDir, String outputZip) { File sourceFolder = new File(sourceDir); try (ZipOutputStream jos = new ZipOutputStream(Files.newOutputStream(Paths.get(outputZip)))) { if (sourceFolder.exists() && sourceFolder.isDirectory()) {