diff --git a/README.md b/README.md
index 511674b..6190bab 100644
--- a/README.md
+++ b/README.md
@@ -4,12 +4,11 @@
第一作者: EvilChen(中孚信息元亨实验室), 第二作者: 0chencc(米斯特安全团队)
-
## 项目介绍
-**HaE**是基于 `BurpSuite Java插件API` 开发的请求高亮标记与信息提取的辅助型框架式插件,该插件可以通过自定义正则的方式匹配响应报文或请求报文,并对满足正则匹配的报文进行信息高亮与提取。
+**HaE**是一个基于`BurpSuite Java插件API`开发的辅助型框架式插件,旨在实现对HTTP消息的高亮标记和信息提取。该插件通过自定义正则表达式匹配响应报文或请求报文,并对匹配成功的报文进行标记和提取。
-现代化Web应用走上前后端分离开发模式,这就导致在日常测试时候会有许多的流量,如果你想要尽可能全面的对一个Web应用进行测试评估,将花费大量精力浪费在无用的报文上;**HaE的出现正是为了解决这一类似场景**,借助HaE你可以**有效的减少**测试的时间,将更多的精力放在**有价值、有意义**的报文上,**提高漏洞挖掘效率**。
+随着现代化Web应用采用前后端分离的开发模式,日常漏洞挖掘的过程中,捕获的HTTP请求流量也相应增加。若想全面评估一个Web应用,会花费大量时间在无用的报文上。**HaE的出现旨在解决这类情况**,借助HaE,您能够**有效减少**测试时间,将更多精力集中在**有价值且有意义**的报文上,从而**提高漏洞挖掘效率**。
**注**: 要想灵活的使用`HaE`,你需要掌握正则表达式阅读、编写、修改能力;由于`Java`正则表达式的库并没有`Python`的优雅或方便,所以HaE要求使用者必须用`()`将所需提取的表达式内容包含;例如你要匹配一个**Shiro应用**的响应报文,正常匹配规则为`rememberMe=delete`,如果你要提取这段内容的话就需要变成`(rememberMe=delete)`。
@@ -22,35 +21,32 @@
1. Linux/Mac用户的配置文件目录:`~/.config/HaE/`
2. Windows用户的配置文件目录:`%USERPROFILE%/.config/HaE/`
-
## 优势特点
-1. **精细化配置项**:高自由度配置更适配精细化场景需求;
-2. **简洁可视界面**:简洁的可视化界面让你更加清晰了解HaE的各项配置,操作更轻松,使用更简单;
-3. **颜色升级算法**:内置颜色升级算法,避免“屠龙者终成恶龙”场景,突出最具价值的请求;
-4. **标签化规则项**:标签化你的正则规则,让规则可分类,让管理更轻松;
-5. **数据集合面板**:将所有匹配数据集合到Databoard中,使得测试、梳理更高效;
-6. **高亮标记一体**:在Proxy - History页面你可以通过颜色高亮与Comment判断请求价值;
-7. **实战化官方库**:基于实战化场景、案例进行输出的官方规则库,提升测试实战性;
-8. **配置文件易读**:配置文件使用YAML格式存储,更加便于阅读与修改。
+1. 精细配置:高度自由的配置选项,以满足各类精细化场景需求。
+2. 分类标签:使用标签对规则进行分类,便于管理和组织规则。
+3. 高亮标记:在HTTP History页面,通过颜色高亮和注释判断请求的价值。
+4. 易读配置:使用易读的YAML格式存储配置文件,方便阅读和修改。
+5. 数据集合:将匹配到的数据、请求和响应集中在数据面板中,提高测试和梳理效率。
+6. 简洁可视:清晰可视的界面设计,更轻松地了解和配置HaE,操作简单、使用便捷。
+7. 颜色升级:内置颜色升级算法,避免“屠龙者终成恶龙”场景,突出最具价值的请求。
+8. 实战规则:官方规则库是基于实战化场景总结输出,提升数据发现的有效性、精准性。
| 界面名称 | 界面展示 |
-| ------------------------- | ----------------------------------------------------- |
+| ------------------------ | ---------------------------------------------------- |
| Rules(规则信息管理) |
|
| Config(配置信息管理) |
|
| Databoard(数据集合面板) |
|
-
-
## 实际使用
使用 RGPerson 生成测试数据,放入网站根目录文件中:
-
+
-访问该地址,在`Proxy - HTTP History`中可以看见高亮请求,响应标签页中含有`MarkINFO`标签,其中将匹配到的信息提取了出来。
+访问该地址,在`Proxy - HTTP History`中可以看见高亮请求,响应标签页中含有`MarkInfo`标签,其中将匹配到的信息提取了出来。
-
+
## 文末随笔
@@ -68,4 +64,4 @@
`HaE` 是 404Team [星链计划2.0](https://github.com/knownsec/404StarLink2.0-Galaxy) 中的一环,如果对 `HaE` 有任何疑问又或是想要找小伙伴交流,可以参考星链计划的加群方式。
-- [https://github.com/knownsec/404StarLink2.0-Galaxy#community](https://github.com/knownsec/404StarLink2.0-Galaxy#community)
+- [https://github.com/knownsec/404StarLink2.0-Galaxy#community](https://github.com/knownsec/404StarLink2.0-Galaxy#community)
\ No newline at end of file
diff --git a/images/config.png b/images/config.png
index f0106bd..451b0cf 100644
Binary files a/images/config.png and b/images/config.png differ
diff --git a/images/databoard.png b/images/databoard.png
index eaf47ba..728e852 100644
Binary files a/images/databoard.png and b/images/databoard.png differ
diff --git a/images/16000720732854.png b/images/markinfo.png
similarity index 100%
rename from images/16000720732854.png
rename to images/markinfo.png
diff --git a/images/16000719723284.jpg b/images/rgperson.jpg
similarity index 100%
rename from images/16000719723284.jpg
rename to images/rgperson.jpg
diff --git a/src/main/java/burp/BurpExtender.java b/src/main/java/burp/BurpExtender.java
index 29da5ad..1f47093 100644
--- a/src/main/java/burp/BurpExtender.java
+++ b/src/main/java/burp/BurpExtender.java
@@ -1,8 +1,10 @@
package burp;
-import burp.action.*;
+import burp.core.processor.ColorProcessor;
+import burp.core.processor.MessageProcessor;
import burp.ui.MainUI;
-
+import burp.ui.board.MessagePanel;
+import java.security.NoSuchAlgorithmException;
import java.util.Map;
import java.util.Objects;
import javax.swing.*;
@@ -19,14 +21,14 @@ import javax.swing.event.ChangeListener;
*/
public class BurpExtender implements IBurpExtender, IHttpListener, IMessageEditorTabFactory, ITab {
- private final MainUI main = new MainUI();
+ private MainUI main;
// stdout变成公开属性,便于其他类调用输出调试信息
public static PrintWriter stdout;
private IBurpExtenderCallbacks callbacks;
private static IExtensionHelpers helpers;
- GetColorKey gck = new GetColorKey();
- UpgradeColor uc = new UpgradeColor();
- ProcessMessage pm = new ProcessMessage();
+ ColorProcessor colorProcessor = new ColorProcessor();
+ MessageProcessor messageProcessor = new MessageProcessor();
+ private MessagePanel messagePanel;
@Override
public void registerExtenderCallbacks(final IBurpExtenderCallbacks callbacks)
@@ -34,21 +36,31 @@ public class BurpExtender implements IBurpExtender, IHttpListener, IMessageEdito
this.callbacks = callbacks;
BurpExtender.helpers = callbacks.getHelpers();
- String version = "2.4.7";
+ String version = "2.5";
callbacks.setExtensionName(String.format("HaE (%s) - Highlighter and Extractor", version));
+
// 定义输出
stdout = new PrintWriter(callbacks.getStdout(), true);
- stdout.println("@First Author: EvilChen");
- stdout.println("@Second Author: 0chencc");
- stdout.println("@Github: https://github.com/gh0stkey/HaE");
+ stdout.println("[ HACK THE WORLD - TO DO IT ]");
+ stdout.println("[#] Author: EvilChen & 0chencc");
+ stdout.println("[#] Github: https://github.com/gh0stkey/HaE");
+
// UI
- SwingUtilities.invokeLater(this::initialize);
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ initialize();
+ }
+ });
callbacks.registerHttpListener(BurpExtender.this);
callbacks.registerMessageEditorTabFactory(BurpExtender.this);
+
}
private void initialize(){
+ messagePanel = new MessagePanel(callbacks, helpers);
+ main = new MainUI(messagePanel);
callbacks.customizeUiComponent(main);
callbacks.addSuiteTab(BurpExtender.this);
}
@@ -71,6 +83,7 @@ public class BurpExtender implements IBurpExtender, IHttpListener, IMessageEdito
// 判断是否是响应,且该代码作用域为:REPEATER、INTRUDER、PROXY(分别对应toolFlag 64、32、4)
if (toolFlag == 64 || toolFlag == 32 || toolFlag == 4) {
byte[] content;
+
if (messageIsRequest) {
content = messageInfo.getRequest();
} else {
@@ -78,20 +91,29 @@ public class BurpExtender implements IBurpExtender, IHttpListener, IMessageEdito
}
IHttpService iHttpService = null;
+
try {
iHttpService = messageInfo.getHttpService();
} catch (Exception ignored) {
}
+
// 获取请求主机信息
assert iHttpService != null;
String host = iHttpService.getHost();
String c = new String(content, StandardCharsets.UTF_8).intern();
- List