Version: 2.0.1 Fixed bug
This commit is contained in:
@@ -33,7 +33,7 @@ public class BurpExtender implements IBurpExtender, IHttpListener, IMessageEdito
|
|||||||
this.callbacks = callbacks;
|
this.callbacks = callbacks;
|
||||||
BurpExtender.helpers = callbacks.getHelpers();
|
BurpExtender.helpers = callbacks.getHelpers();
|
||||||
|
|
||||||
String version = "2.0";
|
String version = "2.0.1";
|
||||||
callbacks.setExtensionName(String.format("HaE (%s) - Highlighter and Extractor", version));
|
callbacks.setExtensionName(String.format("HaE (%s) - Highlighter and Extractor", version));
|
||||||
// 定义输出
|
// 定义输出
|
||||||
stdout = new PrintWriter(callbacks.getStdout(), true);
|
stdout = new PrintWriter(callbacks.getStdout(), true);
|
||||||
@@ -133,37 +133,47 @@ public class BurpExtender implements IBurpExtender, IHttpListener, IMessageEdito
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isEnabled(byte[] content, boolean isRequest) {
|
public boolean isEnabled(byte[] content, boolean isRequest) {
|
||||||
try {
|
Map<String, Map<String, Object>> obj;
|
||||||
// 流量清洗
|
|
||||||
String urlString = helpers.analyzeRequest(controller.getHttpService(), controller.getRequest()).getUrl().toString();
|
if (isRequest) {
|
||||||
urlString = urlString.indexOf("?") > 0 ? urlString.substring(0, urlString.indexOf("?")) : urlString;
|
try {
|
||||||
// 正则判断
|
// 流量清洗
|
||||||
if (mh.matchSuffix(urlString)) {
|
String urlString = helpers.analyzeRequest(controller.getHttpService(), controller.getRequest()).getUrl().toString();
|
||||||
|
urlString = urlString.indexOf("?") > 0 ? urlString.substring(0, urlString.indexOf("?")) : urlString;
|
||||||
|
// 正则判断
|
||||||
|
if (mh.matchSuffix(urlString)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取报文头
|
// 获取报文头
|
||||||
List<String> tmpHeaders = helpers.analyzeRequest(controller.getHttpService(), content).getHeaders();
|
List<String> tmpHeaders = helpers.analyzeRequest(controller.getHttpService(), content).getHeaders();
|
||||||
String headers = String.join("\n", tmpHeaders);
|
String headers = String.join("\n", tmpHeaders);
|
||||||
// 获取报文主体
|
// 获取报文主体
|
||||||
int bodyOffset = helpers.analyzeRequest(controller.getHttpService(), content).getBodyOffset();
|
int bodyOffset = helpers.analyzeRequest(controller.getHttpService(), content).getBodyOffset();
|
||||||
byte[] byteRequest = controller.getRequest();
|
byte[] byteRequest = controller.getRequest();
|
||||||
byte[] body = Arrays.copyOfRange(byteRequest, bodyOffset, byteRequest.length);
|
byte[] body = Arrays.copyOfRange(byteRequest, bodyOffset, byteRequest.length);
|
||||||
|
|
||||||
Map<String, Map<String, Object>> obj;
|
|
||||||
if (isRequest) {
|
|
||||||
obj = ec.matchRegex(content, headers, body, "request");
|
obj = ec.matchRegex(content, headers, body, "request");
|
||||||
if (obj.size() != 0) {
|
if (obj.size() > 0) {
|
||||||
String result = da.extractString(obj);
|
String result = da.extractString(obj);
|
||||||
extractRequestContent = result.getBytes();
|
extractRequestContent = result.getBytes();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
} else {
|
} 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);
|
String result = da.extractString(obj);
|
||||||
extractResponseContent = result.getBytes();
|
extractResponseContent = result.getBytes();
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -221,7 +221,7 @@ class TabTitleEditListener extends MouseAdapter implements ChangeListener, Docum
|
|||||||
protected Boolean isRenamesucc = false;
|
protected Boolean isRenamesucc = false;
|
||||||
protected LoadConfigFile loadfile = new LoadConfigFile();
|
protected LoadConfigFile loadfile = new LoadConfigFile();
|
||||||
protected LoadRule lr = new LoadRule(loadfile.getConfigPath());
|
protected LoadRule lr = new LoadRule(loadfile.getConfigPath());
|
||||||
protected SetRuleConfig setruleconfig = new SetRuleConfig();
|
protected SetRuleConfig setRuleConfig = new SetRuleConfig();
|
||||||
protected final Action startEditing = new AbstractAction() {
|
protected final Action startEditing = new AbstractAction() {
|
||||||
@Override public void actionPerformed(ActionEvent e) {
|
@Override public void actionPerformed(ActionEvent e) {
|
||||||
editingIdx = tabbedPane.getSelectedIndex();
|
editingIdx = tabbedPane.getSelectedIndex();
|
||||||
@@ -243,7 +243,7 @@ class TabTitleEditListener extends MouseAdapter implements ChangeListener, Docum
|
|||||||
if (editingIdx >= 0 && !title.isEmpty()) {
|
if (editingIdx >= 0 && !title.isEmpty()) {
|
||||||
String oldname = tabbedPane.getTitleAt(editingIdx);
|
String oldname = tabbedPane.getTitleAt(editingIdx);
|
||||||
tabbedPane.setTitleAt(editingIdx, title);
|
tabbedPane.setTitleAt(editingIdx, title);
|
||||||
setruleconfig.rename(oldname,title);
|
setRuleConfig.rename(oldname,title);
|
||||||
}
|
}
|
||||||
cancelEditing.actionPerformed(null);
|
cancelEditing.actionPerformed(null);
|
||||||
}
|
}
|
||||||
@@ -298,7 +298,7 @@ class TabTitleEditListener extends MouseAdapter implements ChangeListener, Docum
|
|||||||
}
|
}
|
||||||
public void newTab(){
|
public void newTab(){
|
||||||
Object[][] data = new Object[][]{{false, "New Name", "(New Regex)", "gray", "any", "nfa"}};
|
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){
|
public void insertTab(@NotNull JTabbedPane pane,String title,Object[][] data){
|
||||||
pane.addTab(title,new RulePane(data,pane));
|
pane.addTab(title,new RulePane(data,pane));
|
||||||
|
|||||||
@@ -27,18 +27,19 @@ public class RulePane extends JPanel {
|
|||||||
RuleSetting add = new RuleSetting();
|
RuleSetting add = new RuleSetting();
|
||||||
int isOk = JOptionPane.showConfirmDialog(null,add,"RuleSetting - Add Rule",JOptionPane.OK_OPTION);
|
int isOk = JOptionPane.showConfirmDialog(null,add,"RuleSetting - Add Rule",JOptionPane.OK_OPTION);
|
||||||
if(isOk == 0){
|
if(isOk == 0){
|
||||||
model.addRow(new Object[0]);
|
Vector data = new Vector();
|
||||||
model.setValueAt(false,(model.getRowCount()-1),0);
|
data.add(false);
|
||||||
model.setValueAt(add.Name.getText(),(model.getRowCount()-1),1);
|
data.add(add.Name.getText());
|
||||||
model.setValueAt(add.Regex.getText(),(model.getRowCount()-1),2);
|
data.add(add.Regex.getText());
|
||||||
model.setValueAt(add.ColorSelect.getSelectedItem().toString(),(model.getRowCount()-1),3);
|
data.add(add.ColorSelect.getSelectedItem().toString());
|
||||||
model.setValueAt(add.ScopeSelect.getSelectedItem().toString(),(model.getRowCount()-1),4);
|
data.add(add.ScopeSelect.getSelectedItem().toString());
|
||||||
model.setValueAt(add.EngineSelect.getSelectedItem().toString(),(model.getRowCount()-1),5);
|
data.add(add.EngineSelect.getSelectedItem().toString());
|
||||||
|
model.insertRow(model.getRowCount(),data);
|
||||||
model = (DefaultTableModel) table.getModel();
|
model = (DefaultTableModel) table.getModel();
|
||||||
int select = table.convertRowIndexToModel(table.getSelectedRow());
|
setruleconfig.add(data,pane.getTitleAt(pane.getSelectedIndex()));
|
||||||
setruleconfig.add((Vector) model.getDataVector().get(select),pane.getTitleAt(pane.getSelectedIndex()));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void RuleEditMouseClicked(MouseEvent e,JTabbedPane pane){
|
private void RuleEditMouseClicked(MouseEvent e,JTabbedPane pane){
|
||||||
if (table.getSelectedRowCount()>=1){
|
if (table.getSelectedRowCount()>=1){
|
||||||
RuleSetting edit = new RuleSetting();
|
RuleSetting edit = new RuleSetting();
|
||||||
@@ -60,18 +61,19 @@ public class RulePane extends JPanel {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void RuleRemoveMouseClicked(MouseEvent e,JTabbedPane pane){
|
private void RuleRemoveMouseClicked(MouseEvent e,JTabbedPane pane){
|
||||||
if (table.getSelectedRowCount()>=1){
|
if (table.getSelectedRowCount()>=1){
|
||||||
int isOk = JOptionPane.showConfirmDialog(null,"Are your sure?","RuleSetting - Delete Rule",JOptionPane.OK_OPTION);
|
int isOk = JOptionPane.showConfirmDialog(null,"Are your sure?","RuleSetting - Delete Rule",JOptionPane.OK_OPTION);
|
||||||
if (isOk==0){
|
if (isOk==0){
|
||||||
model.removeRow(table.convertRowIndexToModel(table.getSelectedRow()));
|
|
||||||
table.remove(table.getSelectedRow());
|
|
||||||
model = (DefaultTableModel) table.getModel();
|
|
||||||
int select = table.convertRowIndexToModel(table.getSelectedRow());
|
int select = table.convertRowIndexToModel(table.getSelectedRow());
|
||||||
|
model.removeRow(select);
|
||||||
|
model = (DefaultTableModel) table.getModel();
|
||||||
setruleconfig.remove(select,pane.getTitleAt(pane.getSelectedIndex()));
|
setruleconfig.remove(select,pane.getTitleAt(pane.getSelectedIndex()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void RuleTableChange(TableModelEvent e,JTabbedPane pane) {
|
private void RuleTableChange(TableModelEvent e,JTabbedPane pane) {
|
||||||
if (e.getColumn()==0&&table.getSelectedRow()!=-1&&!isEdit){
|
if (e.getColumn()==0&&table.getSelectedRow()!=-1&&!isEdit){
|
||||||
model = (DefaultTableModel) table.getModel();
|
model = (DefaultTableModel) table.getModel();
|
||||||
|
|||||||
@@ -14,20 +14,10 @@ public class Rule {
|
|||||||
private String Color;
|
private String Color;
|
||||||
private String Engine;
|
private String Engine;
|
||||||
private String Scope;
|
private String Scope;
|
||||||
private String Action;
|
|
||||||
|
|
||||||
public Boolean getLoaded() {
|
public Boolean getLoaded() {
|
||||||
return Loaded;
|
return Loaded;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLoaded(Boolean loaded) {
|
|
||||||
this.Loaded = loaded;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getAction() {
|
|
||||||
return Action;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getColor() {
|
public String getColor() {
|
||||||
return Color;
|
return Color;
|
||||||
}
|
}
|
||||||
@@ -48,6 +38,11 @@ public class Rule {
|
|||||||
return Scope;
|
return Scope;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setLoaded(Boolean loaded) {
|
||||||
|
this.Loaded = loaded;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public void setColor(String color) {
|
public void setColor(String color) {
|
||||||
this.Color = color;
|
this.Color = color;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -98,7 +98,7 @@ public class SetRuleConfig {
|
|||||||
lr = new LoadRule(loadfile.getConfigPath());
|
lr = new LoadRule(loadfile.getConfigPath());
|
||||||
config = lr.getConfig();
|
config = lr.getConfig();
|
||||||
String name = "New ";
|
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)){
|
while (config.containsKey(name+i)){
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user