Version: 4.0.2 Update

This commit is contained in:
gh0stkey
2025-01-08 13:49:12 +08:00
parent 7e53e250af
commit a06ef8e25e
6 changed files with 57 additions and 30 deletions

View File

@@ -61,6 +61,8 @@ public class Config {
"gray" "gray"
}; };
public static Boolean proVersionStatus = true;
public static Map<String, Object[][]> globalRules = new HashMap<>(); public static Map<String, Object[][]> globalRules = new HashMap<>();
public static ConcurrentHashMap<String, Map<String, List<String>>> globalDataMap = new ConcurrentHashMap<>(); public static ConcurrentHashMap<String, Map<String, List<String>>> globalDataMap = new ConcurrentHashMap<>();

View File

@@ -10,6 +10,7 @@ import hae.component.board.message.MessageTableModel;
import hae.instances.editor.RequestEditor; import hae.instances.editor.RequestEditor;
import hae.instances.editor.ResponseEditor; import hae.instances.editor.ResponseEditor;
import hae.instances.editor.WebSocketEditor; import hae.instances.editor.WebSocketEditor;
import hae.instances.http.HttpMessagePassiveHandler;
import hae.instances.websocket.WebSocketMessageHandler; import hae.instances.websocket.WebSocketMessageHandler;
import hae.utils.ConfigLoader; import hae.utils.ConfigLoader;
import hae.utils.DataManager; import hae.utils.DataManager;
@@ -18,8 +19,8 @@ public class HaE implements BurpExtension {
@Override @Override
public void initialize(MontoyaApi api) { public void initialize(MontoyaApi api) {
// 设置扩展名称 // 设置扩展名称
String version = "4.0.1";
api.extension().setName("HaE - Highlighter and Extractor"); api.extension().setName("HaE - Highlighter and Extractor");
String version = "4.0.2";
// 加载扩展后输出的项目信息 // 加载扩展后输出的项目信息
Logging logging = api.logging(); Logging logging = api.logging();
@@ -33,6 +34,9 @@ public class HaE implements BurpExtension {
MessageTableModel messageTableModel = new MessageTableModel(api, configLoader); MessageTableModel messageTableModel = new MessageTableModel(api, configLoader);
// 设置BurpSuite专业版状态
Config.proVersionStatus = getBurpSuiteProStatus(api, configLoader, messageTableModel);
// 注册Tab页用于查询数据 // 注册Tab页用于查询数据
api.userInterface().registerSuiteTab("HaE", new Main(api, configLoader, messageTableModel)); api.userInterface().registerSuiteTab("HaE", new Main(api, configLoader, messageTableModel));
@@ -48,6 +52,7 @@ public class HaE implements BurpExtension {
DataManager dataManager = new DataManager(api); DataManager dataManager = new DataManager(api);
dataManager.loadData(messageTableModel); dataManager.loadData(messageTableModel);
api.extension().registerUnloadingHandler(new ExtensionUnloadingHandler() { api.extension().registerUnloadingHandler(new ExtensionUnloadingHandler() {
@Override @Override
public void extensionUnloaded() { 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;
}
} }

View File

@@ -29,7 +29,6 @@ public class Config extends JPanel {
private final ConfigLoader configLoader; private final ConfigLoader configLoader;
private final MessageTableModel messageTableModel; private final MessageTableModel messageTableModel;
private final Rules rules; private final Rules rules;
private final boolean isProfessionalVersion;
private Registration activeHandler; private Registration activeHandler;
private Registration passiveHandler; private Registration passiveHandler;
@@ -39,15 +38,9 @@ public class Config extends JPanel {
this.configLoader = configLoader; this.configLoader = configLoader;
this.messageTableModel = messageTableModel; this.messageTableModel = messageTableModel;
this.rules = rules; 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)); 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(); initComponents();
} }
@@ -142,6 +135,7 @@ public class Config extends JPanel {
modePanel.setLayout(new BoxLayout(modePanel, BoxLayout.X_AXIS)); modePanel.setLayout(new BoxLayout(modePanel, BoxLayout.X_AXIS));
JCheckBox checkBox = new JCheckBox("Enable active http message handler"); JCheckBox checkBox = new JCheckBox("Enable active http message handler");
checkBox.setEnabled(hae.Config.proVersionStatus);
modePanel.add(checkBox); modePanel.add(checkBox);
checkBox.addActionListener(e -> updateModeStatus(checkBox)); checkBox.addActionListener(e -> updateModeStatus(checkBox));
checkBox.setSelected(configLoader.getMode()); checkBox.setSelected(configLoader.getMode());
@@ -386,7 +380,7 @@ public class Config extends JPanel {
configLoader.setMode(selected ? "true" : "false"); configLoader.setMode(selected ? "true" : "false");
if (checkBox.isSelected()) { if (checkBox.isSelected()) {
if (isProfessionalVersion && passiveHandler.isRegistered()) { if (hae.Config.proVersionStatus && passiveHandler.isRegistered()) {
passiveHandler.deregister(); passiveHandler.deregister();
} }
@@ -394,7 +388,7 @@ public class Config extends JPanel {
activeHandler = api.http().registerHttpHandler(new HttpMessageActiveHandler(api, configLoader, messageTableModel)); activeHandler = api.http().registerHttpHandler(new HttpMessageActiveHandler(api, configLoader, messageTableModel));
} }
} else { } else {
if (isProfessionalVersion && !passiveHandler.isRegistered()) { if (hae.Config.proVersionStatus && !passiveHandler.isRegistered()) {
passiveHandler = api.scanner().registerScanCheck(new HttpMessagePassiveHandler(api, configLoader, messageTableModel)); passiveHandler = api.scanner().registerScanCheck(new HttpMessagePassiveHandler(api, configLoader, messageTableModel));
} }

View File

@@ -136,14 +136,18 @@ public class MessageTableModel extends AbstractTableModel {
if (!isDuplicate) { if (!isDuplicate) {
if (flag) { if (flag) {
DataManager dataManager = new DataManager(api); try {
// 数据存储在BurpSuite空间内 DataManager dataManager = new DataManager(api);
PersistedObject persistedObject = PersistedObject.persistedObject(); // 数据存储在BurpSuite空间内
persistedObject.setHttpRequestResponse("messageInfo", messageInfo); PersistedObject persistedObject = PersistedObject.persistedObject();
persistedObject.setString("comment", comment); persistedObject.setHttpRequestResponse("messageInfo", messageInfo);
persistedObject.setString("color", color); persistedObject.setString("comment", comment);
String uuidIndex = StringProcessor.getRandomUUID(); persistedObject.setString("color", color);
dataManager.putData("message", uuidIndex, persistedObject); String uuidIndex = StringProcessor.getRandomUUID();
dataManager.putData("message", uuidIndex, persistedObject);
} catch (Exception ignored) {
}
} }
// 添加进日志 // 添加进日志

View File

@@ -125,14 +125,17 @@ public class RegularMatcher {
if (flag) { if (flag) {
// 数据存储在BurpSuite空间内 // 数据存储在BurpSuite空间内
DataManager dataManager = new DataManager(api); try {
PersistedObject persistedObject = PersistedObject.persistedObject(); DataManager dataManager = new DataManager(api);
gRuleMap.forEach((kName, vList) -> { PersistedObject persistedObject = PersistedObject.persistedObject();
PersistedList<String> persistedList = PersistedList.persistedStringList(); gRuleMap.forEach((kName, vList) -> {
persistedList.addAll(vList); PersistedList<String> persistedList = PersistedList.persistedStringList();
persistedObject.setStringList(kName, persistedList); persistedList.addAll(vList);
}); persistedObject.setStringList(kName, persistedList);
dataManager.putData("data", host, persistedObject); });
dataManager.putData("data", host, persistedObject);
} catch (Exception ignored) {
}
} }
return gRuleMap; return gRuleMap;

View File

@@ -57,9 +57,13 @@ public class DataManager {
if (dataIndex != null && !dataIndex.isEmpty()) { if (dataIndex != null && !dataIndex.isEmpty()) {
dataIndex.parallelStream().forEach(index -> { dataIndex.parallelStream().forEach(index -> {
PersistedObject dataObj = persistence.extensionData().getChildObject(index); PersistedObject dataObj = persistence.extensionData().getChildObject(index);
dataObj.stringListKeys().forEach(dataKey -> { try {
RegularMatcher.putDataToGlobalMap(api, index, dataKey, dataObj.getStringList(dataKey).stream().toList(), false); dataObj.stringListKeys().forEach(dataKey -> {
}); RegularMatcher.putDataToGlobalMap(api, index, dataKey, dataObj.getStringList(dataKey).stream().toList(), false);
});
} catch (Exception e) {
api.logging().logToOutput("loadHaEData:" + e.getMessage());
}
}); });
} }
} }