Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
37a907d6df | ||
|
|
83e5da2f7e | ||
|
|
e43a96b8ad | ||
|
|
a7112ad297 |
@@ -25,8 +25,6 @@ https://gh0st.cn/HaE/
|
||||
|
||||
初次装载`HaE`会初始化配置文件,默认配置文件内置一个正则: `Email`,初始化的配置文件会放在与`BurpSuite Jar`包同级目录下。
|
||||
|
||||

|
||||
|
||||
除了初始化的配置文件外,还有`Setting.yml`,该文件用于存储配置文件路径;`HaE`支持自定义配置文件路径,你可以通过点击`Select File`按钮进行选择自定义配置文件。
|
||||
|
||||

|
||||
@@ -82,13 +80,8 @@ https://gh0st.cn/HaE/
|
||||
|
||||
...还有诸多使用方法等待大家去发掘。
|
||||
|
||||
## 使用视频
|
||||
|
||||
123
|
||||
|
||||
## 文末
|
||||
|
||||
随笔: 正义感是一个不可丢失的东西。
|
||||
|
||||
Github项目地址(BUG、需求、正则欢迎提交): https://github.com/gh0stkey/HaE
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ public class BurpExtender implements IBurpExtender, IHttpListener, IMessageEdito
|
||||
this.callbacks = callbacks;
|
||||
BurpExtender.helpers = callbacks.getHelpers();
|
||||
|
||||
String version = "2.0";
|
||||
String version = "2.0.2";
|
||||
callbacks.setExtensionName(String.format("HaE (%s) - Highlighter and Extractor", version));
|
||||
// 定义输出
|
||||
stdout = new PrintWriter(callbacks.getStdout(), true);
|
||||
@@ -133,6 +133,9 @@ public class BurpExtender implements IBurpExtender, IHttpListener, IMessageEdito
|
||||
|
||||
@Override
|
||||
public boolean isEnabled(byte[] content, boolean isRequest) {
|
||||
Map<String, Map<String, Object>> obj;
|
||||
|
||||
if (isRequest) {
|
||||
try {
|
||||
// 流量清洗
|
||||
String urlString = helpers.analyzeRequest(controller.getHttpService(), controller.getRequest()).getUrl().toString();
|
||||
@@ -153,17 +156,24 @@ public class BurpExtender implements IBurpExtender, IHttpListener, IMessageEdito
|
||||
byte[] byteRequest = controller.getRequest();
|
||||
byte[] body = Arrays.copyOfRange(byteRequest, bodyOffset, byteRequest.length);
|
||||
|
||||
Map<String, Map<String, Object>> obj;
|
||||
if (isRequest) {
|
||||
obj = ec.matchRegex(content, headers, body, "request");
|
||||
if (obj.size() != 0) {
|
||||
if (obj.size() > 0) {
|
||||
String result = da.extractString(obj);
|
||||
extractRequestContent = result.getBytes();
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
obj = ec.matchRegex(content, headers, body, "response");
|
||||
if (obj.size() != 0) {
|
||||
|
||||
// 获取报文头
|
||||
List<String> tmpHeaders1 = helpers.analyzeResponse(content).getHeaders();
|
||||
String headers1 = String.join("\n", tmpHeaders1);
|
||||
// 获取报文主体
|
||||
int bodyOffset1 = helpers.analyzeResponse(content).getBodyOffset();
|
||||
byte[] byteRequest1 = controller.getResponse();
|
||||
byte[] body = Arrays.copyOfRange(byteRequest1, bodyOffset1, byteRequest1.length);
|
||||
|
||||
obj = ec.matchRegex(content, headers1, body, "response");
|
||||
if (obj.size() > 0) {
|
||||
String result = da.extractString(obj);
|
||||
extractResponseContent = result.getBytes();
|
||||
return true;
|
||||
|
||||
@@ -221,7 +221,7 @@ class TabTitleEditListener extends MouseAdapter implements ChangeListener, Docum
|
||||
protected Boolean isRenamesucc = false;
|
||||
protected LoadConfigFile loadfile = new LoadConfigFile();
|
||||
protected LoadRule lr = new LoadRule(loadfile.getConfigPath());
|
||||
protected SetRuleConfig setruleconfig = new SetRuleConfig();
|
||||
protected SetRuleConfig setRuleConfig = new SetRuleConfig();
|
||||
protected final Action startEditing = new AbstractAction() {
|
||||
@Override public void actionPerformed(ActionEvent e) {
|
||||
editingIdx = tabbedPane.getSelectedIndex();
|
||||
@@ -243,7 +243,7 @@ class TabTitleEditListener extends MouseAdapter implements ChangeListener, Docum
|
||||
if (editingIdx >= 0 && !title.isEmpty()) {
|
||||
String oldname = tabbedPane.getTitleAt(editingIdx);
|
||||
tabbedPane.setTitleAt(editingIdx, title);
|
||||
setruleconfig.rename(oldname,title);
|
||||
setRuleConfig.rename(oldname,title);
|
||||
}
|
||||
cancelEditing.actionPerformed(null);
|
||||
}
|
||||
@@ -298,7 +298,7 @@ class TabTitleEditListener extends MouseAdapter implements ChangeListener, Docum
|
||||
}
|
||||
public void newTab(){
|
||||
Object[][] data = new Object[][]{{false, "New Name", "(New Regex)", "gray", "any", "nfa"}};
|
||||
insertTab(tabbedPane,setruleconfig.newRules(),data);
|
||||
insertTab(tabbedPane,setRuleConfig.newRules(),data);
|
||||
}
|
||||
public void insertTab(@NotNull JTabbedPane pane,String title,Object[][] data){
|
||||
pane.addTab(title,new RulePane(data,pane));
|
||||
|
||||
@@ -27,18 +27,19 @@ public class RulePane extends JPanel {
|
||||
RuleSetting add = new RuleSetting();
|
||||
int isOk = JOptionPane.showConfirmDialog(null,add,"RuleSetting - Add Rule",JOptionPane.OK_OPTION);
|
||||
if(isOk == 0){
|
||||
model.addRow(new Object[0]);
|
||||
model.setValueAt(false,(model.getRowCount()-1),0);
|
||||
model.setValueAt(add.Name.getText(),(model.getRowCount()-1),1);
|
||||
model.setValueAt(add.Regex.getText(),(model.getRowCount()-1),2);
|
||||
model.setValueAt(add.ColorSelect.getSelectedItem().toString(),(model.getRowCount()-1),3);
|
||||
model.setValueAt(add.ScopeSelect.getSelectedItem().toString(),(model.getRowCount()-1),4);
|
||||
model.setValueAt(add.EngineSelect.getSelectedItem().toString(),(model.getRowCount()-1),5);
|
||||
Vector data = new Vector();
|
||||
data.add(false);
|
||||
data.add(add.Name.getText());
|
||||
data.add(add.Regex.getText());
|
||||
data.add(add.ColorSelect.getSelectedItem().toString());
|
||||
data.add(add.ScopeSelect.getSelectedItem().toString());
|
||||
data.add(add.EngineSelect.getSelectedItem().toString());
|
||||
model.insertRow(model.getRowCount(),data);
|
||||
model = (DefaultTableModel) table.getModel();
|
||||
int select = table.convertRowIndexToModel(table.getSelectedRow());
|
||||
setruleconfig.add((Vector) model.getDataVector().get(select),pane.getTitleAt(pane.getSelectedIndex()));
|
||||
setruleconfig.add(data,pane.getTitleAt(pane.getSelectedIndex()));
|
||||
}
|
||||
}
|
||||
|
||||
private void RuleEditMouseClicked(MouseEvent e,JTabbedPane pane){
|
||||
if (table.getSelectedRowCount()>=1){
|
||||
RuleSetting edit = new RuleSetting();
|
||||
@@ -60,18 +61,19 @@ public class RulePane extends JPanel {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void RuleRemoveMouseClicked(MouseEvent e,JTabbedPane pane){
|
||||
if (table.getSelectedRowCount()>=1){
|
||||
int isOk = JOptionPane.showConfirmDialog(null,"Are your sure?","RuleSetting - Delete Rule",JOptionPane.OK_OPTION);
|
||||
if (isOk==0){
|
||||
model.removeRow(table.convertRowIndexToModel(table.getSelectedRow()));
|
||||
table.remove(table.getSelectedRow());
|
||||
model = (DefaultTableModel) table.getModel();
|
||||
int select = table.convertRowIndexToModel(table.getSelectedRow());
|
||||
model.removeRow(select);
|
||||
model = (DefaultTableModel) table.getModel();
|
||||
setruleconfig.remove(select,pane.getTitleAt(pane.getSelectedIndex()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void RuleTableChange(TableModelEvent e,JTabbedPane pane) {
|
||||
if (e.getColumn()==0&&table.getSelectedRow()!=-1&&!isEdit){
|
||||
model = (DefaultTableModel) table.getModel();
|
||||
|
||||
@@ -23,7 +23,7 @@ public class RuleSetting extends JPanel {
|
||||
Name = new JTextField();
|
||||
ScopeSelect = new JComboBox<>();
|
||||
EngineSelect = new JComboBox<>();
|
||||
label7 = new JLabel();
|
||||
label6 = new JLabel();
|
||||
ColorSelect = new JComboBox<>();
|
||||
|
||||
//======== this ========
|
||||
@@ -32,24 +32,24 @@ public class RuleSetting extends JPanel {
|
||||
//---- label5 ----
|
||||
label5.setText("Engine:");
|
||||
add(label5);
|
||||
label5.setBounds(10, 175, 50, 17);
|
||||
label5.setBounds(new Rectangle(new Point(10, 175), label5.getPreferredSize()));
|
||||
|
||||
//---- label4 ----
|
||||
label4.setText("Scope:");
|
||||
add(label4);
|
||||
label4.setBounds(10, 135, 50, 17);
|
||||
label4.setBounds(new Rectangle(new Point(10, 135), label4.getPreferredSize()));
|
||||
add(Regex);
|
||||
Regex.setBounds(70, 50, 265, 30);
|
||||
|
||||
//---- label3 ----
|
||||
label3.setText("Regex:");
|
||||
add(label3);
|
||||
label3.setBounds(10, 55, 50, 17);
|
||||
label3.setBounds(new Rectangle(new Point(10, 55), label3.getPreferredSize()));
|
||||
|
||||
//---- label2 ----
|
||||
label2.setText("Name:");
|
||||
add(label2);
|
||||
label2.setBounds(10, 15, 50, 17);
|
||||
label2.setBounds(new Rectangle(new Point(10, 15), label2.getPreferredSize()));
|
||||
add(Name);
|
||||
Name.setBounds(70, 10, 265, 30);
|
||||
|
||||
@@ -64,9 +64,9 @@ public class RuleSetting extends JPanel {
|
||||
EngineSelect.setBounds(70, 170, 265, EngineSelect.getPreferredSize().height);
|
||||
|
||||
//---- label7 ----
|
||||
label7.setText("Color:");
|
||||
add(label7);
|
||||
label7.setBounds(new Rectangle(new Point(10, 95), label7.getPreferredSize()));
|
||||
label6.setText("Color:");
|
||||
add(label6);
|
||||
label6.setBounds(new Rectangle(new Point(10, 95), label6.getPreferredSize()));
|
||||
|
||||
//---- ColorSelect ----
|
||||
ColorSelect.setModel(new DefaultComboBoxModel<>(Config.colorArray));
|
||||
@@ -99,7 +99,7 @@ public class RuleSetting extends JPanel {
|
||||
public JTextField Name;
|
||||
public JComboBox<String> ScopeSelect;
|
||||
public JComboBox<String> EngineSelect;
|
||||
private JLabel label7;
|
||||
private JLabel label6;
|
||||
public JComboBox<String> ColorSelect;
|
||||
// JFormDesigner - End of variables declaration //GEN-END:variables
|
||||
}
|
||||
|
||||
@@ -14,20 +14,10 @@ public class Rule {
|
||||
private String Color;
|
||||
private String Engine;
|
||||
private String Scope;
|
||||
private String Action;
|
||||
|
||||
public Boolean getLoaded() {
|
||||
return Loaded;
|
||||
}
|
||||
|
||||
public void setLoaded(Boolean loaded) {
|
||||
this.Loaded = loaded;
|
||||
}
|
||||
|
||||
public String getAction() {
|
||||
return Action;
|
||||
}
|
||||
|
||||
public String getColor() {
|
||||
return Color;
|
||||
}
|
||||
@@ -48,6 +38,11 @@ public class Rule {
|
||||
return Scope;
|
||||
}
|
||||
|
||||
public void setLoaded(Boolean loaded) {
|
||||
this.Loaded = loaded;
|
||||
}
|
||||
|
||||
|
||||
public void setColor(String color) {
|
||||
this.Color = color;
|
||||
}
|
||||
|
||||
@@ -98,7 +98,7 @@ public class SetRuleConfig {
|
||||
lr = new LoadRule(loadfile.getConfigPath());
|
||||
config = lr.getConfig();
|
||||
String name = "New ";
|
||||
Object[][] data = new Object[][]{{false,"newName","newRegex","gray","any","nfa"}};
|
||||
Object[][] data = new Object[][]{{false, "New Name", "(New Regex)", "gray", "any", "nfa"}};
|
||||
while (config.containsKey(name+i)){
|
||||
i++;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user