diff --git a/src/main/java/burp/BurpExtender.java b/src/main/java/burp/BurpExtender.java index 65223b8..b41e5a5 100644 --- a/src/main/java/burp/BurpExtender.java +++ b/src/main/java/burp/BurpExtender.java @@ -29,23 +29,26 @@ public class BurpExtender implements IBurpExtender, IHttpListener, IMessageEdito this.callbacks = callbacks; BurpExtender.helpers = callbacks.getHelpers(); - String version = "2.1.2"; + String version = "2.1.3"; callbacks.setExtensionName(String.format("HaE (%s) - Highlighter and Extractor", version)); // 定义输出 stdout = new PrintWriter(callbacks.getStdout(), true); stdout.println("@Core Author: EvilChen"); stdout.println("@UI Author: 0chencc"); stdout.println("@Github: https://github.com/gh0stkey/HaE"); + stdout.println("@Team: OverSpace Security Team"); // UI SwingUtilities.invokeLater(this::initialize); callbacks.registerHttpListener(BurpExtender.this); callbacks.registerMessageEditorTabFactory(BurpExtender.this); } + private void initialize(){ callbacks.customizeUiComponent(main); callbacks.addSuiteTab(BurpExtender.this); } + @Override public String getTabCaption(){ return "HaE"; @@ -69,14 +72,9 @@ public class BurpExtender implements IBurpExtender, IHttpListener, IMessageEdito } else { content = messageInfo.getResponse(); } + String c = new String(content, StandardCharsets.UTF_8).intern(); - IHttpService iHttpService = null; - try { - iHttpService = messageInfo.getHttpService(); - } catch(Exception e) { - // stdout.println("iHttpService Error: " + e); - } - List result = pm.processMessageByContent(helpers, iHttpService, content, messageIsRequest, true); + List result = pm.processMessageByContent(helpers, content, messageIsRequest, true); if (result != null && !result.isEmpty() && result.size() > 0) { String originalColor = messageInfo.getHighlight(); String originalComment = messageInfo.getComment(); @@ -97,6 +95,7 @@ public class BurpExtender implements IBurpExtender, IHttpListener, IMessageEdito } + class MarkInfoTab implements IMessageEditorTab { private final ITextEditor markInfoText; private byte[] currentMessage; @@ -106,8 +105,8 @@ public class BurpExtender implements IBurpExtender, IHttpListener, IMessageEdito public MarkInfoTab(IMessageEditorController controller, boolean editable) { this.controller = controller; - markInfoText = callbacks.createTextEditor(); - markInfoText.setEditable(editable); + this.markInfoText = callbacks.createTextEditor(); + this.markInfoText.setEditable(editable); } @Override @@ -117,45 +116,37 @@ public class BurpExtender implements IBurpExtender, IHttpListener, IMessageEdito @Override public Component getUiComponent() { - return markInfoText.getComponent(); + return this.markInfoText.getComponent(); } @Override public boolean isEnabled(byte[] content, boolean isRequest) { String c = new String(content, StandardCharsets.UTF_8).intern(); - IHttpService iHttpService = null; - try { - iHttpService = controller.getHttpService(); - } catch(Exception e) { - // stdout.println("iHttpService Error: " + e); - } - List result = pm.processMessageByContent(helpers, iHttpService, content, isRequest, false); + List result = pm.processMessageByContent(helpers, content, isRequest, false); if (result != null && !result.isEmpty()) { if (isRequest) { - extractRequestContent = result.get(0).getBytes(); + this.extractRequestContent = result.get(0).getBytes(); } else { - extractResponseContent = result.get(0).getBytes(); + this.extractResponseContent = result.get(0).getBytes(); } return true; } - return false; - } @Override public byte[] getMessage() { - return currentMessage; + return this.currentMessage; } @Override public boolean isModified() { - return markInfoText.isTextModified(); + return this.markInfoText.isTextModified(); } @Override public byte[] getSelectedData() { - return markInfoText.getSelectedText(); + return this.markInfoText.getSelectedText(); } /* @@ -166,12 +157,12 @@ public class BurpExtender implements IBurpExtender, IHttpListener, IMessageEdito String c = new String(content, StandardCharsets.UTF_8).intern(); if (content.length > 0) { if (isRequest) { - markInfoText.setText(extractRequestContent); + this.markInfoText.setText(this.extractRequestContent); } else { - markInfoText.setText(extractResponseContent); + this.markInfoText.setText(this.extractResponseContent); } } - currentMessage = content; + this.currentMessage = content; } } diff --git a/src/main/java/burp/action/ProcessMessage.java b/src/main/java/burp/action/ProcessMessage.java index 01a5751..8b7ec72 100644 --- a/src/main/java/burp/action/ProcessMessage.java +++ b/src/main/java/burp/action/ProcessMessage.java @@ -15,14 +15,19 @@ public class ProcessMessage { GetColorKey gck = new GetColorKey(); UpgradeColor uc = new UpgradeColor(); - public List processMessageByContent(IExtensionHelpers helpers, IHttpService httpService, byte[] content, boolean isRequest, boolean messageInfo) { + public List processMessageByContent(IExtensionHelpers helpers, byte[] content, boolean isRequest, boolean messageInfo) { List result = new ArrayList<>();; Map> obj; if (isRequest) { + + // 获取报文头 + List requestTmpHeaders = helpers.analyzeRequest(content).getHeaders(); + String requestHeaders = String.join("\n", requestTmpHeaders); + try { // 流量清洗 - String urlString = helpers.analyzeRequest(httpService, content).getUrl().toString(); + String urlString = requestTmpHeaders.get(0).split(" ")[1]; urlString = urlString.indexOf("?") > 0 ? urlString.substring(0, urlString.indexOf("?")) : urlString; // 正则判断 @@ -32,12 +37,10 @@ public class ProcessMessage { } catch (Exception e) { return result; } - // 获取报文头 - List requestTmpHeaders = helpers.analyzeRequest(httpService, content).getHeaders(); - String requestHeaders = String.join("\n", requestTmpHeaders); + // 获取报文主体 - int requestBodyOffset = helpers.analyzeRequest(httpService, content).getBodyOffset(); + int requestBodyOffset = helpers.analyzeRequest(content).getBodyOffset(); byte[] requestBody = Arrays.copyOfRange(content, requestBodyOffset, content.length); obj = ec.matchRegex(content, requestHeaders, requestBody, "request"); diff --git a/src/main/java/burp/ui/MainUI.java b/src/main/java/burp/ui/MainUI.java index 1a9c69c..059d40c 100644 --- a/src/main/java/burp/ui/MainUI.java +++ b/src/main/java/burp/ui/MainUI.java @@ -50,12 +50,12 @@ public class MainUI extends JPanel{ reloadRule(configpath); loadConn.setConfigPath(configpath); } - configFilepathtext.setText(loadConn.getConfigPath()); + configFilepathtext.setText(LoadConfig.getConfigPath()); reloadRule(); } private void reloadRule(String configFile){ tabbedPane1.removeAll(); - Map config = loadConn.getRules(); + 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,7 +63,7 @@ public class MainUI extends JPanel{ } private void reloadRule(){ tabbedPane1.removeAll(); - Map config = loadConn.getRules(); + Map config = LoadConfig.getRules(); ruleSwitch.setListen(false); config.keySet().forEach(i->tabbedPane1.addTab(i,new RulePane(config.get(i),tabbedPane1)) ); @@ -175,13 +175,13 @@ public class MainUI extends JPanel{ new Insets(0, 0, 0, 0), 0, 0)); // JFormDesigner - End of component initialization //GEN-END:initComponents - Map config = loadConn.getRules(); + 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(loadConn.getConfigPath()); + configFilepathtext.setText(LoadConfig.getConfigPath()); EStext.setText(loadConn.getExcludeSuffix()); ruleSwitch = new TabTitleEditListener(tabbedPane1); tabbedPane1.addChangeListener(ruleSwitch); @@ -275,12 +275,12 @@ class TabTitleEditListener extends MouseAdapter implements ChangeListener, Docum editor.getDocument().addDocumentListener(this); tabbedPane.getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "start-editing"); tabbedPane.getActionMap().put("start-editing", startEditing); - } - @Override public void stateChanged(ChangeEvent e) { - if (e.getSource() instanceof JTabbedPane && listen) { - JTabbedPane pane = (JTabbedPane) e.getSource(); - if (!isRenameOk){ - if (pane.getSelectedIndex() == pane.getComponentCount()-1){ + } + @Override public void stateChanged(ChangeEvent e) { + if (e.getSource() instanceof JTabbedPane && listen) { + JTabbedPane pane = (JTabbedPane) e.getSource(); + if (!isRenameOk){ + if (pane.getSelectedIndex() == pane.getComponentCount()-1){ newTab(); } }else{ diff --git a/src/main/java/burp/yaml/LoadConfig.java b/src/main/java/burp/yaml/LoadConfig.java index 16661fa..2af1344 100644 --- a/src/main/java/burp/yaml/LoadConfig.java +++ b/src/main/java/burp/yaml/LoadConfig.java @@ -80,21 +80,20 @@ public class LoadConfig { public static String getConfigPath(){ try { InputStream inorder = new FileInputStream(SettingPath); - Map r; - r = yaml.load(inorder); + Map 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); + Map r = yaml.load(inorder); return r.get("excludeSuffix").toString(); } catch (FileNotFoundException e) { e.printStackTrace(); diff --git a/src/main/java/burp/yaml/SetConfig.java b/src/main/java/burp/yaml/SetConfig.java index 5a86999..89b25cb 100644 --- a/src/main/java/burp/yaml/SetConfig.java +++ b/src/main/java/burp/yaml/SetConfig.java @@ -92,12 +92,16 @@ public class SetConfig { int i = 0; ruleConfig = LoadConfig.getRules(); String name = "New "; - Object[][] data = new Object[][]{{false, "New Name", "(New Regex)", "gray", "any", "nfa"}}; + Object[][] data = new Object[][]{ + { + false, "New Name", "(New Regex)", "gray", "any", "nfa" + } + }; while (ruleConfig.containsKey(name + i)) { i++; } - ruleConfig.put(name+i, data); + ruleConfig.put(name + i, data); this.format(); - return name+i; + return name + i; } }