From 59cd0a88b991953895d5378e0d311fb413ed0d67 Mon Sep 17 00:00:00 2001 From: AnonymousUser Date: Fri, 22 Oct 2021 21:58:45 +0800 Subject: [PATCH] Update --- src/main/java/burp/BurpExtender.java | 17 +- src/main/java/burp/Config.java | 2 + src/main/java/burp/action/ExtractContent.java | 7 +- src/main/java/burp/action/MatchHTTP.java | 4 +- .../java/burp/ui/JTabbedPaneCloseButton.java | 4 +- src/main/java/burp/ui/MainUI.java | 79 ++++----- src/main/java/burp/ui/RulePane.java | 4 +- src/main/java/burp/yaml/LoadConfig.java | 163 ++++++++++++++++++ src/main/java/burp/yaml/LoadConfigFile.java | 89 ---------- src/main/java/burp/yaml/LoadRule.java | 89 ---------- .../yaml/{Config.java => RulesConfig.java} | 31 ++-- src/main/java/burp/yaml/SetConfig.java | 103 +++++++++++ src/main/java/burp/yaml/SetRuleConfig.java | 109 ------------ .../java/burp/yaml/{ => template}/Rule.java | 27 +-- .../java/burp/yaml/{ => template}/Rules.java | 4 +- 15 files changed, 355 insertions(+), 377 deletions(-) create mode 100644 src/main/java/burp/yaml/LoadConfig.java delete mode 100644 src/main/java/burp/yaml/LoadConfigFile.java delete mode 100644 src/main/java/burp/yaml/LoadRule.java rename src/main/java/burp/yaml/{Config.java => RulesConfig.java} (54%) create mode 100644 src/main/java/burp/yaml/SetConfig.java delete mode 100644 src/main/java/burp/yaml/SetRuleConfig.java rename src/main/java/burp/yaml/{ => template}/Rule.java (64%) rename src/main/java/burp/yaml/{ => template}/Rules.java (84%) diff --git a/src/main/java/burp/BurpExtender.java b/src/main/java/burp/BurpExtender.java index c4938e6..ca06787 100644 --- a/src/main/java/burp/BurpExtender.java +++ b/src/main/java/burp/BurpExtender.java @@ -70,7 +70,13 @@ public class BurpExtender implements IBurpExtender, IHttpListener, IMessageEdito content = messageInfo.getResponse(); } String c = new String(content, StandardCharsets.UTF_8).intern(); - List result = pm.processMessageByContent(helpers, messageInfo.getHttpService(), content, messageIsRequest, true); + IHttpService iHttpService = null; + try { + iHttpService = messageInfo.getHttpService(); + } catch(Exception e) { + // stdout.println("iHttpService Error: " + e); + } + List result = pm.processMessageByContent(helpers, iHttpService, content, messageIsRequest, true); if (result != null && !result.isEmpty() && result.size() > 0) { String originalColor = messageInfo.getHighlight(); String originalComment = messageInfo.getComment(); @@ -117,8 +123,13 @@ public class BurpExtender implements IBurpExtender, IHttpListener, IMessageEdito @Override public boolean isEnabled(byte[] content, boolean isRequest) { String c = new String(content, StandardCharsets.UTF_8).intern(); - List result = pm.processMessageByContent(helpers, controller.getHttpService(), content, isRequest, false); - + IHttpService iHttpService = null; + try { + iHttpService = controller.getHttpService(); + } catch(Exception e) { + // stdout.println("iHttpService Error: " + e); + } + List result = pm.processMessageByContent(helpers, iHttpService, content, isRequest, false); if (result != null && !result.isEmpty()) { if (isRequest) { extractRequestContent = result.get(0).getBytes(); diff --git a/src/main/java/burp/Config.java b/src/main/java/burp/Config.java index 987c41a..a295ccf 100644 --- a/src/main/java/burp/Config.java +++ b/src/main/java/burp/Config.java @@ -4,6 +4,8 @@ package burp; * @author EvilChen */ +import java.util.HashMap; + public class Config { public static String excludeSuffix = "3g2|3gp|7z|aac|abw|aif|aifc|aiff|arc|au|avi|azw|bin|bmp|bz|bz2|cmx|cod|csh|css|csv|doc|docx|eot|epub|gif|gz|ico|ics|ief|jar|jfif|jpe|jpeg|jpg|m3u|mid|midi|mjs|mp2|mp3|mpa|mpe|mpeg|mpg|mpkg|mpp|mpv2|odp|ods|odt|oga|ogv|ogx|otf|pbm|pdf|pgm|png|pnm|ppm|ppt|pptx|ra|ram|rar|ras|rgb|rmi|rtf|snd|svg|swf|tar|tif|tiff|ttf|vsd|wav|weba|webm|webp|woff|woff2|xbm|xls|xlsx|xpm|xul|xwd|zip|zip"; diff --git a/src/main/java/burp/action/ExtractContent.java b/src/main/java/burp/action/ExtractContent.java index f06fa13..645b786 100644 --- a/src/main/java/burp/action/ExtractContent.java +++ b/src/main/java/burp/action/ExtractContent.java @@ -3,6 +3,7 @@ package burp.action; import java.nio.charset.StandardCharsets; import java.util.*; +import burp.yaml.LoadConfig; import dk.brics.automaton.Automaton; import dk.brics.automaton.AutomatonMatcher; import dk.brics.automaton.RegExp; @@ -10,9 +11,6 @@ import dk.brics.automaton.RunAutomaton; import jregex.Matcher; import jregex.Pattern; -import burp.yaml.LoadRule; -import burp.yaml.LoadConfigFile; - /* * @author EvilChen */ @@ -21,8 +19,7 @@ public class ExtractContent { public Map> matchRegex(byte[] content, String headers, byte[] body, String scopeString) { Map> map = new HashMap<>(); // 最终返回的结果 - new LoadRule(LoadConfigFile.getConfigPath()); - Map rules = LoadRule.getConfig(); + Map rules = LoadConfig.getRules(); rules.keySet().forEach(i -> { String matchContent = ""; for (Object[] objects : rules.get(i)) { diff --git a/src/main/java/burp/action/MatchHTTP.java b/src/main/java/burp/action/MatchHTTP.java index 94eed91..8ebbeff 100644 --- a/src/main/java/burp/action/MatchHTTP.java +++ b/src/main/java/burp/action/MatchHTTP.java @@ -3,7 +3,7 @@ package burp.action; import jregex.Matcher; import jregex.Pattern; import jregex.REFlags; -import burp.yaml.LoadConfigFile; +import burp.yaml.LoadConfig; /* * @author EvilChen @@ -11,7 +11,7 @@ import burp.yaml.LoadConfigFile; public class MatchHTTP { // 匹配后缀 - LoadConfigFile lc = new LoadConfigFile(); + LoadConfig lc = new LoadConfig(); public boolean matchSuffix(String str) { Pattern pattern = new Pattern(String.format("[\\w]+[\\.](%s)", lc.getExcludeSuffix()), REFlags.IGNORE_CASE); Matcher matcher = pattern.matcher(str); diff --git a/src/main/java/burp/ui/JTabbedPaneCloseButton.java b/src/main/java/burp/ui/JTabbedPaneCloseButton.java index 1f9c98d..601cf44 100644 --- a/src/main/java/burp/ui/JTabbedPaneCloseButton.java +++ b/src/main/java/burp/ui/JTabbedPaneCloseButton.java @@ -60,10 +60,8 @@ public class JTabbedPaneCloseButton extends JTabbedPane { /* Button */ public class CloseButtonTab extends JPanel { - private Component tab; public CloseButtonTab(final Component tab, String title, Icon icon) { - this.tab = tab; setOpaque(false); FlowLayout flowLayout = new FlowLayout(FlowLayout.CENTER, 3, 3); setLayout(flowLayout); @@ -79,7 +77,7 @@ public class JTabbedPaneCloseButton extends JTabbedPane { /* ClickListener */ public class CloseListener implements MouseListener { - private Component tab; + private final Component tab; public CloseListener(Component tab){ this.tab=tab; diff --git a/src/main/java/burp/ui/MainUI.java b/src/main/java/burp/ui/MainUI.java index b88d174..c33bbfa 100644 --- a/src/main/java/burp/ui/MainUI.java +++ b/src/main/java/burp/ui/MainUI.java @@ -1,9 +1,7 @@ package burp.ui; -import org.jetbrains.annotations.NotNull; -import burp.yaml.LoadConfigFile; -import burp.yaml.LoadRule; -import burp.yaml.SetRuleConfig; +import burp.yaml.LoadConfig; +import burp.yaml.SetConfig; import javax.swing.*; import javax.swing.event.ChangeEvent; @@ -20,19 +18,21 @@ import java.util.Map; */ public class MainUI extends JPanel{ + private final LoadConfig loadConn = new LoadConfig(); + public MainUI() { initComponents(); } public void closeTabActionPerformed(ActionEvent e){ if (tabbedPane1.getTabCount()>2){ if (tabbedPane1.getSelectedIndex()!=0){ - SetRuleConfig setruleconfig = new SetRuleConfig(); - setruleconfig.deleteRules(tabbedPane1.getTitleAt(tabbedPane1.getSelectedIndex())); + SetConfig setConn = new SetConfig(); + setConn.deleteRules(tabbedPane1.getTitleAt(tabbedPane1.getSelectedIndex())); tabbedPane1.remove(tabbedPane1.getSelectedIndex()); tabbedPane1.setSelectedIndex(tabbedPane1.getSelectedIndex()-1); }else{ - SetRuleConfig setruleconfig = new SetRuleConfig(); - setruleconfig.deleteRules(tabbedPane1.getTitleAt(tabbedPane1.getSelectedIndex())); + SetConfig setConn = new SetConfig(); + setConn.deleteRules(tabbedPane1.getTitleAt(tabbedPane1.getSelectedIndex())); tabbedPane1.remove(tabbedPane1.getSelectedIndex()); tabbedPane1.setSelectedIndex(tabbedPane1.getSelectedIndex()); } @@ -40,22 +40,21 @@ public class MainUI extends JPanel{ } private void SelectFileMouseClicked(MouseEvent e) { - JFileChooser chooseconfig = new JFileChooser(); - chooseconfig.setFileSelectionMode(JFileChooser.FILES_ONLY); + JFileChooser selectFile = new JFileChooser(); + selectFile.setFileSelectionMode(JFileChooser.FILES_ONLY); FileNameExtensionFilter filter = new FileNameExtensionFilter("Yaml File (.yml/.yaml)","yaml", "yml"); - chooseconfig.setFileFilter(filter); - int selectframe = chooseconfig.showDialog(new JLabel(),"Select"); + selectFile.setFileFilter(filter); + int selectframe = selectFile.showDialog(new JLabel(),"Select"); if (selectframe == JFileChooser.APPROVE_OPTION){ - String configpath = chooseconfig.getSelectedFile().toString(); + String configpath = selectFile.getSelectedFile().toString(); reloadRule(configpath); - loadfile.setConfigPath(configpath); + loadConn.setConfigPath(configpath); } - configfilepathtext.setText(loadfile.getConfigPath()); + configFilepathtext.setText(loadConn.getConfigPath()); } - private void reloadRule(String configfile){ + private void reloadRule(String configFile){ tabbedPane1.removeAll(); - LoadRule loadrule = new LoadRule(configfile); - Map config = loadrule.getConfig(); + Map config = LoadConfig.getRules(); ruleSwitch.setListen(false); config.keySet().forEach(i->tabbedPane1.addTab(i,new RulePane(config.get(i),tabbedPane1))); tabbedPane1.addTab("...",new JLabel()); @@ -63,8 +62,7 @@ public class MainUI extends JPanel{ } private void reloadRule(){ tabbedPane1.removeAll(); - LoadRule loadrule = new LoadRule(loadfile.getConfigPath()); - Map config = loadrule.getConfig(); + Map config = LoadConfig.getRules(); ruleSwitch.setListen(false); config.keySet().forEach(i->tabbedPane1.addTab(i,new RulePane(config.get(i),tabbedPane1)) ); @@ -77,14 +75,14 @@ public class MainUI extends JPanel{ } private void ESSaveMouseClicked(MouseEvent e) { // TODO add your code here - LoadConfigFile lcf = new LoadConfigFile(); - lcf.setExcludeSuffix(EStext.getText()); + LoadConfig loadCon = new LoadConfig(); + loadCon.setExcludeSuffix(EStext.getText()); } private void initComponents() { tabbedPane2 = new JTabbedPane(); tabbedPane1 = new JTabbedPane(); panel3 = new JPanel(); - configfilepathtext = new JTextField(); + configFilepathtext = new JTextField(); label1 = new JLabel(); SelectFile = new JButton(); reload = new JButton(); @@ -111,9 +109,9 @@ public class MainUI extends JPanel{ ((GridBagLayout)panel3.getLayout()).columnWeights = new double[] {0.0, 1.0, 0.0, 0.0, 1.0E-4}; ((GridBagLayout)panel3.getLayout()).rowWeights = new double[] {0.0, 0.0, 1.0E-4}; - //---- configfilepathtext ---- - configfilepathtext.setEditable(false); - panel3.add(configfilepathtext, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0, + //---- configFilepathtext ---- + configFilepathtext.setEditable(false); + panel3.add(configFilepathtext, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5, 0, 5, 5), 0, 0)); @@ -175,16 +173,14 @@ public class MainUI extends JPanel{ new Insets(0, 0, 0, 0), 0, 0)); // JFormDesigner - End of component initialization //GEN-END:initComponents - LoadRule loadRule = new LoadRule(loadfile.getConfigPath()); - Map config = loadRule.getConfig(); + Map config = LoadConfig.getRules(); config.keySet().forEach(i->tabbedPane1.addTab(i,new RulePane(config.get(i),tabbedPane1))); tabbedPane1.addTab("...",new JLabel()); //TabTitleEditListener ruleSwitch = new TabTitleEditListener(tabbedPane1); - configfilepathtext.setText(loadfile.getConfigPath()); - LoadConfigFile lcf =new LoadConfigFile(); - EStext.setText(lcf.getExcludeSuffix()); + configFilepathtext.setText(LoadConfig.getConfigPath()); + EStext.setText(loadConn.getExcludeSuffix()); ruleSwitch = new TabTitleEditListener(tabbedPane1); tabbedPane1.addChangeListener(ruleSwitch); tabbedPane1.addMouseListener(ruleSwitch); @@ -196,7 +192,7 @@ public class MainUI extends JPanel{ private JTabbedPane tabbedPane2; private JTabbedPane tabbedPane1; private JPanel panel3; - private JTextField configfilepathtext; + private JTextField configFilepathtext; private JLabel label1; private JButton SelectFile; private JButton reload; @@ -207,7 +203,6 @@ public class MainUI extends JPanel{ protected static JPopupMenu tabMenu = new JPopupMenu(); private JMenuItem closeTab = new JMenuItem("Delete"); private TabTitleEditListener ruleSwitch; - private LoadConfigFile loadfile = new LoadConfigFile(); } class TabTitleEditListener extends MouseAdapter implements ChangeListener, DocumentListener { @@ -218,16 +213,14 @@ class TabTitleEditListener extends MouseAdapter implements ChangeListener, Docum protected Boolean listen = true; protected Dimension dim; protected Component tabComponent; - protected Boolean isRenamesucc = false; - protected LoadConfigFile loadfile = new LoadConfigFile(); - protected LoadRule lr = new LoadRule(loadfile.getConfigPath()); - protected SetRuleConfig setRuleConfig = new SetRuleConfig(); + protected Boolean isRenameOk = false; + protected SetConfig setConfig = new SetConfig(); protected final Action startEditing = new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { editingIdx = tabbedPane.getSelectedIndex(); tabComponent = tabbedPane.getTabComponentAt(editingIdx); tabbedPane.setTabComponentAt(editingIdx, editor); - isRenamesucc = true; + isRenameOk = true; editor.setVisible(true); editor.setText(tabbedPane.getTitleAt(editingIdx)); editor.selectAll(); @@ -241,9 +234,9 @@ class TabTitleEditListener extends MouseAdapter implements ChangeListener, Docum @Override public void actionPerformed(ActionEvent e) { String title = editor.getText().trim(); if (editingIdx >= 0 && !title.isEmpty()) { - String oldname = tabbedPane.getTitleAt(editingIdx); + String oldName = tabbedPane.getTitleAt(editingIdx); tabbedPane.setTitleAt(editingIdx, title); - setRuleConfig.rename(oldname,title); + setConfig.rename(oldName,title); } cancelEditing.actionPerformed(null); } @@ -284,7 +277,7 @@ class TabTitleEditListener extends MouseAdapter implements ChangeListener, Docum @Override public void stateChanged(ChangeEvent e) { if (e.getSource() instanceof JTabbedPane && listen) { JTabbedPane pane = (JTabbedPane) e.getSource(); - if (!isRenamesucc){ + if (!isRenameOk){ if (pane.getSelectedIndex() == pane.getComponentCount()-1){ newTab(); } @@ -298,9 +291,9 @@ class TabTitleEditListener extends MouseAdapter implements ChangeListener, Docum } public void newTab(){ Object[][] data = new Object[][]{{false, "New Name", "(New Regex)", "gray", "any", "nfa"}}; - insertTab(tabbedPane,setRuleConfig.newRules(),data); + insertTab(tabbedPane, setConfig.newRules(),data); } - public void insertTab(@NotNull JTabbedPane pane,String title,Object[][] data){ + public void insertTab(JTabbedPane pane,String title,Object[][] data){ pane.addTab(title,new RulePane(data,pane)); pane.remove(pane.getSelectedIndex()); pane.addTab("...",new JLabel()); diff --git a/src/main/java/burp/ui/RulePane.java b/src/main/java/burp/ui/RulePane.java index ca196d5..943d096 100644 --- a/src/main/java/burp/ui/RulePane.java +++ b/src/main/java/burp/ui/RulePane.java @@ -1,6 +1,6 @@ package burp.ui; -import burp.yaml.SetRuleConfig; +import burp.yaml.SetConfig; import javax.swing.*; import javax.swing.event.TableModelEvent; @@ -20,7 +20,7 @@ public class RulePane extends JPanel { public RulePane(Object[][] data,JTabbedPane pane) { initComponents(data,pane); } - private SetRuleConfig setruleconfig = new SetRuleConfig(); + private SetConfig setruleconfig = new SetConfig(); private Boolean isEdit = false; private void RuleAddMouseClicked(MouseEvent e, JTabbedPane pane) { // TODO add your code here diff --git a/src/main/java/burp/yaml/LoadConfig.java b/src/main/java/burp/yaml/LoadConfig.java new file mode 100644 index 0000000..8cfa3d2 --- /dev/null +++ b/src/main/java/burp/yaml/LoadConfig.java @@ -0,0 +1,163 @@ +package burp.yaml; + +import burp.Config; +import burp.yaml.template.*; + +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.Map; +import java.util.ArrayList; + +import org.yaml.snakeyaml.Yaml; +import org.yaml.snakeyaml.constructor.Constructor; +import org.yaml.snakeyaml.DumperOptions; +import org.yaml.snakeyaml.representer.Representer; +import org.yaml.snakeyaml.nodes.Tag; + +public class LoadConfig { + private static final Yaml yaml = new Yaml(); + private static final String SettingPath = "Setting.yml"; + private static final String ConfigPath = "Config.yml"; + + public LoadConfig() { + // 构造函数,初始化配置 + File yamlSetting = new File(SettingPath); + if (!(yamlSetting.exists() && yamlSetting.isFile())) { + initSetting(); + } + + yamlSetting = new File(ConfigPath); + if (!(yamlSetting.exists() && yamlSetting.isFile())) { + initRules(); + } + } + + // 初始化设置信息 + public void initSetting() { + Map r = new HashMap<>(); + r.put("configPath", ConfigPath); + r.put("excludeSuffix", getExcludeSuffix()); + try { + Writer ws = new OutputStreamWriter(new FileOutputStream(SettingPath), StandardCharsets.UTF_8); + yaml.dump(r, ws); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + + // 初始化规则配置 + public void initRules() { + Rule rule = new Rule(); + rule.setLoaded(true); + rule.setName("Email"); + rule.setColor("yellow"); + rule.setEngine("nfa"); + rule.setScope("response"); + rule.setRegex("(([a-zA-Z0-9][_|\\.])*[a-zA-Z0-9]+@([a-zA-Z0-9][-|_|\\.])*[a-zA-Z0-9]+\\.((?!js|css|jpg|jpeg|png|ico)[a-zA-Z]{2,}))"); + Rules rules = new Rules(); + rules.setType("Basic Information"); + ArrayList rl = new ArrayList<>(); + rl.add(rule); + rules.setRule(rl); + ArrayList rls = new ArrayList<>(); + rls.add(rules); + RulesConfig config = new RulesConfig(); + config.setRules(rls); + + DumperOptions dop = new DumperOptions(); + dop.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); + Representer representer = new Representer(); + representer.addClassTag(Config.class, Tag.MAP); + + Yaml yaml = new Yaml(new Constructor(),representer,dop); + new LoadConfig(); + File f = new File(getConfigPath()); + try{ + Writer ws = new OutputStreamWriter(new FileOutputStream(f), StandardCharsets.UTF_8); + yaml.dump(config,ws); + }catch (Exception ex){ + ex.printStackTrace(); + } + } + + // 获取配置路径 + public static String getConfigPath(){ + try { + InputStream inorder = new FileInputStream(SettingPath); + Map r; + r = yaml.load(inorder); + return r.get("configPath").toString(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + return ConfigPath; + } + } + + // 获取不包含的后缀名 + public String getExcludeSuffix(){ + try { + InputStream inorder = new FileInputStream(SettingPath); + Map r; + r = yaml.load(inorder); + return r.get("excludeSuffix").toString(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + return Config.excludeSuffix; + } + } + + // 获取规则配置 + public static Map getRules(){ + InputStream inorder = null; + { + try { + inorder = new FileInputStream(getConfigPath()); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + } + Yaml yaml = new Yaml(new Constructor(RulesConfig.class)); + RulesConfig rulesConfig = yaml.loadAs(inorder, RulesConfig.class); + Map resRule = new HashMap<>(); + rulesConfig.rules.forEach(i->{ + ArrayList data = new ArrayList<>(); + i.rule.forEach(j->{ + try { + data.add(j.getRuleObject()); + }catch (Exception e){ + e.printStackTrace(); + } + }); + resRule.put(i.getType(), data.toArray(new Object[data.size()][])); + }); + return resRule; + } + + // 设置配置路径 + public void setConfigPath(String filePath){ + Map r = new HashMap<>(); + r.put("configPath", filePath); + r.put("excludeSuffix", getExcludeSuffix()); + try{ + Writer ws = new OutputStreamWriter(new FileOutputStream(SettingPath), StandardCharsets.UTF_8); + yaml.dump(r, ws); + }catch (Exception ex){ + ex.printStackTrace(); + } + } + + // 设置不包含的后缀名 + public void setExcludeSuffix(String excludeSuffix){ + Map r = new HashMap<>(); + r.put("configPath", getConfigPath()); + r.put("excludeSuffix", excludeSuffix); + try{ + Writer ws = new OutputStreamWriter(new FileOutputStream(SettingPath), StandardCharsets.UTF_8); + yaml.dump(r, ws); + }catch (Exception ex){ + ex.printStackTrace(); + } + } + +} \ No newline at end of file diff --git a/src/main/java/burp/yaml/LoadConfigFile.java b/src/main/java/burp/yaml/LoadConfigFile.java deleted file mode 100644 index 0bcb3fd..0000000 --- a/src/main/java/burp/yaml/LoadConfigFile.java +++ /dev/null @@ -1,89 +0,0 @@ -package burp.yaml; - -import org.jetbrains.annotations.NotNull; -import org.yaml.snakeyaml.Yaml; - -import burp.Config; - -import java.io.*; -import java.nio.charset.StandardCharsets; -import java.util.HashMap; -import java.util.Map; - -/* - * @author LinChen - */ - -public class LoadConfigFile { - private static final Yaml yaml = new Yaml(); - private static final String SettingPath = "Setting.yml"; - private static final String ConfigPath = "Config.yml"; - - public LoadConfigFile(){ - init(); - } - - // 初始化配置 - public void init(){ - File yamlSetting = new File(SettingPath); - if (!(yamlSetting.exists() && yamlSetting.isFile())) { - Map r = new HashMap<>(); - r.put("configPath", ConfigPath); - r.put("excludeSuffix", getExcludeSuffix()); - try{ - Writer ws = new OutputStreamWriter(new FileOutputStream(SettingPath), StandardCharsets.UTF_8); - yaml.dump(r, ws); - }catch (Exception ex){ - ex.printStackTrace(); - } - } - } - - public String getExcludeSuffix(){ - try { - InputStream inorder = new FileInputStream(SettingPath); - Map r; - r = yaml.load(inorder); - return r.get("excludeSuffix").toString(); - } catch (FileNotFoundException e) { - e.printStackTrace(); - return Config.excludeSuffix; - } - } - - public static String getConfigPath(){ - try { - InputStream inorder = new FileInputStream(SettingPath); - Map r; - r = yaml.load(inorder); - return r.get("configPath").toString(); - } catch (FileNotFoundException e) { - e.printStackTrace(); - return ConfigPath; - } - } - - public void setExcludeSuffix(String excludeSuffix){ - Map r = new HashMap<>(); - r.put("excludeSuffix", excludeSuffix); - r.put("configPath", getConfigPath()); - try{ - Writer ws = new OutputStreamWriter(new FileOutputStream(SettingPath), StandardCharsets.UTF_8); - yaml.dump(r, ws); - }catch (Exception ex){ - ex.printStackTrace(); - } - } - - public void setConfigPath(String filePath){ - Map r = new HashMap<>(); - r.put("configPath", filePath); - r.put("excludeSuffix", getExcludeSuffix()); - try{ - Writer ws = new OutputStreamWriter(new FileOutputStream(SettingPath), StandardCharsets.UTF_8); - yaml.dump(r, ws); - }catch (Exception ex){ - ex.printStackTrace(); - } - } -} diff --git a/src/main/java/burp/yaml/LoadRule.java b/src/main/java/burp/yaml/LoadRule.java deleted file mode 100644 index d46f1a8..0000000 --- a/src/main/java/burp/yaml/LoadRule.java +++ /dev/null @@ -1,89 +0,0 @@ -package burp.yaml; - -import org.yaml.snakeyaml.Yaml; -import org.yaml.snakeyaml.constructor.Constructor; -import org.yaml.snakeyaml.DumperOptions; -import org.yaml.snakeyaml.representer.Representer; -import org.yaml.snakeyaml.nodes.Tag; - -import java.io.*; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; - -/* - * @author LinChen - */ - -public class LoadRule { - private static String filePath = "Config.yml"; - public LoadRule(String configFile){ - filePath = configFile; - init(); - } - - // 初始化配置 - public void init(){ - File yamlFile = new File(filePath); - if (!(yamlFile.exists() && yamlFile.isFile())){ - Rule rule = new Rule(); - rule.setLoaded(true); - rule.setName("Email"); - rule.setColor("yellow"); - rule.setEngine("nfa"); - rule.setScope("response"); - rule.setRegex("(([a-zA-Z0-9][_|\\.])*[a-zA-Z0-9]+@([a-zA-Z0-9][-|_|\\.])*[a-zA-Z0-9]+\\.((?!js|css|jpg|jpeg|png|ico)[a-zA-Z]{2,}))"); - Rules rules = new Rules(); - rules.setType("Basic Information"); - ArrayList rl = new ArrayList<>(); - rl.add(rule); - rules.setRule(rl); - ArrayList rls = new ArrayList<>(); - rls.add(rules); - Config config = new Config(); - config.setRules(rls); - - DumperOptions dop = new DumperOptions(); - dop.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); - Representer representer = new Representer(); - representer.addClassTag(Config.class, Tag.MAP); - - Yaml yaml = new Yaml(new Constructor(),representer,dop); - new LoadConfigFile(); - File f = new File(LoadConfigFile.getConfigPath()); - try{ - Writer ws = new OutputStreamWriter(new FileOutputStream(f), StandardCharsets.UTF_8); - yaml.dump(config,ws); - }catch (Exception ex){ - ex.printStackTrace(); - } - } - } - - public static Map getConfig(){ - InputStream inorder = null; - { - try { - inorder = new FileInputStream(filePath); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } - } - Yaml yaml = new Yaml(new Constructor(Config.class)); - Config plugin = yaml.loadAs(inorder, Config.class); - Map config = new HashMap<>(); - plugin.rules.forEach(i->{ - ArrayList data = new ArrayList<>(); - i.rule.forEach(j->{ - try { - data.add(j.getRuleObject()); - }catch (Exception e){ - e.printStackTrace(); - } - }); - config.put(i.getType(), data.toArray(new Object[data.size()][])); - }); - return config; - } -} diff --git a/src/main/java/burp/yaml/Config.java b/src/main/java/burp/yaml/RulesConfig.java similarity index 54% rename from src/main/java/burp/yaml/Config.java rename to src/main/java/burp/yaml/RulesConfig.java index 16d0b89..9f29549 100644 --- a/src/main/java/burp/yaml/Config.java +++ b/src/main/java/burp/yaml/RulesConfig.java @@ -1,19 +1,12 @@ -package burp.yaml; - -import java.util.List; - -/* - * @author LinChen - */ - -public class Config { - public List rules; - - public List getRules() { - return rules; - } - - public void setRules(List rules) { - this.rules = rules; - } -} +package burp.yaml; + +import java.util.List; +import burp.yaml.template.Rules; + +public class RulesConfig { + public List rules; + + public void setRules(List rules) { + this.rules = rules; + } +} diff --git a/src/main/java/burp/yaml/SetConfig.java b/src/main/java/burp/yaml/SetConfig.java new file mode 100644 index 0000000..5a86999 --- /dev/null +++ b/src/main/java/burp/yaml/SetConfig.java @@ -0,0 +1,103 @@ +package burp.yaml; + +import burp.yaml.template.Rule; +import burp.yaml.template.Rules; +import org.yaml.snakeyaml.DumperOptions; +import org.yaml.snakeyaml.Yaml; +import org.yaml.snakeyaml.constructor.Constructor; +import org.yaml.snakeyaml.nodes.Tag; +import org.yaml.snakeyaml.representer.Representer; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.nio.charset.StandardCharsets; +import java.util.*; + +public class SetConfig { + + private Map ruleConfig = LoadConfig.getRules(); + + public void format() { + DumperOptions dop = new DumperOptions(); + dop.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); + Representer representer = new Representer(); + representer.addClassTag(RulesConfig.class, Tag.MAP); + Yaml yaml = new Yaml(new Constructor(), representer, dop); + RulesConfig con = new RulesConfig(); + List rls = new ArrayList<>(); + + ruleConfig.keySet().forEach(i-> + { + Rules rlsTmp = new Rules(); + rlsTmp.setType(i); + List rl = new ArrayList<>(); + for (Object[] objects : ruleConfig.get(i)) { + Rule rlTmp = new Rule(); + rlTmp.setName((String) objects[1]); + rlTmp.setLoaded((Boolean) objects[0]); + rlTmp.setRegex((String) objects[2]); + rlTmp.setColor((String) objects[3]); + rlTmp.setScope((String) objects[4]); + rlTmp.setEngine((String) objects[5]); + rl.add(rlTmp); + } + rlsTmp.setRule(rl); + rls.add(rlsTmp); + }); + con.setRules(rls); + File f = new File(LoadConfig.getConfigPath()); + try{ + Writer ws = new OutputStreamWriter(new FileOutputStream(f), StandardCharsets.UTF_8); + yaml.dump(con,ws); + }catch (Exception ex){ + ex.printStackTrace(); + } + } + + public void edit(Vector data, int select, String type) { + ruleConfig = LoadConfig.getRules(); + ruleConfig.get(type)[select] = data.toArray(); + this.format(); + } + + public void add(Vector data, String type) { + ruleConfig = LoadConfig.getRules(); + ArrayList x = new ArrayList<>(Arrays.asList(ruleConfig.get(type))); + x.add(data.toArray()); + ruleConfig.put(type,x.toArray(new Object[x.size()][])); + this.format(); + } + public void remove(int select,String type) { + ruleConfig = LoadConfig.getRules(); + ArrayList x = new ArrayList<>(Arrays.asList(ruleConfig.get(type))); + x.remove(select); + ruleConfig.put(type,x.toArray(new Object[x.size()][])); + this.format(); + } + + public void rename(String oldName, String newName) { + ruleConfig = LoadConfig.getRules(); + ruleConfig.put(newName, ruleConfig.remove(oldName)); + this.format(); + } + + public void deleteRules(String Rules) { + ruleConfig = LoadConfig.getRules(); + ruleConfig.remove(Rules); + this.format(); + } + public String newRules() { + int i = 0; + ruleConfig = LoadConfig.getRules(); + String name = "New "; + Object[][] data = new Object[][]{{false, "New Name", "(New Regex)", "gray", "any", "nfa"}}; + while (ruleConfig.containsKey(name + i)) { + i++; + } + ruleConfig.put(name+i, data); + this.format(); + return name+i; + } +} diff --git a/src/main/java/burp/yaml/SetRuleConfig.java b/src/main/java/burp/yaml/SetRuleConfig.java deleted file mode 100644 index 3ef56f4..0000000 --- a/src/main/java/burp/yaml/SetRuleConfig.java +++ /dev/null @@ -1,109 +0,0 @@ -package burp.yaml; - -import org.yaml.snakeyaml.DumperOptions; -import org.yaml.snakeyaml.Yaml; -import org.yaml.snakeyaml.constructor.Constructor; -import org.yaml.snakeyaml.nodes.Tag; -import org.yaml.snakeyaml.representer.Representer; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.OutputStreamWriter; -import java.io.Writer; -import java.util.*; - -public class SetRuleConfig { - private static Yaml yaml; - private static LoadConfigFile loadfile; - private static LoadRule lr; - private Map config = lr.getConfig(); - public void format(){ - DumperOptions dop = new DumperOptions(); - dop.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); - Representer representer = new Representer(); - representer.addClassTag(Config.class, Tag.MAP); - yaml = new Yaml(new Constructor(),representer,dop); - Config con = new Config(); - List rls = new ArrayList<>(); - - config.keySet().forEach(i-> - { - Rules rlstmp = new Rules(); - rlstmp.setType(i); - List rl = new ArrayList<>(); - for (Object[] objects : config.get(i)) { - Rule rltmp = new Rule(); - rltmp.setName((String) objects[1]); - rltmp.setLoaded((Boolean) objects[0]); - rltmp.setRegex((String) objects[2]); - rltmp.setColor((String) objects[3]); - rltmp.setScope((String) objects[4]); - rltmp.setEngine((String) objects[5]); - rl.add(rltmp); - } - rlstmp.setRule(rl); - rls.add(rlstmp); - }); - con.setRules(rls); - File f = new File(loadfile.getConfigPath()); - try{ - Writer ws = new OutputStreamWriter(new FileOutputStream(f),"UTF-8"); - yaml.dump(con,ws); - }catch (Exception ex){ - ex.printStackTrace(); - } - } - public void edit(Vector data,int select, String type){ - loadfile = new LoadConfigFile(); - lr = new LoadRule(loadfile.getConfigPath()); - config = lr.getConfig(); - config.get(type)[select] = data.toArray(); - this.format(); - } - public void add(Vector data,String type){ - loadfile = new LoadConfigFile(); - lr = new LoadRule(loadfile.getConfigPath()); - config = lr.getConfig(); - ArrayList x = new ArrayList(Arrays.asList(config.get(type))); - x.add(data.toArray()); - config.put(type,x.toArray(new Object[x.size()][])); - this.format(); - } - public void remove(int select,String type){ - loadfile = new LoadConfigFile(); - lr = new LoadRule(loadfile.getConfigPath()); - config = lr.getConfig(); - ArrayList x = new ArrayList(Arrays.asList(config.get(type))); - x.remove(select); - config.put(type,x.toArray(new Object[x.size()][])); - this.format(); - } - public void rename(String oldname,String newname){ - loadfile = new LoadConfigFile(); - lr = new LoadRule(loadfile.getConfigPath()); - config = lr.getConfig(); - config.put(newname,config.remove(oldname)); - this.format(); - } - public void deleteRules(String Rules){ - loadfile = new LoadConfigFile(); - lr = new LoadRule(loadfile.getConfigPath()); - config = lr.getConfig(); - config.remove(Rules); - this.format(); - } - public String newRules(){ - int i = 0; - loadfile = new LoadConfigFile(); - lr = new LoadRule(loadfile.getConfigPath()); - config = lr.getConfig(); - String name = "New "; - Object[][] data = new Object[][]{{false, "New Name", "(New Regex)", "gray", "any", "nfa"}}; - while (config.containsKey(name+i)){ - i++; - } - config.put(name+i,data); - this.format(); - return name+i; - } -} diff --git a/src/main/java/burp/yaml/Rule.java b/src/main/java/burp/yaml/template/Rule.java similarity index 64% rename from src/main/java/burp/yaml/Rule.java rename to src/main/java/burp/yaml/template/Rule.java index 12a3f14..2d1f898 100644 --- a/src/main/java/burp/yaml/Rule.java +++ b/src/main/java/burp/yaml/template/Rule.java @@ -1,4 +1,4 @@ -package burp.yaml; +package burp.yaml.template; import java.util.HashMap; import java.util.Map; @@ -62,20 +62,23 @@ public class Rule { public void setScope(String scope) { this.Scope = scope; } - public Object[] getRuleObject(){ - return new Object[]{Loaded, Name, Regex, Color, Scope, Engine}; + + public Object[] getRuleObject() { + return new Object[] { Loaded, Name, Regex, Color, Scope, Engine }; } - public Map getRuleObjMap(){ + + public Map getRuleObjMap(){ Map r = new HashMap<>(); - r.put("Loaded",Loaded); - r.put("Name",Name); - r.put("Regex",Regex); - r.put("Color",Color); - r.put("Scope",Scope); - r.put("Engine",Engine); + r.put("Loaded", Loaded); + r.put("Name", Name); + r.put("Regex", Regex); + r.put("Color", Color); + r.put("Scope", Scope); + r.put("Engine", Engine); return r; } - public String toString(){ - return "{ \nLoaded: "+Loaded+"\nName: "+Name+"\nRegex: "+Regex+"\nColor: "+Color+"\nScope: "+Scope+"\nEngine: "+Engine+"\n}"; + + public String toString() { + return "{ \nLoaded: " + Loaded + "\nName: " + Name + "\nRegex: " + Regex + "\nColor: " + Color + "\nScope: " + Scope + "\nEngine: " + Engine + "\n}"; } } \ No newline at end of file diff --git a/src/main/java/burp/yaml/Rules.java b/src/main/java/burp/yaml/template/Rules.java similarity index 84% rename from src/main/java/burp/yaml/Rules.java rename to src/main/java/burp/yaml/template/Rules.java index 08514a2..46bed17 100644 --- a/src/main/java/burp/yaml/Rules.java +++ b/src/main/java/burp/yaml/template/Rules.java @@ -1,4 +1,6 @@ -package burp.yaml; +package burp.yaml.template; + +import burp.yaml.template.Rule; import java.util.List;