Version: 2.5.11 Update

This commit is contained in:
gh0stkey
2024-01-18 12:07:20 +08:00
parent 49647d68d0
commit e08b930fb5
4 changed files with 44 additions and 38 deletions

View File

@@ -36,7 +36,7 @@ public class BurpExtender implements IBurpExtender, IHttpListener, IMessageEdito
new ConfigLoader(); new ConfigLoader();
String version = "2.5.10"; String version = "2.5.11";
callbacks.setExtensionName(String.format("HaE (%s) - Highlighter and Extractor", version)); callbacks.setExtensionName(String.format("HaE (%s) - Highlighter and Extractor", version));
// 定义输出 // 定义输出
@@ -128,6 +128,7 @@ public class BurpExtender implements IBurpExtender, IHttpListener, IMessageEdito
private Map<String, String> extractRequestMap; private Map<String, String> extractRequestMap;
private Map<String, String> extractResponseMap; private Map<String, String> extractResponseMap;
private ArrayList<String> titleList = new ArrayList<>(); private ArrayList<String> titleList = new ArrayList<>();
private byte[] message;
public MarkInfoTab(IMessageEditorController controller, boolean editable) { public MarkInfoTab(IMessageEditorController controller, boolean editable) {
this.controller = controller; this.controller = controller;
@@ -151,6 +152,7 @@ public class BurpExtender implements IBurpExtender, IHttpListener, IMessageEdito
@Override @Override
public boolean isEnabled(byte[] content, boolean isRequest) { public boolean isEnabled(byte[] content, boolean isRequest) {
this.message = content;
List<Map<String, String>> result = null; List<Map<String, String>> result = null;
if (content.length != 0 && !helpers.bytesToString(content).equals("Loading...")) { if (content.length != 0 && !helpers.bytesToString(content).equals("Loading...")) {
try { try {
@@ -178,7 +180,7 @@ public class BurpExtender implements IBurpExtender, IHttpListener, IMessageEdito
@Override @Override
public byte[] getMessage() { public byte[] getMessage() {
return null; return message;
} }
@Override @Override

View File

@@ -76,7 +76,6 @@ public class Databoard extends JPanel {
} }
private void initComponents() { private void initComponents() {
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
hostLabel = new JLabel(); hostLabel = new JLabel();
hostTextField = new JTextField(); hostTextField = new JTextField();
dataTabbedPane = new JTabbedPane(JTabbedPane.TOP); dataTabbedPane = new JTabbedPane(JTabbedPane.TOP);
@@ -165,6 +164,7 @@ public class Databoard extends JPanel {
populateTabbedPaneByHost(selectedHost); populateTabbedPaneByHost(selectedHost);
} }
} }
private void handleKeyEvents(KeyEvent e) { private void handleKeyEvents(KeyEvent e) {
isMatchHost = true; isMatchHost = true;
int keyCode = e.getKeyCode(); int keyCode = e.getKeyCode();
@@ -313,17 +313,25 @@ public class Databoard extends JPanel {
// 展示请求消息表单 // 展示请求消息表单
JSplitPane messageSplitPane = this.messagePanel.getPanel(); JSplitPane messageSplitPane = this.messagePanel.getPanel();
this.splitPane.setRightComponent(messageSplitPane); this.splitPane.setRightComponent(messageSplitPane);
// 获取字段
table = this.messagePanel.getTable(); table = this.messagePanel.getTable();
// 设置对应字段宽度 this.splitPane.addComponentListener(new ComponentAdapter() {
TableColumnModel columnModel = table.getColumnModel(); @Override
TableColumn column = columnModel.getColumn(1); public void componentResized(ComponentEvent e) {
column.setPreferredWidth(300); splitPane.setDividerLocation(0.4);
column = columnModel.getColumn(2); TableColumnModel columnModel = table.getColumnModel();
column.setPreferredWidth(300); int totalWidth = (int) (getWidth() * 0.6);
columnModel.getColumn(0).setPreferredWidth((int) (totalWidth * 0.1));
columnModel.getColumn(1).setPreferredWidth((int) (totalWidth * 0.3));
columnModel.getColumn(2).setPreferredWidth((int) (totalWidth * 0.3));
columnModel.getColumn(3).setPreferredWidth((int) (totalWidth * 0.1));
columnModel.getColumn(4).setPreferredWidth((int) (totalWidth * 0.1));
columnModel.getColumn(5).setPreferredWidth((int) (totalWidth * 0.1));
}
});
splitPane.setVisible(true); splitPane.setVisible(true);
applyHostFilter(selectedHost); applyHostFilter(selectedHost);
// 主动调用一次stateChanged使得dataTabbedPane可以精准展示内容 // 主动调用一次stateChanged使得dataTabbedPane可以精准展示内容

View File

@@ -163,33 +163,25 @@ public class DatatablePanel extends JPanel {
} }
private void performSearch() { private void performSearch() {
// 检查文本字段的字体颜色是否为黑色,表示可以进行搜索
if (searchField.getForeground().equals(Color.BLACK)) { if (searchField.getForeground().equals(Color.BLACK)) {
// 获取搜索文本 RowFilter<Object, Object> rowFilter = new RowFilter<Object, Object>() {
String searchText = searchField.getText(); public boolean include(Entry<?, ?> entry) {
String searchFieldTextText = searchField.getText();
// 创建行过滤器 Pattern pattern = null;
RowFilter<DefaultTableModel, Object> rowFilter; try {
pattern = new Pattern(searchFieldTextText, REFlags.IGNORE_CASE);
// 检查搜索模式是否为选中状态 } catch (Exception ignored) {
if (searchMode.isSelected()) {
// 反向搜索:创建一个过滤器以排除与正则表达式匹配的行
rowFilter = new RowFilter<DefaultTableModel, Object>() {
public boolean include(Entry<? extends DefaultTableModel, ? extends Object> entry) {
// 对每一行的第二列进行判断假设第二列的索引是1
String entryValue = (String) entry.getValue(1);
// 如果该列的值不包含搜索文本则返回true否则返回false
Pattern pattern = new Pattern(searchText, REFlags.IGNORE_CASE);
return searchText.isEmpty() || !pattern.matcher(entryValue).find();
} }
};
} else {
// 正向搜索:创建一个过滤器以包含与正则表达式匹配的行
rowFilter = RowFilter.regexFilter(String.format("(?i)%s", searchText), 1);
}
// 设置过滤器到排序器 String entryValue = ((String) entry.getValue(1)).toLowerCase();
searchFieldTextText = searchFieldTextText.toLowerCase();
if (pattern != null) {
return searchFieldTextText.isEmpty() || pattern.matcher(entryValue).find() != searchMode.isSelected();
} else {
return searchFieldTextText.isEmpty() || entryValue.contains(searchFieldTextText) != searchMode.isSelected();
}
}
};
sorter.setRowFilter(rowFilter); sorter.setRowFilter(rowFilter);
} }
} }
@@ -231,10 +223,13 @@ public class DatatablePanel extends JPanel {
for (int row : selectRows) { for (int row : selectRows) {
selectData.append(table.getValueAt(row, 1).toString()).append("\n"); selectData.append(table.getValueAt(row, 1).toString()).append("\n");
} }
// 便于单行复制,去除最后一个换行符 // 便于单行复制,去除最后一个换行符
String revData = selectData.reverse().toString().replaceFirst("\n", ""); if (selectData.length() > 0){
StringBuilder retData = new StringBuilder(revData).reverse(); selectData.deleteCharAt(selectData.length() - 1);
return retData.toString(); }
return selectData.toString();
} }
public JTable getTable() { public JTable getTable() {

View File

@@ -44,7 +44,7 @@ public class MessagePanel extends AbstractTableModel implements IMessageEditorCo
private final List<LogEntry> filteredLog = new ArrayList<LogEntry>(); private final List<LogEntry> filteredLog = new ArrayList<LogEntry>();
private IHttpRequestResponse currentlyDisplayedItem; private IHttpRequestResponse currentlyDisplayedItem;
private final IExtensionHelpers helpers; private final IExtensionHelpers helpers;
private Table logTable; private final Table logTable;
public MessagePanel(IBurpExtenderCallbacks callbacks, IExtensionHelpers helpers) { public MessagePanel(IBurpExtenderCallbacks callbacks, IExtensionHelpers helpers) {
this.callbacks = callbacks; this.callbacks = callbacks;
@@ -66,6 +66,7 @@ public class MessagePanel extends AbstractTableModel implements IMessageEditorCo
return age1.compareTo(age2); return age1.compareTo(age2);
} }
}); });
// Color字段根据颜色顺序进行排序 // Color字段根据颜色顺序进行排序
sorter.setComparator(5, new Comparator<String>() { sorter.setComparator(5, new Comparator<String>() {
@Override @Override