From a06ef8e25ed31ecfa9cc9da17292bc9efdcad1b2 Mon Sep 17 00:00:00 2001 From: gh0stkey <24655118+gh0stkey@users.noreply.github.com> Date: Wed, 8 Jan 2025 13:49:12 +0800 Subject: [PATCH] Version: 4.0.2 Update --- src/main/java/hae/Config.java | 2 ++ src/main/java/hae/HaE.java | 22 ++++++++++++++++++- src/main/java/hae/component/Config.java | 14 ++++-------- .../board/message/MessageTableModel.java | 20 ++++++++++------- .../instances/http/utils/RegularMatcher.java | 19 +++++++++------- src/main/java/hae/utils/DataManager.java | 10 ++++++--- 6 files changed, 57 insertions(+), 30 deletions(-) diff --git a/src/main/java/hae/Config.java b/src/main/java/hae/Config.java index 173790e..ec636be 100644 --- a/src/main/java/hae/Config.java +++ b/src/main/java/hae/Config.java @@ -61,6 +61,8 @@ public class Config { "gray" }; + public static Boolean proVersionStatus = true; + public static Map globalRules = new HashMap<>(); public static ConcurrentHashMap>> globalDataMap = new ConcurrentHashMap<>(); diff --git a/src/main/java/hae/HaE.java b/src/main/java/hae/HaE.java index 2dd53fc..832fc35 100644 --- a/src/main/java/hae/HaE.java +++ b/src/main/java/hae/HaE.java @@ -10,6 +10,7 @@ import hae.component.board.message.MessageTableModel; import hae.instances.editor.RequestEditor; import hae.instances.editor.ResponseEditor; import hae.instances.editor.WebSocketEditor; +import hae.instances.http.HttpMessagePassiveHandler; import hae.instances.websocket.WebSocketMessageHandler; import hae.utils.ConfigLoader; import hae.utils.DataManager; @@ -18,8 +19,8 @@ public class HaE implements BurpExtension { @Override public void initialize(MontoyaApi api) { // 设置扩展名称 - String version = "4.0.1"; api.extension().setName("HaE - Highlighter and Extractor"); + String version = "4.0.2"; // 加载扩展后输出的项目信息 Logging logging = api.logging(); @@ -33,6 +34,9 @@ public class HaE implements BurpExtension { MessageTableModel messageTableModel = new MessageTableModel(api, configLoader); + // 设置BurpSuite专业版状态 + Config.proVersionStatus = getBurpSuiteProStatus(api, configLoader, messageTableModel); + // 注册Tab页(用于查询数据) api.userInterface().registerSuiteTab("HaE", new Main(api, configLoader, messageTableModel)); @@ -48,6 +52,7 @@ public class HaE implements BurpExtension { DataManager dataManager = new DataManager(api); dataManager.loadData(messageTableModel); + api.extension().registerUnloadingHandler(new ExtensionUnloadingHandler() { @Override public void extensionUnloaded() { @@ -57,4 +62,19 @@ public class HaE implements BurpExtension { } }); } + + private Boolean getBurpSuiteProStatus(MontoyaApi api, ConfigLoader configLoader, MessageTableModel messageTableModel) { + boolean burpSuiteProStatus = false; + try { + burpSuiteProStatus = api.burpSuite().version().name().contains("Professional"); + } catch (Exception e) { + try { + api.scanner().registerScanCheck(new HttpMessagePassiveHandler(api, configLoader, messageTableModel)).deregister(); + burpSuiteProStatus = true; + } catch (Exception ignored) { + } + } + + return burpSuiteProStatus; + } } diff --git a/src/main/java/hae/component/Config.java b/src/main/java/hae/component/Config.java index a2ab54a..fd802bc 100644 --- a/src/main/java/hae/component/Config.java +++ b/src/main/java/hae/component/Config.java @@ -29,7 +29,6 @@ public class Config extends JPanel { private final ConfigLoader configLoader; private final MessageTableModel messageTableModel; private final Rules rules; - private final boolean isProfessionalVersion; private Registration activeHandler; private Registration passiveHandler; @@ -39,15 +38,9 @@ public class Config extends JPanel { this.configLoader = configLoader; this.messageTableModel = messageTableModel; this.rules = rules; - - // 检查版本并记录日志 - this.isProfessionalVersion = api.burpSuite().version().name().contains("Professional"); - api.logging().logToOutput("Current Burp Suite Version: " + api.burpSuite().version().name()); this.activeHandler = api.http().registerHttpHandler(new HttpMessageActiveHandler(api, configLoader, messageTableModel)); - if (isProfessionalVersion) { - this.passiveHandler = api.scanner().registerScanCheck(new HttpMessagePassiveHandler(api, configLoader, messageTableModel)); - } + this.passiveHandler = api.scanner().registerScanCheck(new HttpMessagePassiveHandler(api, configLoader, messageTableModel)); initComponents(); } @@ -142,6 +135,7 @@ public class Config extends JPanel { modePanel.setLayout(new BoxLayout(modePanel, BoxLayout.X_AXIS)); JCheckBox checkBox = new JCheckBox("Enable active http message handler"); + checkBox.setEnabled(hae.Config.proVersionStatus); modePanel.add(checkBox); checkBox.addActionListener(e -> updateModeStatus(checkBox)); checkBox.setSelected(configLoader.getMode()); @@ -386,7 +380,7 @@ public class Config extends JPanel { configLoader.setMode(selected ? "true" : "false"); if (checkBox.isSelected()) { - if (isProfessionalVersion && passiveHandler.isRegistered()) { + if (hae.Config.proVersionStatus && passiveHandler.isRegistered()) { passiveHandler.deregister(); } @@ -394,7 +388,7 @@ public class Config extends JPanel { activeHandler = api.http().registerHttpHandler(new HttpMessageActiveHandler(api, configLoader, messageTableModel)); } } else { - if (isProfessionalVersion && !passiveHandler.isRegistered()) { + if (hae.Config.proVersionStatus && !passiveHandler.isRegistered()) { passiveHandler = api.scanner().registerScanCheck(new HttpMessagePassiveHandler(api, configLoader, messageTableModel)); } diff --git a/src/main/java/hae/component/board/message/MessageTableModel.java b/src/main/java/hae/component/board/message/MessageTableModel.java index 9d75c8c..fdbf0de 100644 --- a/src/main/java/hae/component/board/message/MessageTableModel.java +++ b/src/main/java/hae/component/board/message/MessageTableModel.java @@ -136,14 +136,18 @@ public class MessageTableModel extends AbstractTableModel { if (!isDuplicate) { if (flag) { - DataManager dataManager = new DataManager(api); - // 数据存储在BurpSuite空间内 - PersistedObject persistedObject = PersistedObject.persistedObject(); - persistedObject.setHttpRequestResponse("messageInfo", messageInfo); - persistedObject.setString("comment", comment); - persistedObject.setString("color", color); - String uuidIndex = StringProcessor.getRandomUUID(); - dataManager.putData("message", uuidIndex, persistedObject); + try { + DataManager dataManager = new DataManager(api); + // 数据存储在BurpSuite空间内 + PersistedObject persistedObject = PersistedObject.persistedObject(); + persistedObject.setHttpRequestResponse("messageInfo", messageInfo); + persistedObject.setString("comment", comment); + persistedObject.setString("color", color); + String uuidIndex = StringProcessor.getRandomUUID(); + dataManager.putData("message", uuidIndex, persistedObject); + } catch (Exception ignored) { + + } } // 添加进日志 diff --git a/src/main/java/hae/instances/http/utils/RegularMatcher.java b/src/main/java/hae/instances/http/utils/RegularMatcher.java index a353f81..cce2764 100644 --- a/src/main/java/hae/instances/http/utils/RegularMatcher.java +++ b/src/main/java/hae/instances/http/utils/RegularMatcher.java @@ -125,14 +125,17 @@ public class RegularMatcher { if (flag) { // 数据存储在BurpSuite空间内 - DataManager dataManager = new DataManager(api); - PersistedObject persistedObject = PersistedObject.persistedObject(); - gRuleMap.forEach((kName, vList) -> { - PersistedList persistedList = PersistedList.persistedStringList(); - persistedList.addAll(vList); - persistedObject.setStringList(kName, persistedList); - }); - dataManager.putData("data", host, persistedObject); + try { + DataManager dataManager = new DataManager(api); + PersistedObject persistedObject = PersistedObject.persistedObject(); + gRuleMap.forEach((kName, vList) -> { + PersistedList persistedList = PersistedList.persistedStringList(); + persistedList.addAll(vList); + persistedObject.setStringList(kName, persistedList); + }); + dataManager.putData("data", host, persistedObject); + } catch (Exception ignored) { + } } return gRuleMap; diff --git a/src/main/java/hae/utils/DataManager.java b/src/main/java/hae/utils/DataManager.java index 767306b..9a02ea8 100644 --- a/src/main/java/hae/utils/DataManager.java +++ b/src/main/java/hae/utils/DataManager.java @@ -57,9 +57,13 @@ public class DataManager { if (dataIndex != null && !dataIndex.isEmpty()) { dataIndex.parallelStream().forEach(index -> { PersistedObject dataObj = persistence.extensionData().getChildObject(index); - dataObj.stringListKeys().forEach(dataKey -> { - RegularMatcher.putDataToGlobalMap(api, index, dataKey, dataObj.getStringList(dataKey).stream().toList(), false); - }); + try { + dataObj.stringListKeys().forEach(dataKey -> { + RegularMatcher.putDataToGlobalMap(api, index, dataKey, dataObj.getStringList(dataKey).stream().toList(), false); + }); + } catch (Exception e) { + api.logging().logToOutput("loadHaEData:" + e.getMessage()); + } }); } }