Version: 2.4.1 Update

This commit is contained in:
AnonymousUser
2022-06-29 15:17:42 +08:00
parent 17a84fc19e
commit 7e0e3054be
5 changed files with 48 additions and 40 deletions

View File

@@ -30,4 +30,5 @@ dependencies {
compile group: 'org.yaml', name: 'snakeyaml', version: '1.28'
compile 'net.sourceforge.jregex:jregex:1.2_01'
compile 'dk.brics.automaton:automaton:1.11-8'
compile 'com.squareup.okhttp:okhttp:2.7.5'
}

View File

@@ -3,6 +3,7 @@ package burp;
import burp.action.*;
import burp.ui.MainUI;
import java.util.HashMap;
import java.util.Map;
import javax.swing.*;
import java.awt.*;
@@ -33,7 +34,7 @@ public class BurpExtender implements IBurpExtender, IHttpListener, IMessageEdito
this.callbacks = callbacks;
BurpExtender.helpers = callbacks.getHelpers();
String version = "2.4";
String version = "2.4.1";
callbacks.setExtensionName(String.format("HaE (%s) - Highlighter and Extractor", version));
// 定义输出
stdout = new PrintWriter(callbacks.getStdout(), true);
@@ -115,6 +116,7 @@ public class BurpExtender implements IBurpExtender, IHttpListener, IMessageEdito
private final IMessageEditorController controller;
private Map<String, String> extractRequestMap;
private Map<String, String> extractResponseMap;
private ArrayList<String> titleList = new ArrayList<>();
public MarkInfoTab(IMessageEditorController controller, boolean editable) {
this.controller = controller;
@@ -197,6 +199,7 @@ public class BurpExtender implements IBurpExtender, IHttpListener, IMessageEdito
* 创建MarkInfo表单
*/
public void makeTable(Map<String, String> dataMap) {
ArrayList<String> lTitleList = new ArrayList<>();
dataMap.keySet().forEach(i->{
String[] extractData = dataMap.get(i).split("\n");
Object[][] data = new Object[extractData.length][1];
@@ -204,14 +207,23 @@ public class BurpExtender implements IBurpExtender, IHttpListener, IMessageEdito
data[x][0] = extractData[x];
// stdout.println(extractData[x]);
}
int indexOfTab = this.jTabbedPane.indexOfTab(i);
JScrollPane jScrollPane = new JScrollPane(new JTable(data, new Object[]{"Information"}));
lTitleList.add(i);
this.jTabbedPane.addTab(i, jScrollPane);
// 使用removeAll会导致UI出现空白的情况为了改善用户侧体验采用remove的方式进行删除
});
/*
* 使用removeAll会导致MarkInfo UI出现空白的情况为了改善用户侧体验采用remove的方式进行删除
* 采用全局ArrayList的方式遍历删除Tab以此应对BurpSuite缓存机制导致的MarkInfo UI错误展示。
*/
titleList.forEach(t->{
int indexOfTab = this.jTabbedPane.indexOfTab(t);
if (indexOfTab != -1) {
this.jTabbedPane.remove(indexOfTab);
this.jTabbedPane.removeTabAt(indexOfTab);
}
});
titleList = lTitleList;
}
}

View File

@@ -94,7 +94,7 @@ public class ExtractContent {
}
});
// host: {Name, List}
// 将提取的数据存放到全局变量中
if (!host.isEmpty()) {
map.keySet().forEach(i -> {
Map<String, Object> tmpMap = map.get(i);

View File

@@ -4,12 +4,15 @@ import burp.Config;
import burp.yaml.LoadConfig;
import burp.yaml.SetConfig;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
import java.io.FileOutputStream;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.awt.*;
import java.awt.event.*;
import java.util.Map;
@@ -41,18 +44,23 @@ public class MainUI extends JPanel{
}
}
private void selectFileMouseClicked(MouseEvent e) {
JFileChooser selectFile = new JFileChooser();
selectFile.setFileSelectionMode(JFileChooser.FILES_ONLY);
FileNameExtensionFilter filter = new FileNameExtensionFilter("Yaml File (.yml/.yaml)","yaml", "yml");
selectFile.setFileFilter(filter);
int selectFrame = selectFile.showDialog(new JLabel(),"Select");
if (selectFrame == JFileChooser.APPROVE_OPTION){
String configPath = selectFile.getSelectedFile().toString();
reloadRule();
loadConn.setConfigPath(configPath);
configTextField.setText(configPath);
private void onlineUpdateMouseClicked(MouseEvent e) {
String url = "https://raw.githubusercontent.com/gh0stkey/HaE/gh-pages/Config.yml";
OkHttpClient httpClient = new OkHttpClient();
Request httpRequest = new Request.Builder().url(url).get().build();
try {
Response httpResponse = httpClient.newCall(httpRequest).execute();
// 获取官方规则文件,在线更新写入
String configFile = configTextField.getText();
FileOutputStream fileOutputStream = new FileOutputStream(configFile);
fileOutputStream.write(httpResponse.body().bytes());
JOptionPane.showMessageDialog(null, "Config file updated successfully!", "Error",
JOptionPane.INFORMATION_MESSAGE);
} catch (Exception ignored) {
JOptionPane.showMessageDialog(null, "Please check your network!", "Error",
JOptionPane.ERROR_MESSAGE);
}
new LoadConfig();
}
@@ -84,7 +92,7 @@ public class MainUI extends JPanel{
rulePanel = new JPanel();
configTextField = new JTextField();
configLabel = new JLabel();
selectFileButton = new JButton();
onlineUpdateButton = new JButton();
reloadButton = new JButton();
excludeSuffixLabel = new JLabel();
excludeSuffixTextField = new JTextField();
@@ -111,19 +119,19 @@ public class MainUI extends JPanel{
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(5, 0, 5, 5), 0, 0));
configLabel.setText("Config File Path:");
configLabel.setText("Config Path:");
rulePanel.add(configLabel, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0,
GridBagConstraints.WEST, GridBagConstraints.VERTICAL,
new Insets(5, 5, 5, 5), 0, 0));
selectFileButton.setText("Select File ...");
selectFileButton.addMouseListener(new MouseAdapter() {
onlineUpdateButton.setText("Online Update");
onlineUpdateButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
selectFileMouseClicked(e);
onlineUpdateMouseClicked(e);
}
});
rulePanel.add(selectFileButton, new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0,
rulePanel.add(onlineUpdateButton, new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(5, 0, 5, 5), 0, 0));
@@ -184,7 +192,7 @@ public class MainUI extends JPanel{
private JPanel rulePanel;
private JTextField configTextField;
private JLabel configLabel;
private JButton selectFileButton;
private JButton onlineUpdateButton;
private JButton reloadButton;
private JLabel excludeSuffixLabel;
private JTextField excludeSuffixTextField;

View File

@@ -23,7 +23,6 @@ public class LoadConfig {
public LoadConfig() {
// 构造函数,初始化配置
File HaEConfigPathFile = new File(HaEConfigPath);
if (!(HaEConfigPathFile.exists() && HaEConfigPathFile.isDirectory())) {
HaEConfigPathFile.mkdirs();
@@ -146,18 +145,6 @@ public class LoadConfig {
return resRule;
}
// 设置配置路径
public void setConfigPath(String filePath){
Map<String,Object> r = new HashMap<>();
r.put("configPath", filePath);
r.put("excludeSuffix", getExcludeSuffix());
try{
Writer ws = new OutputStreamWriter(new FileOutputStream(SettingPath), StandardCharsets.UTF_8);
yaml.dump(r, ws);
}catch (Exception ex){
ex.printStackTrace();
}
}
// 设置不包含的后缀名
public void setExcludeSuffix(String excludeSuffix){