From 241247a4a050569dfe147a9a5966cf089bb229bd Mon Sep 17 00:00:00 2001 From: AnonymousUser Date: Fri, 8 Apr 2022 17:21:40 +0800 Subject: [PATCH] Version: 2.2 Update --- src/main/java/burp/BurpExtender.java | 53 +++++++++++-------- src/main/java/burp/Config.java | 1 - src/main/java/burp/action/DoAction.java | 10 ++-- src/main/java/burp/action/ProcessMessage.java | 15 ++++-- src/main/java/burp/ui/RulePane.java | 4 +- 5 files changed, 51 insertions(+), 32 deletions(-) diff --git a/src/main/java/burp/BurpExtender.java b/src/main/java/burp/BurpExtender.java index 052626a..9023dd7 100644 --- a/src/main/java/burp/BurpExtender.java +++ b/src/main/java/burp/BurpExtender.java @@ -3,6 +3,7 @@ package burp; import burp.action.*; import burp.ui.MainUI; +import java.util.Map; import javax.swing.*; import java.awt.*; import java.nio.charset.StandardCharsets; @@ -11,7 +12,7 @@ import java.util.ArrayList; import java.util.List; /* - * @author EvilChen + * @author EvilChen & 0chencc */ public class BurpExtender implements IBurpExtender, IHttpListener, IMessageEditorTabFactory, ITab { @@ -29,14 +30,13 @@ public class BurpExtender implements IBurpExtender, IHttpListener, IMessageEdito this.callbacks = callbacks; BurpExtender.helpers = callbacks.getHelpers(); - String version = "2.1.6"; + String version = "2.2"; callbacks.setExtensionName(String.format("HaE (%s) - Highlighter and Extractor", version)); // 定义输出 stdout = new PrintWriter(callbacks.getStdout(), true); stdout.println("@Core Author: EvilChen"); stdout.println("@Architecture Author: 0chencc"); stdout.println("@Github: https://github.com/gh0stkey/HaE"); - stdout.println("@Team: OverSpace Security Team"); // UI SwingUtilities.invokeLater(this::initialize); @@ -74,7 +74,7 @@ public class BurpExtender implements IBurpExtender, IHttpListener, IMessageEdito } String c = new String(content, StandardCharsets.UTF_8).intern(); - List result = pm.processMessageByContent(helpers, 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(); @@ -82,31 +82,27 @@ public class BurpExtender implements IBurpExtender, IHttpListener, IMessageEdito if (originalColor != null) { colorList.add(originalColor); } - colorList.add(result.get(0)); + colorList.add(result.get(0).get("color")); String color = uc.getEndColor(gck.getColorKeys(colorList)); messageInfo.setHighlight(color); - String addComment = String.join(", ", result.get(1)); + String addComment = String.join(", ", result.get(1).get("comment")); String resComment = originalComment != null ? String.format("%s, %s", originalComment, addComment) : addComment; messageInfo.setComment(resComment); } } - } - class MarkInfoTab implements IMessageEditorTab { - private final ITextEditor markInfoText; + private final JTabbedPane jTabbedPane = new JTabbedPane(); private byte[] currentMessage; private final IMessageEditorController controller; - private byte[] extractRequestContent; - private byte[] extractResponseContent; + private Map extractRequestMap; + private Map extractResponseMap; public MarkInfoTab(IMessageEditorController controller, boolean editable) { this.controller = controller; - this.markInfoText = callbacks.createTextEditor(); - this.markInfoText.setEditable(editable); } @Override @@ -116,18 +112,19 @@ public class BurpExtender implements IBurpExtender, IHttpListener, IMessageEdito @Override public Component getUiComponent() { - return this.markInfoText.getComponent(); + return this.jTabbedPane; } @Override public boolean isEnabled(byte[] content, boolean isRequest) { String c = new String(content, StandardCharsets.UTF_8).intern(); - List result = pm.processMessageByContent(helpers, content, isRequest, false); + List> result = pm.processMessageByContent(helpers, content, isRequest, false); if (result != null && !result.isEmpty()) { + Map dataMap = result.get(0); if (isRequest) { - this.extractRequestContent = result.get(0).getBytes(); + extractRequestMap = dataMap; } else { - this.extractResponseContent = result.get(0).getBytes(); + extractResponseMap = dataMap; } return true; } @@ -141,12 +138,12 @@ public class BurpExtender implements IBurpExtender, IHttpListener, IMessageEdito @Override public boolean isModified() { - return this.markInfoText.isTextModified(); + return false; } @Override public byte[] getSelectedData() { - return this.markInfoText.getSelectedText(); + return null; } /* @@ -156,16 +153,30 @@ public class BurpExtender implements IBurpExtender, IHttpListener, IMessageEdito public void setMessage(byte[] content, boolean isRequest) { String c = new String(content, StandardCharsets.UTF_8).intern(); if (content.length > 0) { + this.jTabbedPane.removeAll(); if (isRequest) { - this.markInfoText.setText(this.extractRequestContent); + makeTable(extractRequestMap); } else { - this.markInfoText.setText(this.extractResponseContent); + makeTable(extractResponseMap); } } this.currentMessage = content; } + + public void makeTable(Map dataMap) { + dataMap.keySet().forEach(i->{ + String[] extractData = dataMap.get(i).split("\n"); + Object[][] data = new Object[extractData.length][1]; + for (int x = 0; x < extractData.length; x++) { + data[x][0] = extractData[x]; + } + this.jTabbedPane.addTab(i, new JScrollPane(new JTable(data, new Object[] {"Information"}))); + }); + } } + + @Override public IMessageEditorTab createNewInstance(IMessageEditorController controller, boolean editable) { return new MarkInfoTab(controller, editable); diff --git a/src/main/java/burp/Config.java b/src/main/java/burp/Config.java index c05113a..3171eb2 100644 --- a/src/main/java/burp/Config.java +++ b/src/main/java/burp/Config.java @@ -25,7 +25,6 @@ public class Config { "dfa" }; - public static String outputTplString = "[%s]\n%s\n\n"; public static String[] colorArray = new String[] { "red", diff --git a/src/main/java/burp/action/DoAction.java b/src/main/java/burp/action/DoAction.java index 7dbc68b..3837472 100644 --- a/src/main/java/burp/action/DoAction.java +++ b/src/main/java/burp/action/DoAction.java @@ -1,5 +1,6 @@ package burp.action; +import java.util.HashMap; import java.util.Map; import burp.Config; import java.util.ArrayList; @@ -10,15 +11,14 @@ import java.util.List; */ public class DoAction { - public String extractString(Map> obj) { - String[] result = {""}; + public Map extractString(Map> obj) { + Map resultMap = new HashMap(); obj.keySet().forEach(i->{ Map tmpMap = obj.get(i); String data = tmpMap.get("data").toString(); - String tmpStr = String.format(Config.outputTplString, i, data).intern(); - result[0] += tmpStr; + resultMap.put(i, String.format("%s\n", data).intern()); }); - return result[0]; + return resultMap; } public List> highlightAndComment(Map> obj) { diff --git a/src/main/java/burp/action/ProcessMessage.java b/src/main/java/burp/action/ProcessMessage.java index 8b7ec72..b66320b 100644 --- a/src/main/java/burp/action/ProcessMessage.java +++ b/src/main/java/burp/action/ProcessMessage.java @@ -5,6 +5,7 @@ import burp.IHttpService; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -15,8 +16,8 @@ public class ProcessMessage { GetColorKey gck = new GetColorKey(); UpgradeColor uc = new UpgradeColor(); - public List processMessageByContent(IExtensionHelpers helpers, byte[] content, boolean isRequest, boolean messageInfo) { - List result = new ArrayList<>();; + public List> processMessageByContent(IExtensionHelpers helpers, byte[] content, boolean isRequest, boolean messageInfo) { + List> result = new ArrayList<>();; Map> obj; if (isRequest) { @@ -73,8 +74,14 @@ public class ProcessMessage { List commentList = resultList.get(1); if (colorList.size() != 0 && commentList.size() != 0) { String color = uc.getEndColor(gck.getColorKeys(colorList)); - result.add(color); - result.add(String.join(", ", commentList)); + Map colorMap = new HashMap(){{ + put("color", color); + }}; + Map commentMap = new HashMap(){{ + put("comment", String.join(", ", commentList)); + }}; + result.add(colorMap); + result.add(commentMap); } } else { if (obj.size() > 0) { diff --git a/src/main/java/burp/ui/RulePane.java b/src/main/java/burp/ui/RulePane.java index 943d096..3be3c64 100644 --- a/src/main/java/burp/ui/RulePane.java +++ b/src/main/java/burp/ui/RulePane.java @@ -23,7 +23,6 @@ public class RulePane extends JPanel { private SetConfig setruleconfig = new SetConfig(); private Boolean isEdit = false; private void RuleAddMouseClicked(MouseEvent e, JTabbedPane pane) { - // TODO add your code here RuleSetting add = new RuleSetting(); int isOk = JOptionPane.showConfirmDialog(null,add,"RuleSetting - Add Rule",JOptionPane.OK_OPTION); if(isOk == 0){ @@ -178,6 +177,7 @@ public class RulePane extends JPanel { // JFormDesigner - End of variables declaration //GEN-END:variables private final String[] title = new String[]{"Loaded", "Name", "Regex", "Color", "Scope", "Engine"}; private DefaultTableModel model = new DefaultTableModel() { + @Override public Class getColumnClass ( int column){ if (column == 0) { return Boolean.class; @@ -185,6 +185,8 @@ public class RulePane extends JPanel { return String.class; } } + + @Override public boolean isCellEditable(int row,int column){ if (column ==0){ return true;