Skip to content

Commit

Permalink
Version: 2.4.1 Update
Browse files Browse the repository at this point in the history
  • Loading branch information
AnonymousUser committed Jun 29, 2022
1 parent 17a84fc commit 7e0e305
Show file tree
Hide file tree
Showing 5 changed files with 48 additions and 40 deletions.
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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'
}
22 changes: 17 additions & 5 deletions src/main/java/burp/BurpExtender.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import burp.action.*;
import burp.ui.MainUI;

import java.util.HashMap;
import java.util.Map;
import javax.swing.*;
import java.awt.*;
Expand Down Expand Up @@ -33,7 +34,7 @@ public void registerExtenderCallbacks(final IBurpExtenderCallbacks callbacks)
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);
Expand Down Expand Up @@ -115,6 +116,7 @@ class MarkInfoTab implements IMessageEditorTab {
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;
Expand Down Expand Up @@ -197,21 +199,31 @@ public void setMessage(byte[] content, boolean isRequest) {
* 创建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];
for (int x = 0; x < extractData.length; x++) {
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"}));
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;
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/main/java/burp/action/ExtractContent.java
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ public Map<String, Map<String, Object>> matchRegex(byte[] content, String header
}
});

// host: {Name, List}
// 将提取的数据存放到全局变量中
if (!host.isEmpty()) {
map.keySet().forEach(i -> {
Map<String, Object> tmpMap = map.get(i);
Expand Down
50 changes: 29 additions & 21 deletions src/main/java/burp/ui/MainUI.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,15 @@
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;
Expand All @@ -32,7 +35,7 @@ public void closeTabActionPerformed(ActionEvent e){
setConn.deleteRules(ruleTabbedPane.getTitleAt(ruleTabbedPane.getSelectedIndex()));
ruleTabbedPane.remove(ruleTabbedPane.getSelectedIndex());
ruleTabbedPane.setSelectedIndex(ruleTabbedPane.getSelectedIndex()-1);
}else{
} else {
SetConfig setConn = new SetConfig();
setConn.deleteRules(ruleTabbedPane.getTitleAt(ruleTabbedPane.getSelectedIndex()));
ruleTabbedPane.remove(ruleTabbedPane.getSelectedIndex());
Expand All @@ -41,18 +44,23 @@ public void closeTabActionPerformed(ActionEvent e){
}
}

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();
}

Expand Down Expand Up @@ -84,7 +92,7 @@ private void initComponents() {
rulePanel = new JPanel();
configTextField = new JTextField();
configLabel = new JLabel();
selectFileButton = new JButton();
onlineUpdateButton = new JButton();
reloadButton = new JButton();
excludeSuffixLabel = new JLabel();
excludeSuffixTextField = new JTextField();
Expand All @@ -111,19 +119,19 @@ private void initComponents() {
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));

Expand All @@ -139,7 +147,7 @@ public void mouseClicked(MouseEvent e) {
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(5, 0, 5, 5), 0, 0));

excludeSuffixLabel.setText("ExcludeSuffix:");
excludeSuffixLabel.setText("Exclude Suffix:");
rulePanel.add(excludeSuffixLabel, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0,
GridBagConstraints.SOUTHWEST, GridBagConstraints.NONE,
new Insets(0, 5, 5, 5), 0, 0));
Expand Down Expand Up @@ -184,7 +192,7 @@ public void mouseClicked(MouseEvent e) {
private JPanel rulePanel;
private JTextField configTextField;
private JLabel configLabel;
private JButton selectFileButton;
private JButton onlineUpdateButton;
private JButton reloadButton;
private JLabel excludeSuffixLabel;
private JTextField excludeSuffixTextField;
Expand Down
13 changes: 0 additions & 13 deletions src/main/java/burp/yaml/LoadConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ public class LoadConfig {

public LoadConfig() {
// 构造函数,初始化配置

File HaEConfigPathFile = new File(HaEConfigPath);
if (!(HaEConfigPathFile.exists() && HaEConfigPathFile.isDirectory())) {
HaEConfigPathFile.mkdirs();
Expand Down Expand Up @@ -146,18 +145,6 @@ public static Map<String,Object[][]> getRules(){
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){
Expand Down

0 comments on commit 7e0e305

Please sign in to comment.