Compare commits

..

6 Commits
4.2 ... 4.2.1

Author SHA1 Message Date
gh0stkey
d71965ce10 Version: 4.2.1 Update
Signed-off-by: gh0stkey <24655118+gh0stkey@users.noreply.github.com>
2025-05-08 11:29:09 +08:00
EvilChen
1ffe94e78d Update README_CN.md 2025-05-08 11:06:27 +08:00
EvilChen
3859f81b2a Update README.md 2025-05-08 11:06:05 +08:00
EvilChen
20ae5bc811 Update README.md 2025-05-08 10:45:58 +08:00
EvilChen
b7734ca710 Update README.md 2025-05-08 10:33:49 +08:00
gh0stkey
d75991043e Update
Signed-off-by: gh0stkey <24655118+gh0stkey@users.noreply.github.com>
2025-05-06 12:27:06 +08:00
4 changed files with 39 additions and 8 deletions

View File

@@ -1,7 +1,7 @@
<div align="center"> <div align="center">
<img src="images/logo.png" style="width: 20%" /> <img src="images/logo.png" style="width: 20%" />
<h4><a href="https://gh0st.cn/HaE/">Empower ethical hacker for efficient operations.</a></h4> <h4><a href="https://github.com/gh0stkey/HaE">Empower ethical hacker for efficient operations.</a></h4>
<h5>First Author: <a href="https://github.com/gh0stkey">EvilChen</a>Zhongfu Information Yuanheng Laboratory<br>Second Author <a href="https://github.com/0chencc">0chencc</a>Mystery Security Team<br>Third Author <a href="https://github.com/vaycore">vaycore</a>Independent Security Researcher</h5> <h5>First Author: <a href="https://github.com/gh0stkey">EvilChen</a>Zhongfu Information Yuanheng Laboratory<br>Second Author: <a href="https://github.com/0chencc">0chencc</a>Mystery Security Team<br>Third Author: <a href="https://github.com/vaycore">vaycore</a>Independent Security Researcher</h5>
</div> </div>
README Version: \[[English](README.md) | [简体中文](README_CN.md)\] README Version: \[[English](README.md) | [简体中文](README_CN.md)\]
@@ -28,6 +28,20 @@ GitCode project address: https://gitcode.com/gh0stkey/HaE
1. Starting with HaE version 3.0, development is done using the `Montoya API`. To use the new version of HaE, you need to upgrade your BurpSuite version (>=2023.12.1). 1. Starting with HaE version 3.0, development is done using the `Montoya API`. To use the new version of HaE, you need to upgrade your BurpSuite version (>=2023.12.1).
2. Custom HaE rules must enclose the expressions to be extracted within parentheses `()`. For example, if you want to match a response message from a **Shiro application**, the normal matching rule would be `rememberMe=delete`, but in HaE's rule format, it needs to be written as `(rememberMe=delete)`. 2. Custom HaE rules must enclose the expressions to be extracted within parentheses `()`. For example, if you want to match a response message from a **Shiro application**, the normal matching rule would be `rememberMe=delete`, but in HaE's rule format, it needs to be written as `(rememberMe=delete)`.
## Usage
**Plugin Installation**: `Extender - Extensions - Add - Select File - Next`
When you load `HaE` for the first time, it will load the offline rule database from the Jar package. If you need to update the rules, click `Reinit` to reinitialize. The address of the built-in rule database can be found on GitHub:
`https://github.com/gh0stkey/HaE/blob/master/src/main/resources/rules/Rules.yml`
The configuration file (`Config.yml`) and rule file (`Rules.yml`) are stored in a fixed directory:
1. For Linux/Mac users: `~/.config/HaE/`
2. For Windows users: `%USERPROFILE%/.config/HaE/`
Alternatively, you can also place the configuration files in the `/.config/HaE/` directory under the same folder as the `HaE Jar package`, **for easier offline portability**.
### Rule Definitions ### Rule Definitions
Currently, HaE rules consist of 8 fields, with detailed meanings as follows: Currently, HaE rules consist of 8 fields, with detailed meanings as follows:
@@ -86,6 +100,7 @@ We appreciate everyone's support for the project. The following list is sorted b
| 王傑 | 100.00 CNY | | 王傑 | 100.00 CNY |
| 联系不到我请拨打我手机号码 | 200.00 CNY | | 联系不到我请拨打我手机号码 | 200.00 CNY |
| Shu2e | 50.00 CNY | | Shu2e | 50.00 CNY |
| 亦 | 50.00 CNY |
## Support the Project ## Support the Project

View File

@@ -1,6 +1,6 @@
<div align="center"> <div align="center">
<img src="images/logo.png" style="width: 20%" /> <img src="images/logo.png" style="width: 20%" />
<h4><a href="https://gh0st.cn/HaE/">赋能白帽,高效作战!</a></h4> <h4><a href="https://github.com/gh0stkey/HaE">赋能白帽,高效作战!</a></h4>
<h5>第一作者: <a href="https://github.com/gh0stkey">EvilChen</a>(中孚信息元亨实验室)<br>第二作者: <a href="https://github.com/0chencc">0chencc</a>(米斯特安全团队)<br>第三作者: <a href="https://github.com/vaycore">vaycore</a>(独立安全研究员)</h5> <h5>第一作者: <a href="https://github.com/gh0stkey">EvilChen</a>(中孚信息元亨实验室)<br>第二作者: <a href="https://github.com/0chencc">0chencc</a>(米斯特安全团队)<br>第三作者: <a href="https://github.com/vaycore">vaycore</a>(独立安全研究员)</h5>
</div> </div>
@@ -99,6 +99,7 @@ HaE目前的规则一共有8个字段详细的含义如下所示
| 王傑 | 100.00元 | | 王傑 | 100.00元 |
| 联系不到我请拨打我手机号码 | 200.00元 | | 联系不到我请拨打我手机号码 | 200.00元 |
| Shu2e | 50.00元 | | Shu2e | 50.00元 |
| 亦 | 50.00元 |
## 支持项目 ## 支持项目

View File

@@ -19,7 +19,7 @@ public class HaE implements BurpExtension {
public void initialize(MontoyaApi api) { public void initialize(MontoyaApi api) {
// 设置扩展名称 // 设置扩展名称
api.extension().setName("HaE - Highlighter and Extractor"); api.extension().setName("HaE - Highlighter and Extractor");
String version = "4.2"; String version = "4.2.1";
// 加载扩展后输出的项目信息 // 加载扩展后输出的项目信息
Logging logging = api.logging(); Logging logging = api.logging();

View File

@@ -32,6 +32,8 @@ public class Config extends JPanel {
private Registration activeHandler; private Registration activeHandler;
private Registration passiveHandler; private Registration passiveHandler;
private boolean isLoadingData = false;
public Config(MontoyaApi api, ConfigLoader configLoader, MessageTableModel messageTableModel, Rules rules) { public Config(MontoyaApi api, ConfigLoader configLoader, MessageTableModel messageTableModel, Rules rules) {
this.api = api; this.api = api;
this.configLoader = configLoader; this.configLoader = configLoader;
@@ -174,29 +176,35 @@ public class Config extends JPanel {
private TableModelListener craeteSettingTableModelListener(JComboBox<String> setTypeComboBox, DefaultTableModel model) { private TableModelListener craeteSettingTableModelListener(JComboBox<String> setTypeComboBox, DefaultTableModel model) {
return e -> { return e -> {
// 如果是程序正在加载数据,不处理事件
if (isLoadingData) {
return;
}
String selected = (String) setTypeComboBox.getSelectedItem(); String selected = (String) setTypeComboBox.getSelectedItem();
String values = getFirstColumnDataAsString(model); String values = getFirstColumnDataAsString(model);
if (selected != null) { if (selected != null) {
if (selected.equals("Exclude suffix")) { if (selected.equals("Exclude suffix")) {
if (!values.equals(configLoader.getExcludeSuffix()) && !values.isEmpty()) { if (!values.equals(configLoader.getExcludeSuffix())) {
configLoader.setExcludeSuffix(values); configLoader.setExcludeSuffix(values);
} }
} }
if (selected.equals("Block host")) { if (selected.equals("Block host")) {
if (!values.equals(configLoader.getBlockHost()) && !values.isEmpty()) { if (!values.equals(configLoader.getBlockHost())) {
configLoader.setBlockHost(values); configLoader.setBlockHost(values);
} }
} }
if (selected.equals("Exclude status")) { if (selected.equals("Exclude status")) {
if (!values.equals(configLoader.getExcludeStatus()) && !values.isEmpty()) { if (!values.equals(configLoader.getExcludeStatus())) {
configLoader.setExcludeStatus(values); configLoader.setExcludeStatus(values);
} }
} }
if (selected.equals("Dynamic Header")) { if (selected.equals("Dynamic Header")) {
if (!values.equals(configLoader.getExcludeStatus()) && !values.isEmpty()) { if (!values.equals(configLoader.getExcludeStatus())) {
configLoader.setDynamicHeader(values); configLoader.setDynamicHeader(values);
} }
} }
@@ -207,7 +215,11 @@ public class Config extends JPanel {
private ActionListener createSettingActionListener(JComboBox<String> setTypeComboBox, DefaultTableModel model) { private ActionListener createSettingActionListener(JComboBox<String> setTypeComboBox, DefaultTableModel model) {
return e -> { return e -> {
String selected = (String) setTypeComboBox.getSelectedItem(); String selected = (String) setTypeComboBox.getSelectedItem();
// 设置标志,表示正在加载数据
isLoadingData = true;
model.setRowCount(0); model.setRowCount(0);
if (selected != null) { if (selected != null) {
if (selected.equals("Exclude suffix")) { if (selected.equals("Exclude suffix")) {
addDataToTable(configLoader.getExcludeSuffix().replaceAll("\\|", "\r\n"), model); addDataToTable(configLoader.getExcludeSuffix().replaceAll("\\|", "\r\n"), model);
@@ -225,6 +237,9 @@ public class Config extends JPanel {
addDataToTable(configLoader.getDynamicHeader().replaceAll("\\|", "\r\n"), model); addDataToTable(configLoader.getDynamicHeader().replaceAll("\\|", "\r\n"), model);
} }
} }
// 重置标志
isLoadingData = false;
}; };
} }