diff --git a/README.md b/README.md
index ab5322f..616f2b2 100644
--- a/README.md
+++ b/README.md
@@ -6,11 +6,14 @@
## 项目介绍
-**HaE**是一个基于`BurpSuite Java插件API`开发的辅助型框架式插件,旨在实现对HTTP消息的高亮标记和信息提取。该插件通过自定义正则表达式匹配响应报文或请求报文,并对匹配成功的报文进行标记和提取。
+**HaE**是一款网络安全(数据安全)领域下的辅助型框架式项目,旨在实现对HTTP消息(包含WebSocket)的高亮标记和信息提取。本项目通过自定义正则表达式匹配响应报文或请求报文,并对匹配成功的报文进行标记和提取。
-随着现代化Web应用采用前后端分离的开发模式,日常漏洞挖掘的过程中,捕获的HTTP请求流量也相应增加。若想全面评估一个Web应用,会花费大量时间在无用的报文上。**HaE的出现旨在解决这类情况**,借助HaE,您能够**有效减少**测试时间,将更多精力集中在**有价值且有意义**的报文上,从而**提高漏洞挖掘效率**。
+> 随着现代化Web应用采用前后端分离的开发模式,日常漏洞挖掘的过程中,捕获的HTTP请求流量也相应增加。若想全面评估一个Web应用,会花费大量时间在无用的报文上。**HaE的出现旨在解决这类情况**,借助HaE,您能够**有效减少**测试时间,将更多精力集中在**有价值且有意义**的报文上,从而**提高漏洞挖掘效率**。
-**注**: 要想灵活的使用`HaE`,你需要掌握正则表达式阅读、编写、修改能力;由于`Java`正则表达式的库并没有`Python`的优雅或方便,所以HaE要求使用者必须用`()`将所需提取的表达式内容包含;例如你要匹配一个**Shiro应用**的响应报文,正常匹配规则为`rememberMe=delete`,如果你要提取这段内容的话就需要变成`(rememberMe=delete)`。
+**注意事项**:
+
+1. 由于HaE 3.0版本开始采用`Montoya API`进行开发,因此使用新版HaE需要升级你的BurpSuite版本(>=2023.12.1)。
+2. 自定义HaE规则必须用左右括号`()`将所需提取的表达式内容包含,例如你要匹配一个**Shiro应用**的响应报文,正常匹配规则为`rememberMe=delete`,在HaE的规则中就需要变成`(rememberMe=delete)`。
## 使用方法
@@ -54,9 +57,10 @@ HaE目前的规则一共有8个字段,分别是规则名称、规则正则、
| 界面名称 | 界面展示 |
| ------------------------ | ---------------------------------------------------- |
-| Rules(规则信息管理) |
|
-| Config(配置信息管理) |
|
-| Databoard(数据集合面板) |
|
+| Rules(规则管理) |
|
+| Config(配置管理) |
|
+| Databoard(数据集合) |
|
+| MarkInfo(数据展示) |
|
## 文末随笔
diff --git a/build.gradle b/build.gradle
index 577c8cf..5b7df41 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,33 +1,37 @@
-plugins {
- id 'java'
-}
-
-repositories {
- mavenCentral()
-}
-
-compileJava {
- options.encoding = "UTF-8"
-}
-
-sourceSets {
- main {
- java {
- srcDir './src/main/java'
- }
- }
-}
-
-task fatJar(type: Jar) {
- baseName = project.name + '-all'
- from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
- with jar
-}
-
-dependencies {
- compile 'net.portswigger.burp.extender:burp-extender-api:1.7.13'
- compile 'org.jetbrains:annotations:16.0.2'
- 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'
-}
+plugins {
+ id 'java'
+}
+
+sourceCompatibility = 17
+targetCompatibility = 17
+
+repositories {
+ mavenCentral()
+}
+
+sourceSets {
+ main {
+ java {
+ srcDir './src/main/java'
+ }
+ }
+}
+
+dependencies {
+ implementation 'net.portswigger.burp.extensions:montoya-api:2023.12.1'
+ implementation 'org.yaml:snakeyaml:2.0'
+ implementation 'net.sourceforge.jregex:jregex:1.2_01'
+ implementation 'dk.brics.automaton:automaton:1.11-8'
+}
+
+test {
+ useJUnitPlatform()
+}
+
+jar {
+ duplicatesStrategy = DuplicatesStrategy.EXCLUDE
+
+ from {
+ configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
+ }
+}
\ No newline at end of file
diff --git a/images/config.png b/images/config.png
index 4d3f2a7..765060e 100644
Binary files a/images/config.png and b/images/config.png differ
diff --git a/images/databoard.png b/images/databoard.png
index 9edf373..316e466 100644
Binary files a/images/databoard.png and b/images/databoard.png differ
diff --git a/images/markinfo.png b/images/markinfo.png
new file mode 100644
index 0000000..da0302f
Binary files /dev/null and b/images/markinfo.png differ
diff --git a/images/rgperson.jpg b/images/rgperson.jpg
deleted file mode 100644
index bb4170d..0000000
Binary files a/images/rgperson.jpg and /dev/null differ
diff --git a/src/main/java/burp/BurpExtender.java b/src/main/java/burp/BurpExtender.java
deleted file mode 100644
index 5c0b4a2..0000000
--- a/src/main/java/burp/BurpExtender.java
+++ /dev/null
@@ -1,245 +0,0 @@
-package burp;
-
-import burp.config.ConfigLoader;
-import burp.core.processor.ColorProcessor;
-import burp.core.processor.MessageProcessor;
-import burp.core.utils.StringHelper;
-import burp.ui.MainUI;
-import burp.ui.board.DatatablePanel;
-import burp.ui.board.MessagePanel;
-import java.util.*;
-import javax.swing.*;
-import java.awt.*;
-import java.io.PrintWriter;
-import java.util.List;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-
-/**
- * @author EvilChen & 0chencc
- */
-
-public class BurpExtender implements IBurpExtender, IHttpListener, IMessageEditorTabFactory, ITab {
- private MainUI main;
- public static PrintWriter stdout;
- public static IBurpExtenderCallbacks callbacks;
- public static IExtensionHelpers helpers;
- ColorProcessor colorProcessor = new ColorProcessor();
- MessageProcessor messageProcessor = new MessageProcessor();
- private MessagePanel messagePanel;
-
- @Override
- public void registerExtenderCallbacks(final IBurpExtenderCallbacks callbacks)
- {
- BurpExtender.callbacks = callbacks;
- BurpExtender.helpers = callbacks.getHelpers();
-
- new ConfigLoader();
-
- String version = "2.6.1";
- callbacks.setExtensionName(String.format("HaE (%s) - Highlighter and Extractor", version));
-
- // 定义输出
- stdout = new PrintWriter(callbacks.getStdout(), true);
- stdout.println("[ HACK THE WORLD - TO DO IT ]");
- stdout.println("[#] Author: EvilChen & 0chencc");
- stdout.println("[#] Github: https://github.com/gh0stkey/HaE");
-
- // UI
- 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);
- }
-
- @Override
- public String getTabCaption() {
- return "HaE";
- }
-
- @Override
- public Component getUiComponent() {
- return main;
- }
-
- /**
- * 使用processHttpMessage用来做Highlighter
- */
- @Override
- public void processHttpMessage(int toolFlag, boolean messageIsRequest, IHttpRequestResponse messageInfo) {
- // 判断是否是响应,且该代码作用域为:REPEATER、INTRUDER、PROXY(分别对应toolFlag 64、32、4)
- if (toolFlag == 64 || toolFlag == 32 || toolFlag == 4) {
- if (!messageIsRequest) {
- IHttpService iHttpService = messageInfo.getHttpService();
- String host = iHttpService.getHost();
-
- List