From c20791b5a8c280f7900e4f1c96f0dc692f216673 Mon Sep 17 00:00:00 2001 From: Soroush Dalili <1798313+irsdl@users.noreply.github.com> Date: Mon, 18 Sep 2023 23:17:46 +0100 Subject: [PATCH 1/4] version bump --- build.gradle | 6 +++--- src/main/resources/extension.properties | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index d556851..78f05f3 100644 --- a/build.gradle +++ b/build.gradle @@ -13,13 +13,13 @@ repositories { } dependencies { - compileOnly "net.portswigger.burp.extensions:montoya-api:2023.10" //https://central.sonatype.com/artifact/net.portswigger.burp.extensions/montoya-api/ + compileOnly "net.portswigger.burp.extensions:montoya-api:2023.10.3" //https://central.sonatype.com/artifact/net.portswigger.burp.extensions/montoya-api/ implementation "com.github.CoreyD97:Burp-Montoya-Utilities:54678c64" //https://jitpack.io/com/github/CoreyD97/Burp-Montoya-Utilities/ //implementation "com.google.code.gson:gson:2.10.1" //https://mvnrepository.com/artifact/com.google.code.gson/gson implementation "com.google.guava:guava:32.1.2-jre" //https://mvnrepository.com/artifact/com.google.guava/guava implementation "org.apache.commons:commons-lang3:3.13.0" //https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 - implementation "com.formdev:flatlaf:3.2" //https://mvnrepository.com/artifact/com.formdev/flatlaf - implementation "org.springframework:spring-core:6.0.11" //https://mvnrepository.com/artifact/org.springframework/spring-core + implementation "com.formdev:flatlaf:3.2.1" //https://mvnrepository.com/artifact/com.formdev/flatlaf + implementation "org.springframework:spring-core:6.0.12" //https://mvnrepository.com/artifact/org.springframework/spring-core implementation "com.fifesoft:rsyntaxtextarea:3.3.4" //https://mvnrepository.com/artifact/com.fifesoft/rsyntaxtextarea/ implementation "com.fifesoft:autocomplete:3.3.1" //https://mvnrepository.com/artifact/com.fifesoft/autocomplete implementation "org.reflections:reflections:0.10.2" // https://mvnrepository.com/artifact/org.reflections/reflections/0.10.2 diff --git a/src/main/resources/extension.properties b/src/main/resources/extension.properties index 10e1bf3..ced0b52 100644 --- a/src/main/resources/extension.properties +++ b/src/main/resources/extension.properties @@ -1,5 +1,5 @@ name=Sharpener -version=4.2 +version=4.3 url=https://github.com/irsdl/BurpSuiteSharpenerEx issueTracker=https://github.com/irsdl/BurpSuiteSharpenerEx/issues copyright=Released as open source under AGPL license\nOriginally released by MDSec - https://www.mdsec.co.uk/\nDeveloped by Soroush Dalili (@irsdl): https://burpsuite.ninja/ From bd16cf8ec14c4f94f62766dcf2f869438a0f6e71 Mon Sep 17 00:00:00 2001 From: Soroush Dalili <1798313+irsdl@users.noreply.github.com> Date: Tue, 28 Nov 2023 16:44:59 +0000 Subject: [PATCH 2/4] Bug fixing, lib update This addresses an issue in detecting the tempcolor #18 Libraries have been updated Capabilities are enabled by default --- build.gradle | 12 ++++++------ .../sharpener/ExtensionSharedParameters.java | 1 + .../ManualHighlighterRequestResponseHandler.java | 13 +++++++++---- .../implementations/ManualHighlighterSettings.java | 2 +- .../implementations/PwnFoxSettings.java | 2 +- .../sharpener/capabilities/objects/Capability.java | 7 ++++--- .../capabilities/objects/CapabilitySettings.java | 5 ++--- .../burp/generic/BurpExtensionSharedParameters.java | 1 + 8 files changed, 25 insertions(+), 18 deletions(-) diff --git a/build.gradle b/build.gradle index 78f05f3..bcab387 100644 --- a/build.gradle +++ b/build.gradle @@ -13,16 +13,16 @@ repositories { } dependencies { - compileOnly "net.portswigger.burp.extensions:montoya-api:2023.10.3" //https://central.sonatype.com/artifact/net.portswigger.burp.extensions/montoya-api/ + compileOnly "net.portswigger.burp.extensions:montoya-api:2023.10.4" //https://central.sonatype.com/artifact/net.portswigger.burp.extensions/montoya-api/ implementation "com.github.CoreyD97:Burp-Montoya-Utilities:54678c64" //https://jitpack.io/com/github/CoreyD97/Burp-Montoya-Utilities/ //implementation "com.google.code.gson:gson:2.10.1" //https://mvnrepository.com/artifact/com.google.code.gson/gson - implementation "com.google.guava:guava:32.1.2-jre" //https://mvnrepository.com/artifact/com.google.guava/guava - implementation "org.apache.commons:commons-lang3:3.13.0" //https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 - implementation "com.formdev:flatlaf:3.2.1" //https://mvnrepository.com/artifact/com.formdev/flatlaf - implementation "org.springframework:spring-core:6.0.12" //https://mvnrepository.com/artifact/org.springframework/spring-core + implementation "com.google.guava:guava:32.1.3-jre" //https://mvnrepository.com/artifact/com.google.guava/guava + implementation "org.apache.commons:commons-lang3:3.14.0" //https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 + implementation "com.formdev:flatlaf:3.2.5" //https://mvnrepository.com/artifact/com.formdev/flatlaf + implementation "org.springframework:spring-core:6.0.14" //https://mvnrepository.com/artifact/org.springframework/spring-core implementation "com.fifesoft:rsyntaxtextarea:3.3.4" //https://mvnrepository.com/artifact/com.fifesoft/rsyntaxtextarea/ implementation "com.fifesoft:autocomplete:3.3.1" //https://mvnrepository.com/artifact/com.fifesoft/autocomplete - implementation "org.reflections:reflections:0.10.2" // https://mvnrepository.com/artifact/org.reflections/reflections/0.10.2 + implementation "org.reflections:reflections:0.10.2" // https://mvnrepository.com/artifact/org.reflections/reflections/ } diff --git a/src/main/java/ninja/burpsuite/extension/sharpener/ExtensionSharedParameters.java b/src/main/java/ninja/burpsuite/extension/sharpener/ExtensionSharedParameters.java index b89dc5c..1d9c925 100644 --- a/src/main/java/ninja/burpsuite/extension/sharpener/ExtensionSharedParameters.java +++ b/src/main/java/ninja/burpsuite/extension/sharpener/ExtensionSharedParameters.java @@ -38,6 +38,7 @@ public class ExtensionSharedParameters extends BurpExtensionSharedParameters { public boolean isTitleFilterNegative = false; public boolean isTabGroupSupportedByDefault = false; public boolean isSubTabScrollSupportedByDefault = false; + public String burpSupportedColorNames = "Red|Orange|Yellow|Green|Cyan|Blue|Pink|Magenta|Gray"; // from burp.api.montoya.core.HighlightColor public HashMap filterOperationMode = new HashMap<>(); public HashMap> subTabPreviouslySelectedIndexHistory = new HashMap<>(); public HashMap> subTabNextlySelectedIndexHistory = new HashMap<>(); diff --git a/src/main/java/ninja/burpsuite/extension/sharpener/capabilities/implementations/ManualHighlighterRequestResponseHandler.java b/src/main/java/ninja/burpsuite/extension/sharpener/capabilities/implementations/ManualHighlighterRequestResponseHandler.java index 826ac26..6e358d0 100644 --- a/src/main/java/ninja/burpsuite/extension/sharpener/capabilities/implementations/ManualHighlighterRequestResponseHandler.java +++ b/src/main/java/ninja/burpsuite/extension/sharpener/capabilities/implementations/ManualHighlighterRequestResponseHandler.java @@ -24,14 +24,19 @@ public class ManualHighlighterRequestResponseHandler implements ProxyRequestHand CapabilitySettings capabilitySettings; // the shortest color is red and the longest is magenta in Burp Suite HighlightColor - String highlightPatternToBeRemovedStr = "tempcolor([a-z]{3,7}+)"; - String highlightPatternStayStr = "permcolor([a-z]{3,7}+)"; - Pattern highlightPatternToBeRemoved = Pattern.compile(highlightPatternToBeRemovedStr, Pattern.CASE_INSENSITIVE); - Pattern highlightPatternStayPattern = Pattern.compile(highlightPatternStayStr, Pattern.CASE_INSENSITIVE); + String highlightPatternToBeRemovedStr = ""; + String highlightPatternStayStr = ""; + Pattern highlightPatternToBeRemoved; + Pattern highlightPatternStayPattern; public ManualHighlighterRequestResponseHandler(ExtensionSharedParameters sharedParameters, CapabilitySettings capabilitySettings) { this.sharedParameters = sharedParameters; this.capabilitySettings = capabilitySettings; + + highlightPatternToBeRemovedStr = "tempcolor("+sharedParameters.burpSupportedColorNames+")"; + highlightPatternStayStr = "permcolor("+sharedParameters.burpSupportedColorNames+")"; + highlightPatternToBeRemoved = Pattern.compile(highlightPatternToBeRemovedStr, Pattern.CASE_INSENSITIVE); + highlightPatternStayPattern = Pattern.compile(highlightPatternStayStr, Pattern.CASE_INSENSITIVE); } // REQUEST diff --git a/src/main/java/ninja/burpsuite/extension/sharpener/capabilities/implementations/ManualHighlighterSettings.java b/src/main/java/ninja/burpsuite/extension/sharpener/capabilities/implementations/ManualHighlighterSettings.java index b715217..02415ca 100644 --- a/src/main/java/ninja/burpsuite/extension/sharpener/capabilities/implementations/ManualHighlighterSettings.java +++ b/src/main/java/ninja/burpsuite/extension/sharpener/capabilities/implementations/ManualHighlighterSettings.java @@ -23,7 +23,7 @@ public ManualHighlighterSettings(ExtensionSharedParameters sharedParameters) { "manualHighlightCapability", Arrays.asList(CapabilityGroup.PROXY_REQUEST_HANDLER, CapabilityGroup.PROXY_RESPONSE_HANDLER, CapabilityGroup.WEBSOCKET_CREATION_HANDLER), "ninja.burpsuite.extension.sharpener.capabilities.implementations.ManualHighlighterRequestResponseHandler", - 10000)); + 10000, true)); } @Override diff --git a/src/main/java/ninja/burpsuite/extension/sharpener/capabilities/implementations/PwnFoxSettings.java b/src/main/java/ninja/burpsuite/extension/sharpener/capabilities/implementations/PwnFoxSettings.java index 24772b0..78ec804 100644 --- a/src/main/java/ninja/burpsuite/extension/sharpener/capabilities/implementations/PwnFoxSettings.java +++ b/src/main/java/ninja/burpsuite/extension/sharpener/capabilities/implementations/PwnFoxSettings.java @@ -23,7 +23,7 @@ public PwnFoxSettings(ExtensionSharedParameters sharedParameters) { "pwnFoxSupportCapability", Arrays.asList(CapabilityGroup.PROXY_REQUEST_HANDLER), "ninja.burpsuite.extension.sharpener.capabilities.implementations.PwnFoxProxyRequestHandler", - 50000)); + 50000, true)); } @Override diff --git a/src/main/java/ninja/burpsuite/extension/sharpener/capabilities/objects/Capability.java b/src/main/java/ninja/burpsuite/extension/sharpener/capabilities/objects/Capability.java index 738507d..ea330c5 100644 --- a/src/main/java/ninja/burpsuite/extension/sharpener/capabilities/objects/Capability.java +++ b/src/main/java/ninja/burpsuite/extension/sharpener/capabilities/objects/Capability.java @@ -13,19 +13,20 @@ public class Capability implements Serializable { public List capabilityGroupList = new ArrayList<>(); public String implementationClassName = ""; // this is used when loading the capability public int order = 100000; // this is used when sorting the capabilities - + public boolean enabledByDefault = false; // this is used when sorting the capabilities // constructor for the capability public Capability(String name, String description, String settingName, List capabilityGroupList, String implementationClassName) { - this(name, description, settingName, capabilityGroupList, implementationClassName, 100000); + this(name, description, settingName, capabilityGroupList, implementationClassName, 100000, false); } - public Capability(String name, String description, String settingName, List capabilityGroupList, String implementationClassName, int order) { + public Capability(String name, String description, String settingName, List capabilityGroupList, String implementationClassName, int order, boolean enabledByDefault) { this.name = name; this.description = description; this.settingName = settingName; this.capabilityGroupList = capabilityGroupList; this.implementationClassName = implementationClassName; this.order = order; + this.enabledByDefault = enabledByDefault; } // create the class object for the implemented capability using implementationClassName and reflection diff --git a/src/main/java/ninja/burpsuite/extension/sharpener/capabilities/objects/CapabilitySettings.java b/src/main/java/ninja/burpsuite/extension/sharpener/capabilities/objects/CapabilitySettings.java index c410658..d5553fe 100644 --- a/src/main/java/ninja/burpsuite/extension/sharpener/capabilities/objects/CapabilitySettings.java +++ b/src/main/java/ninja/burpsuite/extension/sharpener/capabilities/objects/CapabilitySettings.java @@ -16,7 +16,7 @@ public CapabilitySettings(ExtensionSharedParameters sharedParameters, Capability private void registerStateSetting() { try { - sharedParameters.preferences.registerSetting(capability.settingName, boolean.class, false, Preferences.Visibility.GLOBAL); + sharedParameters.preferences.registerSetting(capability.settingName, boolean.class, capability.enabledByDefault, Preferences.Visibility.GLOBAL); } catch (Exception e) { //already registered setting sharedParameters.printDebugMessage(e.getMessage()); @@ -25,8 +25,7 @@ private void registerStateSetting() { } } - public boolean isEnabled() { - return sharedParameters.preferences.safeGetSetting(capability.settingName, false); + public boolean isEnabled() {return sharedParameters.preferences.safeGetSetting(capability.settingName, capability.enabledByDefault); } public void setEnabled(boolean enabled) { diff --git a/src/main/java/ninja/burpsuite/libs/burp/generic/BurpExtensionSharedParameters.java b/src/main/java/ninja/burpsuite/libs/burp/generic/BurpExtensionSharedParameters.java index 0e4d6d5..d049757 100644 --- a/src/main/java/ninja/burpsuite/libs/burp/generic/BurpExtensionSharedParameters.java +++ b/src/main/java/ninja/burpsuite/libs/burp/generic/BurpExtensionSharedParameters.java @@ -172,6 +172,7 @@ private void initParameters(String extensionName, String version, String extensi this.isBurpPro = true; try{ + //TODO: replace this and minor version with the new method in MontoyaApi (buildNumber() --> its format is like YYYY_MM_RR_PPP_BBBBBB (Year, month, release, patch, build number) this.burpMajorVersion = Double.parseDouble(montoyaApi.burpSuite().version().major()); }catch(Exception e){ // this means the major version now cannot be converted to numbers! From a99e3c846b890cd511f918b997461bc591665b20 Mon Sep 17 00:00:00 2001 From: Soroush Dalili <1798313+irsdl@users.noreply.github.com> Date: Tue, 28 Nov 2023 20:12:04 +0000 Subject: [PATCH 3/4] Update extension.properties --- src/main/resources/extension.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/extension.properties b/src/main/resources/extension.properties index ced0b52..4cf0db0 100644 --- a/src/main/resources/extension.properties +++ b/src/main/resources/extension.properties @@ -1,5 +1,5 @@ name=Sharpener -version=4.3 +version=4.4 url=https://github.com/irsdl/BurpSuiteSharpenerEx issueTracker=https://github.com/irsdl/BurpSuiteSharpenerEx/issues copyright=Released as open source under AGPL license\nOriginally released by MDSec - https://www.mdsec.co.uk/\nDeveloped by Soroush Dalili (@irsdl): https://burpsuite.ninja/ From 07b03598ad8b57a1510a546a4360f3853b933d35 Mon Sep 17 00:00:00 2001 From: Soroush Dalili <1798313+irsdl@users.noreply.github.com> Date: Wed, 20 Dec 2023 15:35:02 +0000 Subject: [PATCH 4/4] Important bug fix To address #19 --- build.gradle | 4 +-- .../BurpExtensionSharedParameters.java | 28 +++++++++++++++---- src/main/resources/extension.properties | 2 +- 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/build.gradle b/build.gradle index bcab387..0556d8b 100644 --- a/build.gradle +++ b/build.gradle @@ -13,13 +13,13 @@ repositories { } dependencies { - compileOnly "net.portswigger.burp.extensions:montoya-api:2023.10.4" //https://central.sonatype.com/artifact/net.portswigger.burp.extensions/montoya-api/ + compileOnly "net.portswigger.burp.extensions:montoya-api:2023.12.1" //https://central.sonatype.com/artifact/net.portswigger.burp.extensions/montoya-api/ implementation "com.github.CoreyD97:Burp-Montoya-Utilities:54678c64" //https://jitpack.io/com/github/CoreyD97/Burp-Montoya-Utilities/ //implementation "com.google.code.gson:gson:2.10.1" //https://mvnrepository.com/artifact/com.google.code.gson/gson implementation "com.google.guava:guava:32.1.3-jre" //https://mvnrepository.com/artifact/com.google.guava/guava implementation "org.apache.commons:commons-lang3:3.14.0" //https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 implementation "com.formdev:flatlaf:3.2.5" //https://mvnrepository.com/artifact/com.formdev/flatlaf - implementation "org.springframework:spring-core:6.0.14" //https://mvnrepository.com/artifact/org.springframework/spring-core + implementation "org.springframework:spring-core:6.0.15" //https://mvnrepository.com/artifact/org.springframework/spring-core implementation "com.fifesoft:rsyntaxtextarea:3.3.4" //https://mvnrepository.com/artifact/com.fifesoft/rsyntaxtextarea/ implementation "com.fifesoft:autocomplete:3.3.1" //https://mvnrepository.com/artifact/com.fifesoft/autocomplete implementation "org.reflections:reflections:0.10.2" // https://mvnrepository.com/artifact/org.reflections/reflections/ diff --git a/src/main/java/ninja/burpsuite/libs/burp/generic/BurpExtensionSharedParameters.java b/src/main/java/ninja/burpsuite/libs/burp/generic/BurpExtensionSharedParameters.java index d049757..f9cc36c 100644 --- a/src/main/java/ninja/burpsuite/libs/burp/generic/BurpExtensionSharedParameters.java +++ b/src/main/java/ninja/burpsuite/libs/burp/generic/BurpExtensionSharedParameters.java @@ -428,18 +428,34 @@ public JTabbedPane get_rootTabbedPaneUsingMontoya() { if (this._rootTabbedPane == null) { try { JRootPane rootPane = ((JFrame) montoyaApi.userInterface().swingUtils().suiteFrame()).getRootPane(); - set_rootTabbedPane((JTabbedPane) rootPane.getContentPane().getComponent(0)); + Component firstComponent = rootPane.getContentPane().getComponent(0); + + if (firstComponent instanceof JTabbedPane) { + set_rootTabbedPane((JTabbedPane) firstComponent); + } else { + // fix for version 2023.12.1-25776 + set_rootTabbedPane((JTabbedPane) ((JLayeredPane) firstComponent).getComponent(1)); + } } catch (Exception e) { // This is to find the root of the Burp Suite frame when the above fails // We should not really be here printlnError("A failure in get_rootTabbedPaneUsingMontoya() has occurred. Hopefully this will be recovered now."); // Defining how our Burp Suite frame is - UiSpecObject uiSpecObject = new UiSpecObject(); - uiSpecObject.set_objectType(JFrame.class); - uiSpecObject.set_isShowing(true); + UiSpecObject uiSpecObject_for_rootPane = new UiSpecObject(); + uiSpecObject_for_rootPane.set_objectType(JFrame.class); + uiSpecObject_for_rootPane.set_isShowing(true); + + JRootPane rootPane = ((JFrame) UIWalker.findUIObjectInComponents(JFrame.getWindows(), uiSpecObject_for_rootPane)).getRootPane(); + + UiSpecObject uiSpecObject_for_JTabbedPane = new UiSpecObject(); + uiSpecObject_for_JTabbedPane.set_objectType(JTabbedPane.class); + uiSpecObject_for_JTabbedPane.set_isShowing(true); + uiSpecObject_for_JTabbedPane.set_isJComponent(true); + uiSpecObject_for_JTabbedPane.set_minJComponentCount(2); + + JTabbedPane jTabbedPane = ((JTabbedPane) UIWalker.findUIObjectInSubComponents(rootPane, 4, uiSpecObject_for_JTabbedPane)); - JRootPane rootPane = ((JFrame) UIWalker.findUIObjectInComponents(JFrame.getWindows(), uiSpecObject)).getRootPane(); - set_rootTabbedPane((JTabbedPane) rootPane.getContentPane().getComponent(0)); + set_rootTabbedPane(jTabbedPane); } } return this._rootTabbedPane; diff --git a/src/main/resources/extension.properties b/src/main/resources/extension.properties index 4cf0db0..732dca3 100644 --- a/src/main/resources/extension.properties +++ b/src/main/resources/extension.properties @@ -1,5 +1,5 @@ name=Sharpener -version=4.4 +version=4.5 url=https://github.com/irsdl/BurpSuiteSharpenerEx issueTracker=https://github.com/irsdl/BurpSuiteSharpenerEx/issues copyright=Released as open source under AGPL license\nOriginally released by MDSec - https://www.mdsec.co.uk/\nDeveloped by Soroush Dalili (@irsdl): https://burpsuite.ninja/