Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
a137639
Updated TagAutomator rules to allow multiple tools per rule
hackvertor Nov 24, 2025
82a9bf5
Added multi encoder window
hackvertor Nov 24, 2025
02ed32f
Added websockets setting and websocket handler
hackvertor Nov 25, 2025
d42d544
Added copy to clipboard button, clear button and select all checkbox …
hackvertor Nov 25, 2025
047842b
Fixed send to intruder
hackvertor Nov 25, 2025
bbe570b
Added layers to MultiEncoderWindow
hackvertor Nov 25, 2025
cf78864
Added MultiEncoderWindow to the HackvertorExtension panel and added s…
hackvertor Nov 25, 2025
b975061
Fixed the layers to work correctly. The layers now apply the nesting
hackvertor Nov 25, 2025
f5bd46c
Added limits to MultiEncoderWindow
hackvertor Nov 25, 2025
d64ae05
Updated changelog
hackvertor Nov 25, 2025
baeff83
Fixed deflate, fixed auto decoding of deflate and base32. Added conve…
hackvertor Nov 26, 2025
6307b38
Updated README.md
hackvertor Nov 26, 2025
e167e60
Fixed dialog problems.
hackvertor Nov 26, 2025
f7799af
Added more test coverage and a small refactor
hackvertor Nov 26, 2025
9dd69ef
Improved AutoDecoder, fixed tests, added more realistic AutoDecodeNes…
hackvertor Nov 26, 2025
905bf90
Prevented dangerous categories from being shown in the MultiEncoderWi…
hackvertor Nov 26, 2025
c35cab7
Add zipfile tag to tag store
floyd-fuh Nov 27, 2025
af946ca
Renamed to zipfile.py and introduced a cursed hack for it to work
floyd-fuh Nov 27, 2025
cd2dcb5
Merge pull request #152 from floyd-fuh/master
hackvertor Nov 27, 2025
7facb22
Added the first layer tag as the name of the Repeater tab
hackvertor Nov 27, 2025
70a6c31
Added filter to output preview
hackvertor Nov 27, 2025
0701270
Fixed flakey tests and persistence problems when Montoya isn't availa…
hackvertor Nov 27, 2025
2246622
Made the filter using the tag name. Changed dimensions.
hackvertor Nov 27, 2025
e3499b4
Added category checkboxes and a message when all variants are copied,
hackvertor Nov 27, 2025
87a9914
Updated README.md
hackvertor Nov 27, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,36 @@ Tags also support arguments. The find tag allows you to find a string by regex a

# Changelog

## Version v2.2.33 (2025-11-27)

- Added category checkboxes and a message when all variants are copied,
- Made the filter using the tag name. Changed dimensions.
- Added filter to output preview
- Added the first layer tag as the name of the Repeater tab
- Prevented dangerous categories from being shown in the MultiEncoderWindow. Added checkboxes to enable them. Made the window persist state in the project file when closed.

## Version v2.2.26 (2025-11-26)

- Fixed dialog problems
- Added limits for multiencoder

## Version v2.2.24 (2025-11-26)

- Fixed deflate, base32 detection
- Improved auto decoder (smart decoding)

## Version v2.2.24 (2025-11-25)

- Updated TagAutomator rules to allow multiple tools per rule
- Added multi encoder window
- Added websockets setting and websocket handler
- Added copy to clipboard button, clear button and select all checkbox to the MultiEncoderWindow.
- Fixed send to intruder
- Added layers to MultiEncoderWindow
- Added MultiEncoderWindow to the HackvertorExtension panel and added sendToHackvertor button
- Fixed the layers to work correctly. The layers now apply the nesting
- Added limits to MultiEncoderWindow

## Version v2.2.16 (2025-11-20)

- Changed HTTP handler to allow interception when there are Tag Automation rules
Expand Down
387 changes: 252 additions & 135 deletions src/main/java/burp/hv/Convertors.java

Large diffs are not rendered by default.

7 changes: 3 additions & 4 deletions src/main/java/burp/hv/Hackvertor.java
Original file line number Diff line number Diff line change
Expand Up @@ -351,11 +351,10 @@ private void initCompressionTags() {
addTag(Tag.Category.Compression, "bzip2_compress", true, "bzip2_compress(String str)");
addTag(Tag.Category.Compression, "bzip2_decompress", true, "bzip2_decompress(String str)");
addTag(Tag.Category.Compression, "deflate_compress", true,
"deflate_compress(String str, Boolean includeHeader)",
"boolean", "true");
"deflate_compress(String str, String compressionType)//fixed, store, dynamic",
"string", "fixed");
addTag(Tag.Category.Compression, "deflate_decompress", true,
"deflate_decompress(String str, Boolean includeHeader)",
"boolean", "true");
"deflate_decompress(String str)");
}

private void initDateTags() {
Expand Down
37 changes: 34 additions & 3 deletions src/main/java/burp/hv/HackvertorExtension.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
import burp.api.montoya.ui.hotkey.HotKey;
import burp.api.montoya.ui.hotkey.HotKeyContext;
import burp.api.montoya.ui.hotkey.HotKeyHandler;
import burp.api.montoya.utilities.CompressionType;
import burp.hv.settings.Settings;
import burp.hv.tags.CustomTags;
import burp.hv.tags.Tag;
Expand All @@ -36,7 +35,7 @@
public class HackvertorExtension implements BurpExtension, IBurpExtender, ITab, IExtensionStateListener, IMessageEditorTabFactory {
//TODO Unset on unload
public static String extensionName = "Hackvertor";
public static String version = "v2.2.16";
public static String version = "v2.2.33";
public static JFrame HackvertorFrame = null;
public static IBurpExtenderCallbacks callbacks;
public static IExtensionHelpers helpers;
Expand Down Expand Up @@ -186,6 +185,7 @@ public void initialize(MontoyaApi montoyaApi) {
montoyaApi.userInterface().menuBar().registerMenu(Utils.generateHackvertorMenuBar());
Burp burp = new Burp(montoyaApi.burpSuite().version());
montoyaApi.http().registerHttpHandler(new HackvertorHttpHandler());
montoyaApi.websockets().registerWebSocketCreatedHandler(new HackvertorWebSocketHandler());
montoyaApi.userInterface().registerContextMenuItemsProvider(new HackvertorContextMenu());

if(burp.hasCapability(Burp.Capability.REGISTER_HOTKEY)) {
Expand Down Expand Up @@ -228,7 +228,8 @@ private void registerAllHotkeys(MontoyaApi montoyaApi, Burp burp) {
new HotkeyDefinition("Tag Automator", "Ctrl+Alt+A", event -> TagAutomator.showRulesDialog()),
new HotkeyDefinition("Settings", "Ctrl+Alt+S", event -> Settings.showSettingsWindow()),
new HotkeyDefinition("Smart decode", "Ctrl+Alt+D", createAutoDecodeHandler()),
new HotkeyDefinition("Show tag store", "Ctrl+Alt+T", event -> TagStore.showTagStore())
new HotkeyDefinition("Show tag store", "Ctrl+Alt+T", event -> TagStore.showTagStore()),
new HotkeyDefinition("Multi Encoder", "Ctrl+Alt+M", createMultiEncoderHandler(montoyaApi))
);

for (HotkeyDefinition hotkey : hotkeys) {
Expand Down Expand Up @@ -291,4 +292,34 @@ private HotKeyHandler createAutoDecodeHandler() {
}
};
}

private HotKeyHandler createMultiEncoderHandler(MontoyaApi montoyaApi) {
return event -> {
if (event.messageEditorRequestResponse().isEmpty()) {
return;
}
MessageEditorHttpRequestResponse requestResponse = event.messageEditorRequestResponse().get();
if(requestResponse.selectionOffsets().isPresent() &&
requestResponse.selectionContext().toString().equalsIgnoreCase("request")) {
String request = requestResponse.requestResponse().request().toString();
int start = requestResponse.selectionOffsets().get().startIndexInclusive();
int end = requestResponse.selectionOffsets().get().endIndexExclusive();

if (start != end) {
String selectedText = request.substring(start, end);
ArrayList<Tag> tags = HackvertorExtension.hackvertor.getTags();

// Show the Multi Encoder window
MultiEncoderWindow multiEncoderWindow = new MultiEncoderWindow(
montoyaApi,
selectedText,
tags,
requestResponse,
requestResponse.requestResponse()
);
multiEncoderWindow.show();
}
}
};
}
}
31 changes: 31 additions & 0 deletions src/main/java/burp/hv/HackvertorMessageHandler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package burp.hv;

import burp.api.montoya.websocket.*;
import burp.hv.settings.InvalidTypeSettingException;
import burp.hv.settings.UnregisteredSettingException;

public class HackvertorMessageHandler implements MessageHandler {

@Override
public TextMessageAction handleTextMessage(TextMessage textMessage) {
boolean tagsInWebSockets;
try {
tagsInWebSockets = HackvertorExtension.generalSettings.getBoolean("tagsInWebSockets");
} catch (UnregisteredSettingException | InvalidTypeSettingException e) {
HackvertorExtension.callbacks.printError("Error loading settings:" + e);
throw new RuntimeException(e);
}
if(tagsInWebSockets) {
if (textMessage.payload().contains("<@")) {
String converted = HackvertorExtension.hackvertor.convert(textMessage.payload(), HackvertorExtension.hackvertor);
return TextMessageAction.continueWith(converted);
}
}
return TextMessageAction.continueWith(textMessage);
}

@Override
public BinaryMessageAction handleBinaryMessage(BinaryMessage binaryMessage) {
return BinaryMessageAction.continueWith(binaryMessage);
}
}
12 changes: 12 additions & 0 deletions src/main/java/burp/hv/HackvertorWebSocketHandler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package burp.hv;

import burp.api.montoya.websocket.WebSocketCreated;
import burp.api.montoya.websocket.WebSocketCreatedHandler;

public class HackvertorWebSocketHandler implements WebSocketCreatedHandler {

@Override
public void handleWebSocketCreated(WebSocketCreated webSocketCreated) {
webSocketCreated.webSocket().registerMessageHandler(new HackvertorMessageHandler());
}
}
Loading