├── gradle.properties ├── images ├── img.png ├── img_0.png ├── img_1.png ├── img_2.png ├── img_3.png ├── img_4.png ├── img_5.png ├── img_6.png ├── img_7.png ├── img_8.png └── img_9.png ├── burpicon-sample ├── burp.pdn ├── burp.png ├── burp2.png ├── burp3.png ├── burp4.png ├── burp5.png ├── ninja1.png ├── ninja2.png ├── old_icon.png └── the_original.png ├── hacker-sample-icons ├── Errors.png ├── Logger.png ├── Proxy.png ├── Target.png ├── Autorize.png ├── Comparer.png ├── Decoder.png ├── Extender.png ├── Intruder.png ├── Logger++.png ├── Repeater.png ├── Stepper.png ├── Dashboard.png ├── Extensions.png ├── Hackvertor.png ├── Sequencer.png ├── Collaborator.png ├── User options.png ├── Project options.png ├── Python Scripts.png ├── unused │ ├── 003-alarm.png │ ├── 005-spam.png │ ├── 011-worm.png │ ├── 014-skull.png │ ├── 033-scan.png │ ├── 038-lock.png │ ├── 044-bomb.png │ ├── 045-death.png │ ├── 050-virus.png │ ├── 009-malware.png │ ├── 016-bomb-1.png │ ├── 019-virus-3.png │ ├── 021-lock-1.png │ ├── 022-protect.png │ ├── 026-spyware.png │ ├── 029-hacking.png │ ├── 031-virus-2.png │ ├── 032-folder.png │ ├── 035-bitcoin.png │ ├── 037-global.png │ ├── 042-safety.png │ ├── 043-credit.png │ ├── 046-danger.png │ ├── 047-virus-1.png │ ├── 049-trojan.png │ ├── 001-hacker-1.png │ ├── 004-password-2.png │ ├── 006-password-1.png │ ├── 007-criminal.png │ ├── 008-password.png │ ├── 015-phishing.png │ ├── 020-spyware-1.png │ ├── 024-security-2.png │ ├── 028-security-1.png │ ├── 036-security.png │ ├── 048-firewall.png │ ├── 012-fingerprints.png │ ├── 030-unprotected.png │ └── 010-cyber-security.png └── icons-attr.html ├── .gitignore ├── src └── main │ ├── resources │ ├── icons │ │ ├── pro.png │ │ ├── burp1.png │ │ ├── burp2.png │ │ ├── burp3.png │ │ ├── burp4.png │ │ ├── burp5.png │ │ ├── fuzzy.png │ │ ├── ninja1.png │ │ ├── ninja2.png │ │ ├── old icon.png │ │ ├── community.png │ │ └── the original.png │ ├── MDSec-logo.png │ ├── MDSec-logo-blue.png │ ├── MDSec-logo-grey.png │ ├── subtabicons │ │ ├── alert.png │ │ ├── cross.png │ │ ├── high.png │ │ ├── high2.png │ │ ├── info.png │ │ ├── info2.png │ │ ├── low.png │ │ ├── low2.png │ │ ├── nope.png │ │ ├── tick.png │ │ ├── alert2.png │ │ ├── low-tbc.png │ │ ├── medium.png │ │ ├── medium2.png │ │ ├── duplicate.png │ │ ├── high-tbc.png │ │ ├── info-tbc.png │ │ ├── medium-tbc.png │ │ ├── x-coolpete.png │ │ ├── x-coypete.png │ │ ├── x-gimppete.png │ │ ├── x-heehpete.png │ │ ├── x-hehpete.png │ │ ├── x-highpete.png │ │ ├── x-lolpete.png │ │ ├── x-petebook.png │ │ ├── x-peteneck.png │ │ ├── x-rockpete.png │ │ ├── x-sexypete.png │ │ ├── x-smugpete.png │ │ ├── interesting.png │ │ ├── interesting2.png │ │ ├── x-angrypete.png │ │ ├── x-karenpete.png │ │ ├── x-mobropete.png │ │ ├── x-peteinlove.png │ │ ├── x-peterified.png │ │ ├── x-peterlina.png │ │ ├── x-prettypete.png │ │ ├── x-roughpete.png │ │ ├── x-smirkypete.png │ │ ├── x-toiletpete.png │ │ ├── x-woefulpete.png │ │ ├── false-positive.png │ │ ├── x-bemusedpete.png │ │ ├── x-dedicatedpete.png │ │ ├── x-petegusting.png │ │ ├── x-petequerade.png │ │ ├── x-seenitallpete.png │ │ ├── x-soclosepete.png │ │ ├── x-unclearpete.png │ │ ├── x-forcedsmilepete.png │ │ ├── x-mindboggledpete.png │ │ ├── x-poorexecusepete.png │ │ ├── x-suspiciouspete.png │ │ ├── x-apprehensivepete.png │ │ ├── x-losingmymindpete.png │ │ ├── x-petestiffupperlip.png │ │ └── x-strongopinionpete.png │ ├── themes │ │ ├── game │ │ │ ├── Proxy.png │ │ │ ├── Decoder.png │ │ │ ├── Logger.png │ │ │ ├── Target.png │ │ │ ├── Comparer.png │ │ │ ├── Dashboard.png │ │ │ ├── Extender.png │ │ │ ├── Extensions.png │ │ │ ├── Intruder.png │ │ │ ├── Repeater.png │ │ │ ├── Sequencer.png │ │ │ ├── Collaborator.png │ │ │ ├── User options.png │ │ │ └── Project options.png │ │ ├── @irsdl │ │ │ ├── Proxy.png │ │ │ ├── Comparer.png │ │ │ ├── Decoder.png │ │ │ ├── Extender.png │ │ │ ├── Intruder.png │ │ │ ├── Logger.png │ │ │ ├── Repeater.png │ │ │ ├── Target.png │ │ │ ├── Dashboard.png │ │ │ ├── Extensions.png │ │ │ ├── Sequencer.png │ │ │ ├── Collaborator.png │ │ │ ├── User options.png │ │ │ └── Project options.png │ │ ├── hacker │ │ │ ├── Proxy.png │ │ │ ├── Comparer.png │ │ │ ├── Decoder.png │ │ │ ├── Extender.png │ │ │ ├── Intruder.png │ │ │ ├── Logger.png │ │ │ ├── Repeater.png │ │ │ ├── Target.png │ │ │ ├── Dashboard.png │ │ │ ├── Extensions.png │ │ │ ├── Sequencer.png │ │ │ ├── Collaborator.png │ │ │ ├── User options.png │ │ │ ├── Project options.png │ │ │ └── unused │ │ │ │ ├── 005-spam.png │ │ │ │ ├── 011-worm.png │ │ │ │ ├── 033-scan.png │ │ │ │ ├── 038-lock.png │ │ │ │ ├── 044-bomb.png │ │ │ │ ├── 003-alarm.png │ │ │ │ ├── 009-malware.png │ │ │ │ ├── 014-skull.png │ │ │ │ ├── 016-bomb-1.png │ │ │ │ ├── 019-virus-3.png │ │ │ │ ├── 021-lock-1.png │ │ │ │ ├── 022-protect.png │ │ │ │ ├── 026-spyware.png │ │ │ │ ├── 029-hacking.png │ │ │ │ ├── 031-virus-2.png │ │ │ │ ├── 032-folder.png │ │ │ │ ├── 035-bitcoin.png │ │ │ │ ├── 037-global.png │ │ │ │ ├── 042-safety.png │ │ │ │ ├── 043-credit.png │ │ │ │ ├── 045-death.png │ │ │ │ ├── 046-danger.png │ │ │ │ ├── 047-virus-1.png │ │ │ │ ├── 049-trojan.png │ │ │ │ ├── 050-virus.png │ │ │ │ ├── 001-hacker-1.png │ │ │ │ ├── 007-criminal.png │ │ │ │ ├── 008-password.png │ │ │ │ ├── 015-phishing.png │ │ │ │ ├── 020-spyware-1.png │ │ │ │ ├── 048-firewall.png │ │ │ │ ├── 004-password-2.png │ │ │ │ ├── 006-password-1.png │ │ │ │ ├── 012-fingerprints.png │ │ │ │ ├── 024-security-2.png │ │ │ │ ├── 028-security-1.png │ │ │ │ ├── 030-unprotected.png │ │ │ │ └── 010-cyber-security.png │ │ ├── office │ │ │ ├── Proxy.png │ │ │ ├── Comparer.png │ │ │ ├── Decoder.png │ │ │ ├── Extender.png │ │ │ ├── Intruder.png │ │ │ ├── Logger.png │ │ │ ├── Repeater.png │ │ │ ├── Target.png │ │ │ ├── Dashboard.png │ │ │ ├── Extensions.png │ │ │ ├── Sequencer.png │ │ │ ├── Collaborator.png │ │ │ ├── User options.png │ │ │ ├── Project options.png │ │ │ └── unused │ │ │ │ └── Comparer.png │ │ ├── gradient │ │ │ ├── Logger.png │ │ │ ├── Proxy.png │ │ │ ├── Target.png │ │ │ ├── Comparer.png │ │ │ ├── Decoder.png │ │ │ ├── Extender.png │ │ │ ├── Intruder.png │ │ │ ├── Repeater.png │ │ │ ├── Dashboard.png │ │ │ ├── Extensions.png │ │ │ ├── Sequencer.png │ │ │ ├── Collaborator.png │ │ │ ├── User options.png │ │ │ ├── Project options.png │ │ │ └── unused │ │ │ │ ├── Logger++.png │ │ │ │ ├── Hackvertor.png │ │ │ │ ├── unused-icons8-gear-64.png │ │ │ │ ├── unused-icons8-job-64.png │ │ │ │ ├── unused-Project options.png │ │ │ │ ├── unused-icons8-enlarge-64.png │ │ │ │ ├── unused-icons8-service-64.png │ │ │ │ ├── unused-icons8-diff-files-64.png │ │ │ │ ├── unused-icons8-clash-of-clans-64.png │ │ │ │ └── unused-icons8-zoom-to-extents-64.png │ │ ├── halloween │ │ │ ├── Proxy.png │ │ │ ├── Decoder.png │ │ │ ├── Logger.png │ │ │ ├── Target.png │ │ │ ├── Comparer.png │ │ │ ├── Dashboard.png │ │ │ ├── Extender.png │ │ │ ├── Extensions.png │ │ │ ├── Intruder.png │ │ │ ├── Repeater.png │ │ │ ├── Sequencer.png │ │ │ ├── Collaborator.png │ │ │ ├── User options.png │ │ │ └── Project options.png │ │ ├── mobster │ │ │ ├── Decoder.png │ │ │ ├── Logger.png │ │ │ ├── Proxy.png │ │ │ ├── Target.png │ │ │ ├── Comparer.png │ │ │ ├── Dashboard.png │ │ │ ├── Extender.png │ │ │ ├── Intruder.png │ │ │ ├── Repeater.png │ │ │ ├── Sequencer.png │ │ │ ├── Collaborator.png │ │ │ ├── Extensions.png │ │ │ ├── User options.png │ │ │ └── Project options.png │ │ └── extensions │ │ │ ├── Errors.png │ │ │ ├── Autorize.png │ │ │ ├── Logger++.png │ │ │ ├── Stepper.png │ │ │ ├── Hackvertor.png │ │ │ └── Python Scripts.png │ ├── extension.properties │ └── icons-attr.html │ └── java │ ├── com │ ├── mdsec │ │ └── burp │ │ │ └── sharpener │ │ │ ├── uiSelf │ │ │ ├── suiteTab │ │ │ │ ├── MainSuiteTab.java │ │ │ │ └── SuiteTabSettings.java │ │ │ ├── contextMenu │ │ │ │ ├── MainContextMenu.java │ │ │ │ └── ContextMenuSettings.java │ │ │ └── topMenu │ │ │ │ └── TopMenuSettings.java │ │ │ ├── capabilities │ │ │ └── pwnFox │ │ │ │ ├── PwnFoxSettings.java │ │ │ │ └── PwnFoxProxyRequestHandler.java │ │ │ ├── uiControllers │ │ │ ├── mainTabs │ │ │ │ ├── MainTabsListeners.java │ │ │ │ └── MainTabsSettings.java │ │ │ ├── subTabs │ │ │ │ └── SubTabsCustomTabbedPaneUI.java │ │ │ └── burpFrame │ │ │ │ └── BurpFrameSettings.java │ │ │ ├── objects │ │ │ ├── TabFeaturesObject.java │ │ │ └── TabFeaturesObjectStyle.java │ │ │ └── SharpenerGeneralSettings.java │ └── irsdl │ │ ├── generic │ │ ├── JMenuItemKeepOpen.java │ │ ├── PropertiesHelper.java │ │ ├── Utilities.java │ │ ├── MouseAdapterExtensionHandler.java │ │ ├── Encoding.java │ │ ├── uiObjFinder │ │ │ ├── UIWalker.java │ │ │ └── UiSpecObject.java │ │ ├── ImageHelper.java │ │ ├── JScrollMenu.java │ │ ├── UIHelper.java │ │ └── JScrollPopupMenu.java │ │ ├── objects │ │ ├── PreferenceObject.java │ │ └── StandardSettings.java │ │ └── burp │ │ └── generic │ │ ├── BurpExtensionFeatures.java │ │ ├── ExtendedPreferences.java │ │ ├── BurpTitleAndIcon.java │ │ └── BurpUITools.java │ └── burp │ └── BurpExtension.java ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── .github └── workflows │ └── gradle.yml ├── gradlew.bat ├── BappDescription.html └── gradlew /gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.warning.mode=all 2 | -------------------------------------------------------------------------------- /images/img.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/images/img.png -------------------------------------------------------------------------------- /images/img_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/images/img_0.png -------------------------------------------------------------------------------- /images/img_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/images/img_1.png -------------------------------------------------------------------------------- /images/img_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/images/img_2.png -------------------------------------------------------------------------------- /images/img_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/images/img_3.png -------------------------------------------------------------------------------- /images/img_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/images/img_4.png -------------------------------------------------------------------------------- /images/img_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/images/img_5.png -------------------------------------------------------------------------------- /images/img_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/images/img_6.png -------------------------------------------------------------------------------- /images/img_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/images/img_7.png -------------------------------------------------------------------------------- /images/img_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/images/img_8.png -------------------------------------------------------------------------------- /images/img_9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/images/img_9.png -------------------------------------------------------------------------------- /burpicon-sample/burp.pdn: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/burpicon-sample/burp.pdn -------------------------------------------------------------------------------- /burpicon-sample/burp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/burpicon-sample/burp.png -------------------------------------------------------------------------------- /burpicon-sample/burp2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/burpicon-sample/burp2.png -------------------------------------------------------------------------------- /burpicon-sample/burp3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/burpicon-sample/burp3.png -------------------------------------------------------------------------------- /burpicon-sample/burp4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/burpicon-sample/burp4.png -------------------------------------------------------------------------------- /burpicon-sample/burp5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/burpicon-sample/burp5.png -------------------------------------------------------------------------------- /burpicon-sample/ninja1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/burpicon-sample/ninja1.png -------------------------------------------------------------------------------- /burpicon-sample/ninja2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/burpicon-sample/ninja2.png -------------------------------------------------------------------------------- /burpicon-sample/old_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/burpicon-sample/old_icon.png -------------------------------------------------------------------------------- /hacker-sample-icons/Errors.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/Errors.png -------------------------------------------------------------------------------- /hacker-sample-icons/Logger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/Logger.png -------------------------------------------------------------------------------- /hacker-sample-icons/Proxy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/Proxy.png -------------------------------------------------------------------------------- /hacker-sample-icons/Target.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/Target.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .gradle 2 | .idea 3 | /out/ 4 | /build/ 5 | gradle-app.setting 6 | .gradletasknamecache 7 | .git 8 | .idea/ 9 | /releases/ -------------------------------------------------------------------------------- /burpicon-sample/the_original.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/burpicon-sample/the_original.png -------------------------------------------------------------------------------- /hacker-sample-icons/Autorize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/Autorize.png -------------------------------------------------------------------------------- /hacker-sample-icons/Comparer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/Comparer.png -------------------------------------------------------------------------------- /hacker-sample-icons/Decoder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/Decoder.png -------------------------------------------------------------------------------- /hacker-sample-icons/Extender.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/Extender.png -------------------------------------------------------------------------------- /hacker-sample-icons/Intruder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/Intruder.png -------------------------------------------------------------------------------- /hacker-sample-icons/Logger++.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/Logger++.png -------------------------------------------------------------------------------- /hacker-sample-icons/Repeater.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/Repeater.png -------------------------------------------------------------------------------- /hacker-sample-icons/Stepper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/Stepper.png -------------------------------------------------------------------------------- /src/main/resources/icons/pro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/icons/pro.png -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /hacker-sample-icons/Dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/Dashboard.png -------------------------------------------------------------------------------- /hacker-sample-icons/Extensions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/Extensions.png -------------------------------------------------------------------------------- /hacker-sample-icons/Hackvertor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/Hackvertor.png -------------------------------------------------------------------------------- /hacker-sample-icons/Sequencer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/Sequencer.png -------------------------------------------------------------------------------- /src/main/resources/MDSec-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/MDSec-logo.png -------------------------------------------------------------------------------- /src/main/resources/icons/burp1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/icons/burp1.png -------------------------------------------------------------------------------- /src/main/resources/icons/burp2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/icons/burp2.png -------------------------------------------------------------------------------- /src/main/resources/icons/burp3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/icons/burp3.png -------------------------------------------------------------------------------- /src/main/resources/icons/burp4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/icons/burp4.png -------------------------------------------------------------------------------- /src/main/resources/icons/burp5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/icons/burp5.png -------------------------------------------------------------------------------- /src/main/resources/icons/fuzzy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/icons/fuzzy.png -------------------------------------------------------------------------------- /src/main/resources/icons/ninja1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/icons/ninja1.png -------------------------------------------------------------------------------- /src/main/resources/icons/ninja2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/icons/ninja2.png -------------------------------------------------------------------------------- /hacker-sample-icons/Collaborator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/Collaborator.png -------------------------------------------------------------------------------- /hacker-sample-icons/User options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/User options.png -------------------------------------------------------------------------------- /src/main/resources/icons/old icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/icons/old icon.png -------------------------------------------------------------------------------- /hacker-sample-icons/Project options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/Project options.png -------------------------------------------------------------------------------- /hacker-sample-icons/Python Scripts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/Python Scripts.png -------------------------------------------------------------------------------- /hacker-sample-icons/unused/003-alarm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/unused/003-alarm.png -------------------------------------------------------------------------------- /hacker-sample-icons/unused/005-spam.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/unused/005-spam.png -------------------------------------------------------------------------------- /hacker-sample-icons/unused/011-worm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/unused/011-worm.png -------------------------------------------------------------------------------- /hacker-sample-icons/unused/014-skull.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/unused/014-skull.png -------------------------------------------------------------------------------- /hacker-sample-icons/unused/033-scan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/unused/033-scan.png -------------------------------------------------------------------------------- /hacker-sample-icons/unused/038-lock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/unused/038-lock.png -------------------------------------------------------------------------------- /hacker-sample-icons/unused/044-bomb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/unused/044-bomb.png -------------------------------------------------------------------------------- /hacker-sample-icons/unused/045-death.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/unused/045-death.png -------------------------------------------------------------------------------- /hacker-sample-icons/unused/050-virus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/unused/050-virus.png -------------------------------------------------------------------------------- /src/main/resources/MDSec-logo-blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/MDSec-logo-blue.png -------------------------------------------------------------------------------- /src/main/resources/MDSec-logo-grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/MDSec-logo-grey.png -------------------------------------------------------------------------------- /src/main/resources/icons/community.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/icons/community.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/alert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/alert.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/cross.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/cross.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/high.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/high.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/high2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/high2.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/info.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/info2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/info2.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/low.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/low.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/low2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/low2.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/nope.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/nope.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/tick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/tick.png -------------------------------------------------------------------------------- /src/main/resources/themes/game/Proxy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/game/Proxy.png -------------------------------------------------------------------------------- /hacker-sample-icons/unused/009-malware.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/unused/009-malware.png -------------------------------------------------------------------------------- /hacker-sample-icons/unused/016-bomb-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/unused/016-bomb-1.png -------------------------------------------------------------------------------- /hacker-sample-icons/unused/019-virus-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/unused/019-virus-3.png -------------------------------------------------------------------------------- /hacker-sample-icons/unused/021-lock-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/unused/021-lock-1.png -------------------------------------------------------------------------------- /hacker-sample-icons/unused/022-protect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/unused/022-protect.png -------------------------------------------------------------------------------- /hacker-sample-icons/unused/026-spyware.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/unused/026-spyware.png -------------------------------------------------------------------------------- /hacker-sample-icons/unused/029-hacking.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/unused/029-hacking.png -------------------------------------------------------------------------------- /hacker-sample-icons/unused/031-virus-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/unused/031-virus-2.png -------------------------------------------------------------------------------- /hacker-sample-icons/unused/032-folder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/unused/032-folder.png -------------------------------------------------------------------------------- /hacker-sample-icons/unused/035-bitcoin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/unused/035-bitcoin.png -------------------------------------------------------------------------------- /hacker-sample-icons/unused/037-global.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/unused/037-global.png -------------------------------------------------------------------------------- /hacker-sample-icons/unused/042-safety.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/unused/042-safety.png -------------------------------------------------------------------------------- /hacker-sample-icons/unused/043-credit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/unused/043-credit.png -------------------------------------------------------------------------------- /hacker-sample-icons/unused/046-danger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/unused/046-danger.png -------------------------------------------------------------------------------- /hacker-sample-icons/unused/047-virus-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/unused/047-virus-1.png -------------------------------------------------------------------------------- /hacker-sample-icons/unused/049-trojan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/unused/049-trojan.png -------------------------------------------------------------------------------- /src/main/resources/icons/the original.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/icons/the original.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/alert2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/alert2.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/low-tbc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/low-tbc.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/medium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/medium.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/medium2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/medium2.png -------------------------------------------------------------------------------- /src/main/resources/themes/@irsdl/Proxy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/@irsdl/Proxy.png -------------------------------------------------------------------------------- /src/main/resources/themes/game/Decoder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/game/Decoder.png -------------------------------------------------------------------------------- /src/main/resources/themes/game/Logger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/game/Logger.png -------------------------------------------------------------------------------- /src/main/resources/themes/game/Target.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/game/Target.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/Proxy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/Proxy.png -------------------------------------------------------------------------------- /src/main/resources/themes/office/Proxy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/office/Proxy.png -------------------------------------------------------------------------------- /hacker-sample-icons/unused/001-hacker-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/unused/001-hacker-1.png -------------------------------------------------------------------------------- /hacker-sample-icons/unused/004-password-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/unused/004-password-2.png -------------------------------------------------------------------------------- /hacker-sample-icons/unused/006-password-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/unused/006-password-1.png -------------------------------------------------------------------------------- /hacker-sample-icons/unused/007-criminal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/unused/007-criminal.png -------------------------------------------------------------------------------- /hacker-sample-icons/unused/008-password.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/unused/008-password.png -------------------------------------------------------------------------------- /hacker-sample-icons/unused/015-phishing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/unused/015-phishing.png -------------------------------------------------------------------------------- /hacker-sample-icons/unused/020-spyware-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/unused/020-spyware-1.png -------------------------------------------------------------------------------- /hacker-sample-icons/unused/024-security-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/unused/024-security-2.png -------------------------------------------------------------------------------- /hacker-sample-icons/unused/028-security-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/unused/028-security-1.png -------------------------------------------------------------------------------- /hacker-sample-icons/unused/036-security.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/unused/036-security.png -------------------------------------------------------------------------------- /hacker-sample-icons/unused/048-firewall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/unused/048-firewall.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/duplicate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/duplicate.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/high-tbc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/high-tbc.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/info-tbc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/info-tbc.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/medium-tbc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/medium-tbc.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/x-coolpete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/x-coolpete.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/x-coypete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/x-coypete.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/x-gimppete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/x-gimppete.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/x-heehpete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/x-heehpete.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/x-hehpete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/x-hehpete.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/x-highpete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/x-highpete.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/x-lolpete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/x-lolpete.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/x-petebook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/x-petebook.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/x-peteneck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/x-peteneck.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/x-rockpete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/x-rockpete.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/x-sexypete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/x-sexypete.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/x-smugpete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/x-smugpete.png -------------------------------------------------------------------------------- /src/main/resources/themes/@irsdl/Comparer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/@irsdl/Comparer.png -------------------------------------------------------------------------------- /src/main/resources/themes/@irsdl/Decoder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/@irsdl/Decoder.png -------------------------------------------------------------------------------- /src/main/resources/themes/@irsdl/Extender.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/@irsdl/Extender.png -------------------------------------------------------------------------------- /src/main/resources/themes/@irsdl/Intruder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/@irsdl/Intruder.png -------------------------------------------------------------------------------- /src/main/resources/themes/@irsdl/Logger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/@irsdl/Logger.png -------------------------------------------------------------------------------- /src/main/resources/themes/@irsdl/Repeater.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/@irsdl/Repeater.png -------------------------------------------------------------------------------- /src/main/resources/themes/@irsdl/Target.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/@irsdl/Target.png -------------------------------------------------------------------------------- /src/main/resources/themes/game/Comparer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/game/Comparer.png -------------------------------------------------------------------------------- /src/main/resources/themes/game/Dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/game/Dashboard.png -------------------------------------------------------------------------------- /src/main/resources/themes/game/Extender.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/game/Extender.png -------------------------------------------------------------------------------- /src/main/resources/themes/game/Extensions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/game/Extensions.png -------------------------------------------------------------------------------- /src/main/resources/themes/game/Intruder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/game/Intruder.png -------------------------------------------------------------------------------- /src/main/resources/themes/game/Repeater.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/game/Repeater.png -------------------------------------------------------------------------------- /src/main/resources/themes/game/Sequencer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/game/Sequencer.png -------------------------------------------------------------------------------- /src/main/resources/themes/gradient/Logger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/gradient/Logger.png -------------------------------------------------------------------------------- /src/main/resources/themes/gradient/Proxy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/gradient/Proxy.png -------------------------------------------------------------------------------- /src/main/resources/themes/gradient/Target.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/gradient/Target.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/Comparer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/Comparer.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/Decoder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/Decoder.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/Extender.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/Extender.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/Intruder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/Intruder.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/Logger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/Logger.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/Repeater.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/Repeater.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/Target.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/Target.png -------------------------------------------------------------------------------- /src/main/resources/themes/halloween/Proxy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/halloween/Proxy.png -------------------------------------------------------------------------------- /src/main/resources/themes/mobster/Decoder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/mobster/Decoder.png -------------------------------------------------------------------------------- /src/main/resources/themes/mobster/Logger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/mobster/Logger.png -------------------------------------------------------------------------------- /src/main/resources/themes/mobster/Proxy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/mobster/Proxy.png -------------------------------------------------------------------------------- /src/main/resources/themes/mobster/Target.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/mobster/Target.png -------------------------------------------------------------------------------- /src/main/resources/themes/office/Comparer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/office/Comparer.png -------------------------------------------------------------------------------- /src/main/resources/themes/office/Decoder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/office/Decoder.png -------------------------------------------------------------------------------- /src/main/resources/themes/office/Extender.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/office/Extender.png -------------------------------------------------------------------------------- /src/main/resources/themes/office/Intruder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/office/Intruder.png -------------------------------------------------------------------------------- /src/main/resources/themes/office/Logger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/office/Logger.png -------------------------------------------------------------------------------- /src/main/resources/themes/office/Repeater.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/office/Repeater.png -------------------------------------------------------------------------------- /src/main/resources/themes/office/Target.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/office/Target.png -------------------------------------------------------------------------------- /hacker-sample-icons/unused/012-fingerprints.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/unused/012-fingerprints.png -------------------------------------------------------------------------------- /hacker-sample-icons/unused/030-unprotected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/unused/030-unprotected.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/interesting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/interesting.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/interesting2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/interesting2.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/x-angrypete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/x-angrypete.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/x-karenpete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/x-karenpete.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/x-mobropete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/x-mobropete.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/x-peteinlove.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/x-peteinlove.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/x-peterified.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/x-peterified.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/x-peterlina.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/x-peterlina.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/x-prettypete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/x-prettypete.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/x-roughpete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/x-roughpete.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/x-smirkypete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/x-smirkypete.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/x-toiletpete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/x-toiletpete.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/x-woefulpete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/x-woefulpete.png -------------------------------------------------------------------------------- /src/main/resources/themes/@irsdl/Dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/@irsdl/Dashboard.png -------------------------------------------------------------------------------- /src/main/resources/themes/@irsdl/Extensions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/@irsdl/Extensions.png -------------------------------------------------------------------------------- /src/main/resources/themes/@irsdl/Sequencer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/@irsdl/Sequencer.png -------------------------------------------------------------------------------- /src/main/resources/themes/extensions/Errors.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/extensions/Errors.png -------------------------------------------------------------------------------- /src/main/resources/themes/game/Collaborator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/game/Collaborator.png -------------------------------------------------------------------------------- /src/main/resources/themes/game/User options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/game/User options.png -------------------------------------------------------------------------------- /src/main/resources/themes/gradient/Comparer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/gradient/Comparer.png -------------------------------------------------------------------------------- /src/main/resources/themes/gradient/Decoder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/gradient/Decoder.png -------------------------------------------------------------------------------- /src/main/resources/themes/gradient/Extender.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/gradient/Extender.png -------------------------------------------------------------------------------- /src/main/resources/themes/gradient/Intruder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/gradient/Intruder.png -------------------------------------------------------------------------------- /src/main/resources/themes/gradient/Repeater.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/gradient/Repeater.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/Dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/Dashboard.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/Extensions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/Extensions.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/Sequencer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/Sequencer.png -------------------------------------------------------------------------------- /src/main/resources/themes/halloween/Decoder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/halloween/Decoder.png -------------------------------------------------------------------------------- /src/main/resources/themes/halloween/Logger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/halloween/Logger.png -------------------------------------------------------------------------------- /src/main/resources/themes/halloween/Target.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/halloween/Target.png -------------------------------------------------------------------------------- /src/main/resources/themes/mobster/Comparer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/mobster/Comparer.png -------------------------------------------------------------------------------- /src/main/resources/themes/mobster/Dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/mobster/Dashboard.png -------------------------------------------------------------------------------- /src/main/resources/themes/mobster/Extender.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/mobster/Extender.png -------------------------------------------------------------------------------- /src/main/resources/themes/mobster/Intruder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/mobster/Intruder.png -------------------------------------------------------------------------------- /src/main/resources/themes/mobster/Repeater.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/mobster/Repeater.png -------------------------------------------------------------------------------- /src/main/resources/themes/mobster/Sequencer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/mobster/Sequencer.png -------------------------------------------------------------------------------- /src/main/resources/themes/office/Dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/office/Dashboard.png -------------------------------------------------------------------------------- /src/main/resources/themes/office/Extensions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/office/Extensions.png -------------------------------------------------------------------------------- /src/main/resources/themes/office/Sequencer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/office/Sequencer.png -------------------------------------------------------------------------------- /hacker-sample-icons/unused/010-cyber-security.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/hacker-sample-icons/unused/010-cyber-security.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/false-positive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/false-positive.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/x-bemusedpete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/x-bemusedpete.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/x-dedicatedpete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/x-dedicatedpete.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/x-petegusting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/x-petegusting.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/x-petequerade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/x-petequerade.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/x-seenitallpete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/x-seenitallpete.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/x-soclosepete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/x-soclosepete.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/x-unclearpete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/x-unclearpete.png -------------------------------------------------------------------------------- /src/main/resources/themes/@irsdl/Collaborator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/@irsdl/Collaborator.png -------------------------------------------------------------------------------- /src/main/resources/themes/@irsdl/User options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/@irsdl/User options.png -------------------------------------------------------------------------------- /src/main/resources/themes/extensions/Autorize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/extensions/Autorize.png -------------------------------------------------------------------------------- /src/main/resources/themes/extensions/Logger++.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/extensions/Logger++.png -------------------------------------------------------------------------------- /src/main/resources/themes/extensions/Stepper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/extensions/Stepper.png -------------------------------------------------------------------------------- /src/main/resources/themes/game/Project options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/game/Project options.png -------------------------------------------------------------------------------- /src/main/resources/themes/gradient/Dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/gradient/Dashboard.png -------------------------------------------------------------------------------- /src/main/resources/themes/gradient/Extensions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/gradient/Extensions.png -------------------------------------------------------------------------------- /src/main/resources/themes/gradient/Sequencer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/gradient/Sequencer.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/Collaborator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/Collaborator.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/User options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/User options.png -------------------------------------------------------------------------------- /src/main/resources/themes/halloween/Comparer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/halloween/Comparer.png -------------------------------------------------------------------------------- /src/main/resources/themes/halloween/Dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/halloween/Dashboard.png -------------------------------------------------------------------------------- /src/main/resources/themes/halloween/Extender.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/halloween/Extender.png -------------------------------------------------------------------------------- /src/main/resources/themes/halloween/Extensions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/halloween/Extensions.png -------------------------------------------------------------------------------- /src/main/resources/themes/halloween/Intruder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/halloween/Intruder.png -------------------------------------------------------------------------------- /src/main/resources/themes/halloween/Repeater.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/halloween/Repeater.png -------------------------------------------------------------------------------- /src/main/resources/themes/halloween/Sequencer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/halloween/Sequencer.png -------------------------------------------------------------------------------- /src/main/resources/themes/mobster/Collaborator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/mobster/Collaborator.png -------------------------------------------------------------------------------- /src/main/resources/themes/mobster/Extensions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/mobster/Extensions.png -------------------------------------------------------------------------------- /src/main/resources/themes/mobster/User options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/mobster/User options.png -------------------------------------------------------------------------------- /src/main/resources/themes/office/Collaborator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/office/Collaborator.png -------------------------------------------------------------------------------- /src/main/resources/themes/office/User options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/office/User options.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/x-forcedsmilepete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/x-forcedsmilepete.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/x-mindboggledpete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/x-mindboggledpete.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/x-poorexecusepete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/x-poorexecusepete.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/x-suspiciouspete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/x-suspiciouspete.png -------------------------------------------------------------------------------- /src/main/resources/themes/@irsdl/Project options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/@irsdl/Project options.png -------------------------------------------------------------------------------- /src/main/resources/themes/extensions/Hackvertor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/extensions/Hackvertor.png -------------------------------------------------------------------------------- /src/main/resources/themes/gradient/Collaborator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/gradient/Collaborator.png -------------------------------------------------------------------------------- /src/main/resources/themes/gradient/User options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/gradient/User options.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/Project options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/Project options.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/unused/005-spam.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/unused/005-spam.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/unused/011-worm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/unused/011-worm.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/unused/033-scan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/unused/033-scan.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/unused/038-lock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/unused/038-lock.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/unused/044-bomb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/unused/044-bomb.png -------------------------------------------------------------------------------- /src/main/resources/themes/halloween/Collaborator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/halloween/Collaborator.png -------------------------------------------------------------------------------- /src/main/resources/themes/halloween/User options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/halloween/User options.png -------------------------------------------------------------------------------- /src/main/resources/themes/office/Project options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/office/Project options.png -------------------------------------------------------------------------------- /src/main/resources/themes/office/unused/Comparer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/office/unused/Comparer.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/x-apprehensivepete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/x-apprehensivepete.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/x-losingmymindpete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/x-losingmymindpete.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/x-petestiffupperlip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/x-petestiffupperlip.png -------------------------------------------------------------------------------- /src/main/resources/subtabicons/x-strongopinionpete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/subtabicons/x-strongopinionpete.png -------------------------------------------------------------------------------- /src/main/resources/themes/extensions/Python Scripts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/extensions/Python Scripts.png -------------------------------------------------------------------------------- /src/main/resources/themes/gradient/Project options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/gradient/Project options.png -------------------------------------------------------------------------------- /src/main/resources/themes/gradient/unused/Logger++.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/gradient/unused/Logger++.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/unused/003-alarm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/unused/003-alarm.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/unused/009-malware.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/unused/009-malware.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/unused/014-skull.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/unused/014-skull.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/unused/016-bomb-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/unused/016-bomb-1.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/unused/019-virus-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/unused/019-virus-3.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/unused/021-lock-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/unused/021-lock-1.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/unused/022-protect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/unused/022-protect.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/unused/026-spyware.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/unused/026-spyware.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/unused/029-hacking.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/unused/029-hacking.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/unused/031-virus-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/unused/031-virus-2.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/unused/032-folder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/unused/032-folder.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/unused/035-bitcoin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/unused/035-bitcoin.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/unused/037-global.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/unused/037-global.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/unused/042-safety.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/unused/042-safety.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/unused/043-credit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/unused/043-credit.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/unused/045-death.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/unused/045-death.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/unused/046-danger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/unused/046-danger.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/unused/047-virus-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/unused/047-virus-1.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/unused/049-trojan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/unused/049-trojan.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/unused/050-virus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/unused/050-virus.png -------------------------------------------------------------------------------- /src/main/resources/themes/halloween/Project options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/halloween/Project options.png -------------------------------------------------------------------------------- /src/main/resources/themes/mobster/Project options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/mobster/Project options.png -------------------------------------------------------------------------------- /src/main/resources/themes/gradient/unused/Hackvertor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/gradient/unused/Hackvertor.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/unused/001-hacker-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/unused/001-hacker-1.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/unused/007-criminal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/unused/007-criminal.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/unused/008-password.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/unused/008-password.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/unused/015-phishing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/unused/015-phishing.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/unused/020-spyware-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/unused/020-spyware-1.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/unused/048-firewall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/unused/048-firewall.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/unused/004-password-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/unused/004-password-2.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/unused/006-password-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/unused/006-password-1.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/unused/012-fingerprints.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/unused/012-fingerprints.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/unused/024-security-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/unused/024-security-2.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/unused/028-security-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/unused/028-security-1.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/unused/030-unprotected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/unused/030-unprotected.png -------------------------------------------------------------------------------- /src/main/resources/themes/hacker/unused/010-cyber-security.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/hacker/unused/010-cyber-security.png -------------------------------------------------------------------------------- /src/main/resources/themes/gradient/unused/unused-icons8-gear-64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/gradient/unused/unused-icons8-gear-64.png -------------------------------------------------------------------------------- /src/main/resources/themes/gradient/unused/unused-icons8-job-64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/gradient/unused/unused-icons8-job-64.png -------------------------------------------------------------------------------- /src/main/resources/themes/gradient/unused/unused-Project options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/gradient/unused/unused-Project options.png -------------------------------------------------------------------------------- /src/main/resources/themes/gradient/unused/unused-icons8-enlarge-64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/gradient/unused/unused-icons8-enlarge-64.png -------------------------------------------------------------------------------- /src/main/resources/themes/gradient/unused/unused-icons8-service-64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/gradient/unused/unused-icons8-service-64.png -------------------------------------------------------------------------------- /src/main/resources/themes/gradient/unused/unused-icons8-diff-files-64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/gradient/unused/unused-icons8-diff-files-64.png -------------------------------------------------------------------------------- /src/main/resources/themes/gradient/unused/unused-icons8-clash-of-clans-64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/gradient/unused/unused-icons8-clash-of-clans-64.png -------------------------------------------------------------------------------- /src/main/resources/themes/gradient/unused/unused-icons8-zoom-to-extents-64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/HEAD/src/main/resources/themes/gradient/unused/unused-icons8-zoom-to-extents-64.png -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /src/main/resources/extension.properties: -------------------------------------------------------------------------------- 1 | name=Sharpener 2 | version=3.6 3 | url=https://github.com/mdsecresearch/BurpSuiteSharpener 4 | issueTracker=https://github.com/mdsecresearch/BurpSuiteSharpener/issues 5 | copyright=Released as open source under AGPL license by MDSec - https://www.mdsec.co.uk/ \nDeveloped by Soroush Dalili (Twitter: @irsdl) 6 | propertiesFileUrl=https://raw.githubusercontent.com/mdsecresearch/BurpSuiteSharpener/main/src/main/resources/extension.properties -------------------------------------------------------------------------------- /hacker-sample-icons/icons-attr.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Icons made by Freepik from www.flaticon.com
-------------------------------------------------------------------------------- /src/main/java/com/mdsec/burp/sharpener/uiSelf/suiteTab/MainSuiteTab.java: -------------------------------------------------------------------------------- 1 | // Burp Suite Extension Name: Sharpener 2 | // Released under AGPL see LICENSE for more information 3 | // Developed by Soroush Dalili (@irsdl) 4 | // Released initially as open source by MDSec - https://www.mdsec.co.uk 5 | // Project link: https://github.com/mdsecresearch/BurpSuiteSharpener 6 | 7 | package com.mdsec.burp.sharpener.uiSelf.suiteTab; 8 | 9 | import javax.swing.*; 10 | 11 | public class MainSuiteTab extends JComponent 12 | { 13 | public MainSuiteTab(){ 14 | 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/resources/icons-attr.html: -------------------------------------------------------------------------------- 1 | Target icon icon by Icons8 3 | 4 |
5 | 6 |
Icons made by Freepik from www.flaticon.com
8 | 9 |
10 | 11 | Hackvertor icon from: https://github.com/hackvertor/hackvertor/tree/master/src/main/resources/images -------------------------------------------------------------------------------- /src/main/java/burp/BurpExtension.java: -------------------------------------------------------------------------------- 1 | // Burp Suite Extension Name: Sharpener 2 | // Released under AGPL see LICENSE for more information 3 | // Developed by Soroush Dalili (@irsdl) 4 | // Released initially as open source by MDSec - https://www.mdsec.co.uk 5 | // Project link: https://github.com/mdsecresearch/BurpSuiteSharpener 6 | 7 | package burp; 8 | import com.mdsec.burp.sharpener.SharpenerMainClass; 9 | 10 | public class BurpExtension extends SharpenerMainClass { 11 | public static void main(String[] args) { 12 | //System.out.println("You have built the extension. You shall play with the jar file now!"); 13 | } 14 | 15 | } -------------------------------------------------------------------------------- /src/main/java/com/irsdl/generic/JMenuItemKeepOpen.java: -------------------------------------------------------------------------------- 1 | // Released under AGPL see LICENSE for more information 2 | // Developed by Soroush Dalili (@irsdl) 3 | 4 | package com.irsdl.generic; 5 | 6 | import javax.swing.*; 7 | import java.awt.event.MouseEvent; 8 | 9 | public class JMenuItemKeepOpen extends JMenuItem { 10 | 11 | public JMenuItemKeepOpen(String text) { 12 | super(text); 13 | } 14 | 15 | @Override 16 | protected void processMouseEvent(MouseEvent evt) { 17 | if (evt.getID() == MouseEvent.MOUSE_RELEASED && contains(evt.getPoint())) { 18 | doClick(); 19 | setArmed(true); 20 | } else { 21 | super.processMouseEvent(evt); 22 | } 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/com/irsdl/objects/PreferenceObject.java: -------------------------------------------------------------------------------- 1 | // Released under AGPL see LICENSE for more information 2 | // Developed by Soroush Dalili (@irsdl) 3 | 4 | package com.irsdl.objects; 5 | 6 | import com.coreyd97.BurpExtenderUtilities.Preferences; 7 | 8 | import java.lang.reflect.Type; 9 | 10 | public class PreferenceObject { 11 | public String settingName; 12 | public Type type; 13 | public Object defaultValue; 14 | public Preferences.Visibility visibility; 15 | 16 | public PreferenceObject(String settingName, Type type, Object defaultValue, Preferences.Visibility visibility) { 17 | this.settingName = settingName; 18 | this.type = type; 19 | this.defaultValue = defaultValue; 20 | this.visibility = visibility; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/com/irsdl/burp/generic/BurpExtensionFeatures.java: -------------------------------------------------------------------------------- 1 | // Released under AGPL see LICENSE for more information 2 | // Developed by Soroush Dalili (@irsdl) 3 | 4 | package com.irsdl.burp.generic; 5 | 6 | public class BurpExtensionFeatures { 7 | public boolean hasSuiteTab = false; 8 | public boolean hasContextMenu = false; 9 | public boolean isCommunityVersionCompatible = true; 10 | public double minSupportedMajorVersionInclusive = 0.0; 11 | public double maxSupportedMajorVersionInclusive = 0.0; 12 | public double minSupportedMinorVersionInclusive = 0.0; 13 | public double maxSupportedMinorVersionInclusive = 0.0; 14 | public boolean hasHttpHandler = false; 15 | public boolean hasProxyHandler = false; 16 | public BurpExtensionFeatures(){ 17 | 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/irsdl/generic/PropertiesHelper.java: -------------------------------------------------------------------------------- 1 | // Released under AGPL see LICENSE for more information 2 | // Developed by Soroush Dalili (@irsdl) 3 | 4 | package com.irsdl.generic; 5 | 6 | import java.io.InputStream; 7 | import java.util.Properties; 8 | 9 | import static org.apache.commons.lang3.exception.ExceptionUtils.getStackTrace; 10 | 11 | public class PropertiesHelper { 12 | public static Properties readProperties(Class claz, String resourcePath) { 13 | Properties prop = new Properties(); 14 | try{ 15 | InputStream stream = claz.getResourceAsStream(resourcePath); 16 | prop.load(stream); 17 | }catch(Exception e){ 18 | System.err.println(e.getMessage() + "\r\n" + getStackTrace(e)); 19 | } 20 | return prop; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/com/mdsec/burp/sharpener/uiSelf/contextMenu/MainContextMenu.java: -------------------------------------------------------------------------------- 1 | // Burp Suite Extension Name: Sharpener 2 | // Released under AGPL see LICENSE for more information 3 | // Developed by Soroush Dalili (@irsdl) 4 | // Released initially as open source by MDSec - https://www.mdsec.co.uk 5 | // Project link: https://github.com/mdsecresearch/BurpSuiteSharpener 6 | 7 | package com.mdsec.burp.sharpener.uiSelf.contextMenu; 8 | 9 | import burp.api.montoya.ui.contextmenu.ContextMenuEvent; 10 | import burp.api.montoya.ui.contextmenu.ContextMenuItemsProvider; 11 | 12 | import java.awt.*; 13 | import java.util.List; 14 | 15 | public class MainContextMenu implements ContextMenuItemsProvider { 16 | 17 | @Override 18 | public List provideMenuItems(ContextMenuEvent event) { 19 | return null; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/com/irsdl/generic/Utilities.java: -------------------------------------------------------------------------------- 1 | // Released under AGPL see LICENSE for more information 2 | // Developed by Soroush Dalili (@irsdl) 3 | 4 | package com.irsdl.generic; 5 | 6 | import java.util.Random; 7 | import java.util.regex.Pattern; 8 | import java.util.regex.PatternSyntaxException; 9 | 10 | public class Utilities { 11 | public static int getInsecureRandomNumber(int min, int max) { 12 | //return new Random().nextInt(min, max+1); 13 | Random rand = new Random(); 14 | return rand.nextInt((max - min) + 1) + min; 15 | } 16 | 17 | public static boolean isValidRegExPattern(String regexString) { 18 | boolean result = false; 19 | try { 20 | Pattern.compile(regexString); 21 | result = true; 22 | } catch (PatternSyntaxException exception) { 23 | //ignore 24 | } 25 | return result; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/com/mdsec/burp/sharpener/uiSelf/suiteTab/SuiteTabSettings.java: -------------------------------------------------------------------------------- 1 | // Burp Suite Extension Name: Sharpener 2 | // Released under AGPL see LICENSE for more information 3 | // Developed by Soroush Dalili (@irsdl) 4 | // Released initially as open source by MDSec - https://www.mdsec.co.uk 5 | // Project link: https://github.com/mdsecresearch/BurpSuiteSharpener 6 | 7 | package com.mdsec.burp.sharpener.uiSelf.suiteTab; 8 | 9 | import com.mdsec.burp.sharpener.SharpenerSharedParameters; 10 | import com.irsdl.objects.PreferenceObject; 11 | import com.irsdl.objects.StandardSettings; 12 | 13 | import java.util.Collection; 14 | 15 | public class SuiteTabSettings extends StandardSettings { 16 | protected SuiteTabSettings(SharpenerSharedParameters sharedParameters) { 17 | super(sharedParameters); 18 | } 19 | 20 | @Override 21 | public void init() { 22 | 23 | } 24 | 25 | @Override 26 | public Collection definePreferenceObjectCollection() { 27 | return null; 28 | } 29 | 30 | @Override 31 | public void loadSettings() { 32 | 33 | } 34 | 35 | @Override 36 | public void unloadSettings() { 37 | 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/main/java/com/mdsec/burp/sharpener/uiSelf/contextMenu/ContextMenuSettings.java: -------------------------------------------------------------------------------- 1 | // Burp Suite Extension Name: Sharpener 2 | // Released under AGPL see LICENSE for more information 3 | // Developed by Soroush Dalili (@irsdl) 4 | // Released initially as open source by MDSec - https://www.mdsec.co.uk 5 | // Project link: https://github.com/mdsecresearch/BurpSuiteSharpener 6 | 7 | package com.mdsec.burp.sharpener.uiSelf.contextMenu; 8 | 9 | import com.mdsec.burp.sharpener.SharpenerSharedParameters; 10 | import com.irsdl.objects.PreferenceObject; 11 | import com.irsdl.objects.StandardSettings; 12 | 13 | import java.util.Collection; 14 | 15 | public class ContextMenuSettings extends StandardSettings { 16 | protected ContextMenuSettings(SharpenerSharedParameters sharedParameters) { 17 | super(sharedParameters); 18 | } 19 | 20 | @Override 21 | public void init() { 22 | 23 | } 24 | 25 | @Override 26 | public Collection definePreferenceObjectCollection() { 27 | return null; 28 | } 29 | 30 | @Override 31 | public void loadSettings() { 32 | 33 | } 34 | 35 | @Override 36 | public void unloadSettings() { 37 | 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /.github/workflows/gradle.yml: -------------------------------------------------------------------------------- 1 | # This workflow will build a Java project with Gradle 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-gradle 3 | 4 | name: Java CI with Gradle 5 | 6 | on: 7 | push: 8 | branches: [ main ] 9 | tags: 10 | - 'v*' 11 | pull_request: 12 | branches: [ main ] 13 | tags: 14 | - 'v*' 15 | 16 | jobs: 17 | build: 18 | runs-on: ubuntu-latest 19 | 20 | steps: 21 | - uses: actions/checkout@v3 22 | - name: Set up JDK 17 23 | uses: actions/setup-java@v3 24 | with: 25 | distribution: 'oracle' 26 | java-version: '17' 27 | cache: 'gradle' 28 | - name: Grant execute permission for gradlew 29 | run: chmod +x gradlew 30 | - name: Build with Gradle 31 | run: ./gradlew build 32 | - name: Creating the jar file 33 | run: ./gradlew jar 34 | - name: Upload artifact 35 | uses: actions/upload-artifact@v3 36 | with: 37 | path: ./releases/*.jar 38 | name: Downloadable Extension File 39 | - name: Delete older releases 40 | uses: dev-drprasad/delete-older-releases@v0.2.0 41 | with: 42 | keep_latest: 0 43 | env: 44 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 45 | - name: Release 46 | uses: ncipollo/release-action@v1 47 | with: 48 | tag: "latest_build_by_github" 49 | body: "This jar file has been built by GitHub automatically.\nYou can view the latest version number in the [extension.properties](../../blob/main/src/main/resources/extension.properties) file." 50 | allowUpdates: true 51 | artifacts: "releases/*.jar" -------------------------------------------------------------------------------- /src/main/java/com/mdsec/burp/sharpener/capabilities/pwnFox/PwnFoxSettings.java: -------------------------------------------------------------------------------- 1 | // Burp Suite Extension Name: Sharpener 2 | // Released under AGPL see LICENSE for more information 3 | // Developed by Soroush Dalili (@irsdl) 4 | // Released initially as open source by MDSec - https://www.mdsec.co.uk 5 | // Project link: https://github.com/mdsecresearch/BurpSuiteSharpener 6 | 7 | package com.mdsec.burp.sharpener.capabilities.pwnFox; 8 | 9 | import com.coreyd97.BurpExtenderUtilities.Preferences; 10 | import com.mdsec.burp.sharpener.SharpenerSharedParameters; 11 | import com.irsdl.objects.PreferenceObject; 12 | import com.irsdl.objects.StandardSettings; 13 | 14 | import java.util.ArrayList; 15 | import java.util.Collection; 16 | 17 | public class PwnFoxSettings extends StandardSettings { 18 | public PwnFoxSettings(SharpenerSharedParameters sharedParameters) { 19 | super(sharedParameters); 20 | } 21 | 22 | @Override 23 | public void init() { 24 | 25 | } 26 | 27 | @Override 28 | public Collection definePreferenceObjectCollection() { 29 | Collection preferenceObjectCollection = new ArrayList<>(); 30 | PreferenceObject preferenceObject; 31 | try { 32 | preferenceObject = new PreferenceObject("pwnFoxSupportCapability", boolean.class, false, Preferences.Visibility.GLOBAL); 33 | preferenceObjectCollection.add(preferenceObject); 34 | } catch (Exception e) { 35 | //already registered setting 36 | sharedParameters.printDebugMessage(e.getMessage()); 37 | } 38 | 39 | return preferenceObjectCollection; 40 | } 41 | 42 | @Override 43 | public void loadSettings() { 44 | 45 | } 46 | 47 | @Override 48 | public void unloadSettings() { 49 | 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/main/java/com/mdsec/burp/sharpener/uiSelf/topMenu/TopMenuSettings.java: -------------------------------------------------------------------------------- 1 | // Burp Suite Extension Name: Sharpener 2 | // Released under AGPL see LICENSE for more information 3 | // Developed by Soroush Dalili (@irsdl) 4 | // Released initially as open source by MDSec - https://www.mdsec.co.uk 5 | // Project link: https://github.com/mdsecresearch/BurpSuiteSharpener 6 | 7 | package com.mdsec.burp.sharpener.uiSelf.topMenu; 8 | 9 | import com.mdsec.burp.sharpener.SharpenerSharedParameters; 10 | import com.irsdl.objects.PreferenceObject; 11 | import com.irsdl.objects.StandardSettings; 12 | 13 | import java.util.Collection; 14 | import java.util.Collections; 15 | 16 | public class TopMenuSettings extends StandardSettings { 17 | 18 | public TopMenuSettings(SharpenerSharedParameters sharedParameters) { 19 | super(sharedParameters); 20 | sharedParameters.printDebugMessage("TopMenuSettings"); 21 | } 22 | @Override 23 | public void init() { 24 | 25 | } 26 | 27 | @Override 28 | public Collection definePreferenceObjectCollection() { 29 | return Collections.emptyList(); 30 | } 31 | 32 | @Override 33 | public void loadSettings() { 34 | // Adding the top menu 35 | try { 36 | if (sharedParameters.topMenuBar != null) { 37 | sharedParameters.printDebugMessage("Removing the top menu before adding it again"); 38 | sharedParameters.topMenuBar.removeTopMenuBar(); 39 | } 40 | sharedParameters.printDebugMessage("Adding the top menu"); 41 | sharedParameters.topMenuBar = new TopMenu(sharedParameters); 42 | sharedParameters.topMenuBar.addTopMenuBar(); 43 | } catch (Exception e) { 44 | sharedParameters.stderr.println("Error in creating the top menu: " + e.getMessage()); 45 | } 46 | } 47 | 48 | @Override 49 | public void unloadSettings() { 50 | sharedParameters.printDebugMessage("removing toolbar menu"); 51 | // removing toolbar menu 52 | if (sharedParameters.topMenuBar != null) 53 | sharedParameters.topMenuBar.removeTopMenuBar(); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/main/java/com/mdsec/burp/sharpener/capabilities/pwnFox/PwnFoxProxyRequestHandler.java: -------------------------------------------------------------------------------- 1 | // Burp Suite Extension Name: Sharpener 2 | // Released under AGPL see LICENSE for more information 3 | // Developed by Soroush Dalili (@irsdl) 4 | // Released initially as open source by MDSec - https://www.mdsec.co.uk 5 | // Project link: https://github.com/mdsecresearch/BurpSuiteSharpener 6 | 7 | package com.mdsec.burp.sharpener.capabilities.pwnFox; 8 | 9 | import burp.api.montoya.core.HighlightColor; 10 | import burp.api.montoya.proxy.http.InterceptedRequest; 11 | import burp.api.montoya.proxy.http.ProxyRequestHandler; 12 | import burp.api.montoya.proxy.http.ProxyRequestReceivedAction; 13 | import burp.api.montoya.proxy.http.ProxyRequestToBeSentAction; 14 | import com.mdsec.burp.sharpener.SharpenerSharedParameters; 15 | 16 | public class PwnFoxProxyRequestHandler implements ProxyRequestHandler { 17 | SharpenerSharedParameters sharedParameters; 18 | 19 | public PwnFoxProxyRequestHandler(SharpenerSharedParameters sharedParameters){ 20 | this.sharedParameters = sharedParameters; 21 | } 22 | 23 | @Override 24 | public ProxyRequestReceivedAction handleRequestReceived(InterceptedRequest interceptedRequest) { 25 | var headerList = interceptedRequest.headers(); 26 | if (headerList != null) { 27 | boolean pwnFoxSupportCapability = sharedParameters.preferences.safeGetSetting("pwnFoxSupportCapability", false); 28 | if (pwnFoxSupportCapability) { 29 | for(var item : headerList){ 30 | if(item.name().equalsIgnoreCase("x-pwnfox-color")) { 31 | var pwnFoxColor = item.value(); 32 | if (!pwnFoxColor.isEmpty()) { 33 | interceptedRequest.annotations().setHighlightColor(HighlightColor.highlightColor(pwnFoxColor)); 34 | } 35 | return ProxyRequestReceivedAction.continueWith(interceptedRequest.withRemovedHeader("X-PwnFox-Color")); 36 | } 37 | } 38 | } 39 | } 40 | return ProxyRequestReceivedAction.continueWith(interceptedRequest); 41 | } 42 | 43 | @Override 44 | public ProxyRequestToBeSentAction handleRequestToBeSent(InterceptedRequest interceptedRequest) { 45 | return ProxyRequestToBeSentAction.continueWith(interceptedRequest); 46 | } 47 | 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/com/mdsec/burp/sharpener/uiControllers/mainTabs/MainTabsListeners.java: -------------------------------------------------------------------------------- 1 | // Burp Suite Extension Name: Sharpener 2 | // Released under AGPL see LICENSE for more information 3 | // Developed by Soroush Dalili (@irsdl) 4 | // Released initially as open source by MDSec - https://www.mdsec.co.uk 5 | // Project link: https://github.com/mdsecresearch/BurpSuiteSharpener 6 | 7 | package com.mdsec.burp.sharpener.uiControllers.mainTabs; 8 | 9 | import com.mdsec.burp.sharpener.SharpenerSharedParameters; 10 | 11 | import javax.swing.*; 12 | import java.awt.event.ContainerEvent; 13 | import java.awt.event.ContainerListener; 14 | 15 | public class MainTabsListeners implements ContainerListener { 16 | private final SharpenerSharedParameters sharedParameters; 17 | private boolean isResetInProgress = false; 18 | 19 | public MainTabsListeners(SharpenerSharedParameters sharedParameters) { 20 | this.sharedParameters = sharedParameters; 21 | addTabListener(sharedParameters.get_rootTabbedPaneUsingMontoya()); 22 | } 23 | 24 | public void addTabListener(JTabbedPane tabbedPane) { 25 | sharedParameters.printDebugMessage("addMainTabListener"); 26 | tabbedPane.addContainerListener(this); 27 | } 28 | 29 | public void removeTabListener(JTabbedPane tabbedPane) { 30 | sharedParameters.printDebugMessage("removeMainTabListener"); 31 | tabbedPane.removeContainerListener(this); 32 | } 33 | 34 | @Override 35 | public void componentAdded(ContainerEvent e) { 36 | if (e.getSource() instanceof JTabbedPane && !isResetInProgress) { 37 | setResetInProgress(true); 38 | new java.util.Timer().schedule( 39 | new java.util.TimerTask() { 40 | @Override 41 | public void run() { 42 | SwingUtilities.invokeLater(() -> { 43 | MainTabsStyleHandler.resetMainTabsStylesFromSettings(sharedParameters); 44 | setResetInProgress(false); 45 | }); 46 | } 47 | }, 48 | 2000 // 2 seconds-delay to ensure all has been settled! 49 | ); 50 | } 51 | 52 | } 53 | 54 | @Override 55 | public void componentRemoved(ContainerEvent e) { 56 | 57 | } 58 | 59 | public void setResetInProgress(boolean resetInProgress) { 60 | isResetInProgress = resetInProgress; 61 | } 62 | 63 | 64 | } 65 | -------------------------------------------------------------------------------- /src/main/java/com/irsdl/generic/MouseAdapterExtensionHandler.java: -------------------------------------------------------------------------------- 1 | // Released under AGPL see LICENSE for more information 2 | // Developed by Soroush Dalili (@irsdl) 3 | 4 | package com.irsdl.generic; 5 | 6 | import java.awt.event.MouseAdapter; 7 | import java.awt.event.MouseEvent; 8 | import java.util.function.Consumer; 9 | 10 | 11 | public class MouseAdapterExtensionHandler extends MouseAdapter { 12 | 13 | Consumer mouseEventConsumer = null; 14 | int mouseEventTrigger = -1; 15 | 16 | public MouseAdapterExtensionHandler(Consumer consumer) { 17 | this(consumer, MouseEvent.MOUSE_CLICKED); 18 | } 19 | 20 | public MouseAdapterExtensionHandler(Consumer consumer, int mouseEventTrigger) { 21 | this.mouseEventConsumer = consumer; 22 | this.mouseEventTrigger = mouseEventTrigger; 23 | 24 | } 25 | 26 | @Override 27 | public void mouseClicked(MouseEvent e) { 28 | if (mouseEventTrigger == MouseEvent.MOUSE_CLICKED) { 29 | this.mouseEventConsumer.accept(e); 30 | } 31 | } 32 | 33 | @Override 34 | public void mousePressed(MouseEvent e) { 35 | if (mouseEventTrigger == MouseEvent.MOUSE_PRESSED) { 36 | this.mouseEventConsumer.accept(e); 37 | } 38 | } 39 | 40 | @Override 41 | public void mouseReleased(MouseEvent e) { 42 | // we can use mousePressed or mouseReleased instead of mouseClicked to detect a click when tabs were wrapped 43 | // mouseReleased has been used to show the menu in the right place when tabs were wrapped 44 | if (mouseEventTrigger == MouseEvent.MOUSE_RELEASED) { 45 | this.mouseEventConsumer.accept(e); 46 | } 47 | } 48 | 49 | @Override 50 | public void mouseEntered(MouseEvent e) { 51 | if (mouseEventTrigger == MouseEvent.MOUSE_ENTERED) { 52 | this.mouseEventConsumer.accept(e); 53 | } 54 | } 55 | 56 | @Override 57 | public void mouseExited(MouseEvent e) { 58 | if (mouseEventTrigger == MouseEvent.MOUSE_EXITED) { 59 | this.mouseEventConsumer.accept(e); 60 | } 61 | } 62 | 63 | @Override 64 | public void mouseDragged(MouseEvent e) { 65 | if (mouseEventTrigger == MouseEvent.MOUSE_DRAGGED) { 66 | this.mouseEventConsumer.accept(e); 67 | } 68 | } 69 | 70 | @Override 71 | public void mouseMoved(MouseEvent e) { 72 | if (mouseEventTrigger == MouseEvent.MOUSE_MOVED) { 73 | this.mouseEventConsumer.accept(e); 74 | } 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /src/main/java/com/mdsec/burp/sharpener/uiControllers/subTabs/SubTabsCustomTabbedPaneUI.java: -------------------------------------------------------------------------------- 1 | // Burp Suite Extension Name: Sharpener 2 | // Released under AGPL see LICENSE for more information 3 | // Developed by Soroush Dalili (@irsdl) 4 | // Released initially as open source by MDSec - https://www.mdsec.co.uk 5 | // Project link: https://github.com/mdsecresearch/BurpSuiteSharpener 6 | 7 | package com.mdsec.burp.sharpener.uiControllers.subTabs; 8 | 9 | import com.formdev.flatlaf.ui.FlatTabbedPaneUI; 10 | import com.irsdl.burp.generic.BurpUITools; 11 | import com.mdsec.burp.sharpener.SharpenerSharedParameters; 12 | 13 | import java.awt.*; 14 | 15 | public class SubTabsCustomTabbedPaneUI { 16 | public static FlatTabbedPaneUI getUI(SharpenerSharedParameters sharedParameters, BurpUITools.MainTabs currentToolTab) { 17 | boolean isMinimizeTabSize = sharedParameters.preferences.safeGetBooleanSetting("minimizeSize_" + currentToolTab); 18 | boolean isFixedTabPosition = sharedParameters.preferences.safeGetBooleanSetting("isTabFixedPosition_" + currentToolTab); 19 | boolean isFiltered = sharedParameters.isFiltered(currentToolTab); 20 | return getUI(sharedParameters, currentToolTab, isFiltered, isMinimizeTabSize, isFixedTabPosition); 21 | } 22 | 23 | public static FlatTabbedPaneUI getUI(SharpenerSharedParameters sharedParameters, BurpUITools.MainTabs currentToolTab, 24 | boolean isFiltered, boolean isMinimizeTabSize, boolean isFixedTabPosition) { 25 | return new FlatTabbedPaneUI() { 26 | @Override 27 | protected int calculateTabWidth(int tabPlacement, int tabIndex, FontMetrics metrics) { 28 | if (isFiltered) { 29 | if (sharedParameters.allSubTabContainerHandlers.get(currentToolTab).stream() 30 | .filter(s -> !s.getVisible() && s.getTabIndex() == tabIndex).toArray().length > 0) { 31 | return 0; 32 | } 33 | } 34 | return super.calculateTabWidth(tabPlacement, tabIndex, metrics); 35 | } 36 | 37 | @Override 38 | protected int calculateTabHeight(int tabPlacement, int tabIndex, int fontHeight) { 39 | if (isMinimizeTabSize || this.tabInsets == null) { 40 | this.tabInsets = new Insets(1, 1, 1, 1); 41 | } 42 | return super.calculateTabHeight(tabPlacement, tabIndex, fontHeight); 43 | } 44 | 45 | @Override 46 | protected boolean shouldRotateTabRuns(int i) { 47 | return !isFixedTabPosition; 48 | } 49 | }; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- 1 | @rem 2 | @rem Copyright 2015 the original author or authors. 3 | @rem 4 | @rem Licensed under the Apache License, Version 2.0 (the "License"); 5 | @rem you may not use this file except in compliance with the License. 6 | @rem You may obtain a copy of the License at 7 | @rem 8 | @rem https://www.apache.org/licenses/LICENSE-2.0 9 | @rem 10 | @rem Unless required by applicable law or agreed to in writing, software 11 | @rem distributed under the License is distributed on an "AS IS" BASIS, 12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | @rem See the License for the specific language governing permissions and 14 | @rem limitations under the License. 15 | @rem 16 | 17 | @if "%DEBUG%" == "" @echo off 18 | @rem ########################################################################## 19 | @rem 20 | @rem Gradle startup script for Windows 21 | @rem 22 | @rem ########################################################################## 23 | 24 | @rem Set local scope for the variables with windows NT shell 25 | if "%OS%"=="Windows_NT" setlocal 26 | 27 | set DIRNAME=%~dp0 28 | if "%DIRNAME%" == "" set DIRNAME=. 29 | set APP_BASE_NAME=%~n0 30 | set APP_HOME=%DIRNAME% 31 | 32 | @rem Resolve any "." and ".." in APP_HOME to make it shorter. 33 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi 34 | 35 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 36 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" 37 | 38 | @rem Find java.exe 39 | if defined JAVA_HOME goto findJavaFromJavaHome 40 | 41 | set JAVA_EXE=java.exe 42 | %JAVA_EXE% -version >NUL 2>&1 43 | if "%ERRORLEVEL%" == "0" goto execute 44 | 45 | echo. 46 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 47 | echo. 48 | echo Please set the JAVA_HOME variable in your environment to match the 49 | echo location of your Java installation. 50 | 51 | goto fail 52 | 53 | :findJavaFromJavaHome 54 | set JAVA_HOME=%JAVA_HOME:"=% 55 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 56 | 57 | if exist "%JAVA_EXE%" goto execute 58 | 59 | echo. 60 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 61 | echo. 62 | echo Please set the JAVA_HOME variable in your environment to match the 63 | echo location of your Java installation. 64 | 65 | goto fail 66 | 67 | :execute 68 | @rem Setup the command line 69 | 70 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 71 | 72 | 73 | @rem Execute Gradle 74 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* 75 | 76 | :end 77 | @rem End local scope for the variables with windows NT shell 78 | if "%ERRORLEVEL%"=="0" goto mainEnd 79 | 80 | :fail 81 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 82 | rem the _cmd.exe /c_ return code! 83 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 84 | exit /b 1 85 | 86 | :mainEnd 87 | if "%OS%"=="Windows_NT" endlocal 88 | 89 | :omega 90 | -------------------------------------------------------------------------------- /src/main/java/com/mdsec/burp/sharpener/objects/TabFeaturesObject.java: -------------------------------------------------------------------------------- 1 | // Burp Suite Extension Name: Sharpener 2 | // Released under AGPL see LICENSE for more information 3 | // Developed by Soroush Dalili (@irsdl) 4 | // Released initially as open source by MDSec - https://www.mdsec.co.uk 5 | // Project link: https://github.com/mdsecresearch/BurpSuiteSharpener 6 | 7 | package com.mdsec.burp.sharpener.objects; 8 | 9 | import java.awt.*; 10 | import java.util.Arrays; 11 | 12 | public class TabFeaturesObject extends TabFeaturesObjectStyle { 13 | public int index = -1; 14 | private String title = ""; // we are trimming the titles since Sharpener 3.2 15 | private String tfoTitle = ""; // we use this for comparison as it contains trimmed and lowercase values 16 | 17 | //public LinkedHashSet titleHistory = new LinkedHashSet<>(); // https://github.com/CoreyD97/BurpExtenderUtilities/issues/7 we still can't keep the order using LinkedHashSet 18 | private String[] titleHistory = new String[]{}; 19 | 20 | public TabFeaturesObject(){ 21 | super(); 22 | } 23 | 24 | public TabFeaturesObject(int index, String title, String[] titleHistory, String fontName, float fontSize, boolean isBold, boolean isItalic, boolean isCloseButtonVisible, Color colorCode, String iconString, int iconSize) { 25 | super("", fontName, fontSize, isBold, isItalic, isCloseButtonVisible, colorCode, iconString, iconSize); 26 | this.index = index; 27 | this.setTitle(title); 28 | this.setTitleHistory(titleHistory); 29 | } 30 | 31 | @Override 32 | public boolean equals(Object o) { 33 | boolean result = false; 34 | if (o instanceof TabFeaturesObject temp) { 35 | if (temp.getTfoTitle().equals(getTfoTitle()) && temp.getStyle().equals(getStyle())) { 36 | result = true; 37 | } 38 | } 39 | return result; 40 | } 41 | 42 | public TabFeaturesObjectStyle getStyle() { 43 | return new TabFeaturesObjectStyle("", fontName, fontSize, isBold, isItalic, isCloseButtonVisible, getColor(), get_IconResourceString(), iconSize); 44 | } 45 | 46 | public String getTitle() { 47 | return title.trim(); 48 | } 49 | 50 | public void setTitle(String title) { 51 | this.title = title.trim(); 52 | setTfoTitle(title); 53 | } 54 | 55 | public String[] getTitleHistory() { 56 | return Arrays.stream(titleHistory).filter(s -> (s != null && !s.isBlank())) 57 | .map(String::trim) 58 | .toArray(String[]::new); 59 | } 60 | 61 | public void setTitleHistory(String[] titleHistory) { 62 | this.titleHistory = Arrays.stream(titleHistory).filter(s -> (s != null && !s.isBlank())) 63 | .map(String::trim) 64 | .toArray(String[]::new); 65 | } 66 | 67 | public String getTfoTitle() { 68 | return tfoTitle.toLowerCase().trim(); 69 | } 70 | 71 | private void setTfoTitle(String tfoTitle) { 72 | this.tfoTitle = tfoTitle.toLowerCase().trim(); 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /src/main/java/com/irsdl/objects/StandardSettings.java: -------------------------------------------------------------------------------- 1 | // Released under AGPL see LICENSE for more information 2 | // Developed by Soroush Dalili (@irsdl) 3 | 4 | package com.irsdl.objects; 5 | 6 | import com.irsdl.burp.generic.BurpExtensionSharedParameters; 7 | import com.mdsec.burp.sharpener.SharpenerSharedParameters; 8 | 9 | import java.util.Collection; 10 | 11 | public abstract class StandardSettings { 12 | private Collection _preferenceObjectCollection; 13 | public SharpenerSharedParameters sharedParameters; 14 | 15 | protected StandardSettings(SharpenerSharedParameters sharedParameters) { 16 | boolean isError = false; 17 | this.sharedParameters = sharedParameters; 18 | try{ 19 | init(); 20 | this._preferenceObjectCollection = definePreferenceObjectCollection(); 21 | registerSettings(); 22 | loadSettings(); 23 | }catch(Exception e){ 24 | isError = true; 25 | sharedParameters.printException(e); 26 | } 27 | 28 | if(isError){ 29 | sharedParameters.printlnError("A fatal error has occurred in loading the settings. The extension is going to be unloaded."); 30 | sharedParameters.montoyaApi.extension().unload(); 31 | } 32 | } 33 | 34 | public abstract void init(); 35 | 36 | public abstract Collection definePreferenceObjectCollection(); 37 | 38 | public abstract void loadSettings(); 39 | 40 | public abstract void unloadSettings(); 41 | 42 | public Collection get_preferenceObjectCollection() { 43 | return _preferenceObjectCollection; 44 | } 45 | 46 | private void registerSettings() { 47 | if (_preferenceObjectCollection == null) 48 | return; 49 | 50 | for (PreferenceObject preferenceObject : _preferenceObjectCollection) { 51 | try { 52 | sharedParameters.preferences.registerSetting(preferenceObject.settingName, preferenceObject.type, preferenceObject.defaultValue, preferenceObject.visibility); 53 | } catch (Exception e) { 54 | //already registered setting 55 | sharedParameters.printDebugMessage(e.getMessage()); 56 | if (sharedParameters.debugLevel == BurpExtensionSharedParameters.DebugLevels.VeryVerbose.getValue()) 57 | e.printStackTrace(sharedParameters.stderr); 58 | } 59 | } 60 | } 61 | 62 | public void resetSettings() { 63 | if (_preferenceObjectCollection == null) 64 | return; 65 | 66 | for (PreferenceObject preferenceObject : _preferenceObjectCollection) { 67 | try { 68 | // sharedParameters.preferences.resetSetting(preferenceObject.settingName); // there is a bug in the library, so we can't use this for now 69 | sharedParameters.preferences.safeSetSetting(preferenceObject.settingName, null); 70 | } catch (Exception e) { 71 | sharedParameters.printDebugMessage(e.getMessage()); 72 | if (sharedParameters.debugLevel == BurpExtensionSharedParameters.DebugLevels.VeryVerbose.getValue()) 73 | e.printStackTrace(sharedParameters.stderr); 74 | } 75 | } 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /src/main/java/com/irsdl/burp/generic/ExtendedPreferences.java: -------------------------------------------------------------------------------- 1 | // Released under AGPL see LICENSE for more information 2 | // Developed by Soroush Dalili (@irsdl) 3 | 4 | package com.irsdl.burp.generic; 5 | 6 | import burp.api.montoya.MontoyaApi; 7 | import com.coreyd97.BurpExtenderUtilities.IGsonProvider; 8 | import com.coreyd97.BurpExtenderUtilities.Preferences; 9 | 10 | public class ExtendedPreferences extends Preferences { 11 | BurpExtensionSharedParameters sharedParameters; 12 | 13 | public ExtendedPreferences(MontoyaApi montoyaApi, IGsonProvider gsonProvider) { 14 | super(montoyaApi, gsonProvider); 15 | } 16 | 17 | public void safeSetSetting(String settingName, Object value) { 18 | boolean isSaved = false; 19 | int tryTimes = 0; 20 | while (!isSaved && tryTimes < 10) { 21 | tryTimes++; 22 | 23 | if (sharedParameters != null) { 24 | sharedParameters.printDebugMessage("Try number: " + tryTimes, BurpExtensionSharedParameters.DebugLevels.VerboseAndPrefsRW.getValue()); 25 | sharedParameters.printDebugMessage("Trying to save " + settingName, BurpExtensionSharedParameters.DebugLevels.VerboseAndPrefsRW.getValue()); 26 | } 27 | 28 | try { 29 | setSetting(settingName, value); 30 | 31 | if (getSetting(settingName).equals(value)) { 32 | isSaved = true; 33 | if (sharedParameters != null) { 34 | sharedParameters.printDebugMessage("This was saved successfully: " + settingName, BurpExtensionSharedParameters.DebugLevels.VerboseAndPrefsRW.getValue()); 35 | } 36 | } 37 | } catch (Exception e) { 38 | if (sharedParameters != null) { 39 | sharedParameters.printDebugMessage("Save error: " + e.getMessage(), BurpExtensionSharedParameters.DebugLevels.VerboseAndPrefsRW.getValue()); 40 | if (sharedParameters.debugLevel == BurpExtensionSharedParameters.DebugLevels.VeryVerbose.getValue()) 41 | e.printStackTrace(sharedParameters.stderr); 42 | } 43 | } 44 | 45 | } 46 | } 47 | 48 | public T safeGetSetting(String settingName, T defaultValue) { 49 | var result = defaultValue; 50 | 51 | try { 52 | if (sharedParameters != null) { 53 | sharedParameters.printDebugMessage("Trying to get value of " + settingName + " from settings", BurpExtensionSharedParameters.DebugLevels.VerboseAndPrefsRW.getValue()); 54 | } 55 | 56 | result = getSetting(settingName); 57 | } catch (Exception e) { 58 | if (sharedParameters != null) { 59 | sharedParameters.printDebugMessage("Get error: " + e.getMessage()); 60 | if (sharedParameters.debugLevel == BurpExtensionSharedParameters.DebugLevels.VeryVerbose.getValue()) 61 | e.printStackTrace(sharedParameters.stderr); 62 | } 63 | } 64 | return result; 65 | } 66 | 67 | public Object safeGetSetting(String settingName) { 68 | return safeGetSetting(settingName, null); 69 | } 70 | 71 | public String safeGetStringSetting(String settingName) { 72 | return safeGetSetting(settingName, ""); 73 | } 74 | 75 | public boolean safeGetBooleanSetting(String settingName) { 76 | return safeGetSetting(settingName, false); 77 | } 78 | 79 | public int safeGetIntSetting(String settingName) { 80 | return safeGetSetting(settingName, -1); 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /src/main/java/com/mdsec/burp/sharpener/uiControllers/mainTabs/MainTabsSettings.java: -------------------------------------------------------------------------------- 1 | // Burp Suite Extension Name: Sharpener 2 | // Released under AGPL see LICENSE for more information 3 | // Developed by Soroush Dalili (@irsdl) 4 | // Released initially as open source by MDSec - https://www.mdsec.co.uk 5 | // Project link: https://github.com/mdsecresearch/BurpSuiteSharpener 6 | 7 | package com.mdsec.burp.sharpener.uiControllers.mainTabs; 8 | 9 | import com.coreyd97.BurpExtenderUtilities.Preferences; 10 | import com.irsdl.burp.generic.BurpUITools; 11 | import com.mdsec.burp.sharpener.SharpenerSharedParameters; 12 | import com.irsdl.objects.PreferenceObject; 13 | import com.irsdl.objects.StandardSettings; 14 | 15 | import java.util.ArrayList; 16 | import java.util.Collection; 17 | 18 | public class MainTabsSettings extends StandardSettings { 19 | private MainTabsListeners mainTabsListeners; 20 | public MainTabsSettings(SharpenerSharedParameters sharedParameters) { 21 | super(sharedParameters); 22 | sharedParameters.printDebugMessage("ToolsTabSettings"); 23 | } 24 | 25 | @Override 26 | public void init() { 27 | 28 | } 29 | 30 | @Override 31 | public Collection definePreferenceObjectCollection() { 32 | Collection preferenceObjectCollection = new ArrayList<>(); 33 | 34 | for (BurpUITools.MainTabs tool : BurpUITools.MainTabs.values()) { 35 | PreferenceObject preferenceObject_isUnique_Tab = new PreferenceObject("isUnique_" + tool, Boolean.TYPE, false, Preferences.Visibility.GLOBAL); 36 | preferenceObjectCollection.add(preferenceObject_isUnique_Tab); 37 | } 38 | 39 | PreferenceObject preferenceObject_isToolTabPaneScrollable = new PreferenceObject("isToolTabPaneScrollable", Boolean.TYPE, false, Preferences.Visibility.GLOBAL); 40 | preferenceObjectCollection.add(preferenceObject_isToolTabPaneScrollable); 41 | 42 | PreferenceObject preferenceObject_ToolsThemeName = new PreferenceObject("ToolsThemeName", String.class, "@irsdl", Preferences.Visibility.GLOBAL); 43 | preferenceObjectCollection.add(preferenceObject_ToolsThemeName); 44 | 45 | PreferenceObject preferenceObject_ToolsIconSize = new PreferenceObject("ToolsIconSize", String.class, "16", Preferences.Visibility.GLOBAL); 46 | preferenceObjectCollection.add(preferenceObject_ToolsIconSize); 47 | 48 | PreferenceObject preferenceObject_ToolsThemeCustomPath = new PreferenceObject("ToolsThemeCustomPath", String.class, "", Preferences.Visibility.GLOBAL); 49 | preferenceObjectCollection.add(preferenceObject_ToolsThemeCustomPath); 50 | 51 | 52 | return preferenceObjectCollection; 53 | } 54 | 55 | @Override 56 | public void loadSettings() { 57 | sharedParameters.printDebugMessage("loadSettings"); 58 | MainTabsStyleHandler.resetMainTabsStylesFromSettings(sharedParameters); 59 | // Adding listeners to Main Tool Tabs 60 | if (sharedParameters.get_rootTabbedPaneUsingMontoya() != null) { 61 | sharedParameters.printDebugMessage("Adding listeners to main tools' tabs"); 62 | mainTabsListeners = new MainTabsListeners(sharedParameters); 63 | } 64 | } 65 | 66 | @Override 67 | public void unloadSettings() { 68 | // remove listener for main tools' tabs 69 | if (mainTabsListeners != null && sharedParameters.get_isUILoaded()) { 70 | mainTabsListeners.removeTabListener(sharedParameters.get_rootTabbedPaneUsingMontoya()); 71 | } 72 | 73 | sharedParameters.printDebugMessage("undo the Burp main tool tabs"); 74 | // undo the Burp main tool tabs 75 | MainTabsStyleHandler.unsetAllMainTabsStyles(sharedParameters); 76 | 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /src/main/java/com/mdsec/burp/sharpener/objects/TabFeaturesObjectStyle.java: -------------------------------------------------------------------------------- 1 | // Burp Suite Extension Name: Sharpener 2 | // Released under AGPL see LICENSE for more information 3 | // Developed by Soroush Dalili (@irsdl) 4 | // Released initially as open source by MDSec - https://www.mdsec.co.uk 5 | // Project link: https://github.com/mdsecresearch/BurpSuiteSharpener 6 | 7 | package com.mdsec.burp.sharpener.objects; 8 | 9 | import java.awt.*; 10 | import java.io.Serializable; 11 | 12 | public class TabFeaturesObjectStyle implements Serializable { 13 | public String name = ""; 14 | public String fontName = ""; 15 | public float fontSize = 0; 16 | public boolean isBold = false; 17 | public boolean isItalic = false; 18 | public boolean isCloseButtonVisible = false; 19 | private String iconResourceString = ""; 20 | public int iconSize = 0; 21 | public String colorCode = ""; 22 | 23 | public TabFeaturesObjectStyle(){ 24 | 25 | } 26 | 27 | public TabFeaturesObjectStyle(String styleName, String fontName, float fontSize, boolean isBold, boolean isItalic, boolean isCloseButtonVisible, Color colorCode, String iconResourceString, int iconSize) { 28 | this.name = styleName; 29 | this.fontName = fontName; 30 | this.fontSize = fontSize; 31 | this.isBold = isBold; 32 | this.isItalic = isItalic; 33 | this.isCloseButtonVisible = isCloseButtonVisible; 34 | this.iconResourceString = iconResourceString; 35 | this.iconSize = iconSize; 36 | setColor(colorCode); 37 | } 38 | 39 | public String get_IconResourceString() { 40 | if (iconResourceString == null) 41 | iconResourceString = ""; 42 | return iconResourceString.replace(":", "").replace("\\", "/").replaceAll("/+", "/").replaceAll("\\.\\s*+/", "./").replaceAll("/\\s*\\.+", "/."); 43 | } 44 | 45 | public Color getColor() { 46 | Color color; 47 | try { 48 | color = Color.decode(this.colorCode); 49 | } catch (Exception e1) { 50 | // old system 51 | try { 52 | color = new Color(Integer.parseInt(this.colorCode), true); 53 | } catch (Exception e2) { 54 | color = Color.BLACK; 55 | } 56 | } 57 | return color; 58 | } 59 | 60 | public void setColor(Color _colorObj) { 61 | this.colorCode = String.format("#%06x", _colorObj.getRGB() & 0xFFFFFF); // new system! 62 | // this.colorCode = Integer.toString(_colorObj.getRGB()); // old easy approach! 63 | } 64 | 65 | @Override 66 | public boolean equals(Object o) { 67 | boolean result = false; 68 | if (o instanceof TabFeaturesObjectStyle temp) { 69 | if (temp.fontName == fontName && temp.fontSize == fontSize && Boolean.compare(temp.isBold, isBold) == 0 && 70 | Boolean.compare(temp.isItalic, isItalic) == 0 && temp.iconResourceString.equals(iconResourceString) && temp.iconSize == iconSize && 71 | Boolean.compare(temp.isCloseButtonVisible, isCloseButtonVisible) == 0 && temp.colorCode.equals(colorCode)) { 72 | result = true; 73 | } 74 | } 75 | return result; 76 | } 77 | 78 | public boolean equalsIgnoreColor(Object o) { 79 | boolean result = false; 80 | if (o instanceof TabFeaturesObjectStyle temp) { 81 | if (temp.fontName.equals(fontName) && temp.fontSize == fontSize && Boolean.compare(temp.isBold, isBold) == 0 && 82 | Boolean.compare(temp.isItalic, isItalic) == 0 && temp.iconResourceString.equals(iconResourceString) && temp.iconSize == iconSize && 83 | Boolean.compare(temp.isCloseButtonVisible, isCloseButtonVisible) == 0) { 84 | result = true; 85 | } 86 | } 87 | return result; 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /src/main/java/com/irsdl/generic/Encoding.java: -------------------------------------------------------------------------------- 1 | // Released under AGPL see LICENSE for more information 2 | // Developed by Soroush Dalili (@irsdl) 3 | 4 | package com.irsdl.generic; 5 | 6 | public class Encoding { 7 | private static final char[] hexChar = { 8 | '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' 9 | }; 10 | 11 | public static String URLEncodeAll(String input) { 12 | return URLEncode(input, ""); 13 | } 14 | 15 | public static String URLEncodeSpecial(String input, String specialChars) { 16 | if (specialChars.isEmpty()) specialChars = "!#$&'()*+,/:;=?@[] \"%-.<>\\^_`{|}~"; 17 | return URLEncode(input, specialChars); 18 | } 19 | 20 | public static String URLEncodeSpecial(String input) { 21 | return URLEncodeSpecial(input, ""); 22 | } 23 | 24 | public static String URLEncode(String input, String specialChars) { 25 | // idea from https://codereview.stackexchange.com/questions/102591/efficient-url-escape-percent-encoding 26 | if (input == null || input.isEmpty()) { 27 | return input; 28 | } 29 | StringBuilder result = new StringBuilder(input); 30 | for (int i = input.length() - 1; i >= 0; i--) { 31 | if (specialChars.isEmpty()) { 32 | result.replace(i, i + 1, "%" + String.format("%2s", Integer.toHexString(input.charAt(i))).replace(' ', '0').toUpperCase()); 33 | } else if (specialChars.indexOf(input.charAt(i)) != -1) { 34 | result.replace(i, i + 1, "%" + String.format("%2s", Integer.toHexString(input.charAt(i)).replace(' ', '0').toUpperCase())); 35 | } 36 | } 37 | return result.toString(); 38 | } 39 | 40 | public static String URLEncodeAllBytes(byte[] input) { 41 | // idea from https://codereview.stackexchange.com/questions/102591/efficient-url-escape-percent-encoding 42 | if (input == null) { 43 | return ""; 44 | } 45 | StringBuilder result = new StringBuilder(); 46 | for (byte b : input) { 47 | result.append("%" + String.format("%02x", b).toUpperCase()); 48 | } 49 | return result.toString(); 50 | } 51 | 52 | // https://docs.oracle.com/javase/tutorial/i18n/text/examples/UnicodeFormatter.java 53 | static public String byteToHex(byte b) { 54 | // Returns hex String representation of byte b 55 | char[] array = {hexChar[(b >> 4) & 0x0f], hexChar[b & 0x0f]}; 56 | return new String(array); 57 | } 58 | 59 | // https://docs.oracle.com/javase/tutorial/i18n/text/examples/UnicodeFormatter.java 60 | static public String charToHex(char c) { 61 | // Returns hex String representation of char c 62 | byte hi = (byte) (c >>> 8); 63 | byte lo = (byte) (c & 0xff); 64 | return byteToHex(hi) + byteToHex(lo); 65 | } 66 | 67 | 68 | // http://www.xinotes.net/notes/note/812/ 69 | static public String unicodeEscape(String s, boolean encodeAll, boolean isURL) { 70 | StringBuilder sb = new StringBuilder(); 71 | String escapePrefix = "\\u"; 72 | if (isURL) escapePrefix = "%u"; 73 | for (int i = 0; i < s.length(); i++) { 74 | char c = s.charAt(i); 75 | if ((c >> 7) > 0 || encodeAll) { 76 | sb.append(escapePrefix); 77 | sb.append(hexChar[(c >> 12) & 0xF]); // append the hex character for the left-most 4-bits 78 | sb.append(hexChar[(c >> 8) & 0xF]); // hex for the second group of 4-bits from the left 79 | sb.append(hexChar[(c >> 4) & 0xF]); // hex for the third group 80 | sb.append(hexChar[c & 0xF]); // hex for the last group, e.g., the right most 4-bits 81 | } else { 82 | sb.append(c); 83 | } 84 | } 85 | return sb.toString(); 86 | } 87 | 88 | 89 | } 90 | -------------------------------------------------------------------------------- /src/main/java/com/mdsec/burp/sharpener/SharpenerGeneralSettings.java: -------------------------------------------------------------------------------- 1 | // Burp Suite Extension Name: Sharpener 2 | // Released under AGPL see LICENSE for more information 3 | // Developed by Soroush Dalili (@irsdl) 4 | // Released initially as open source by MDSec - https://www.mdsec.co.uk 5 | // Project link: https://github.com/mdsecresearch/BurpSuiteSharpener 6 | 7 | package com.mdsec.burp.sharpener; 8 | 9 | import com.coreyd97.BurpExtenderUtilities.Preferences; 10 | import com.irsdl.burp.generic.BurpUITools; 11 | import com.mdsec.burp.sharpener.capabilities.pwnFox.PwnFoxSettings; 12 | import com.mdsec.burp.sharpener.uiControllers.burpFrame.BurpFrameSettings; 13 | import com.mdsec.burp.sharpener.uiControllers.mainTabs.MainTabsSettings; 14 | import com.mdsec.burp.sharpener.uiControllers.subTabs.SubTabsSettings; 15 | import com.mdsec.burp.sharpener.uiSelf.topMenu.TopMenuSettings; 16 | import com.irsdl.objects.PreferenceObject; 17 | import com.irsdl.objects.StandardSettings; 18 | 19 | import java.util.ArrayList; 20 | import java.util.Collection; 21 | 22 | public class SharpenerGeneralSettings extends StandardSettings { 23 | public SubTabsSettings subTabsSettings; 24 | public MainTabsSettings mainTabsSettings; 25 | public BurpFrameSettings burpFrameSettings; 26 | public TopMenuSettings topMenuSettings; 27 | public PwnFoxSettings pwnFoxSettings; 28 | 29 | public SharpenerGeneralSettings(SharpenerSharedParameters sharedParameters) { 30 | super(sharedParameters); 31 | } 32 | 33 | @Override 34 | public void init() { 35 | 36 | } 37 | 38 | @Override 39 | public Collection definePreferenceObjectCollection() { 40 | Collection preferenceObjectCollection = new ArrayList<>(); 41 | PreferenceObject preferenceObject; 42 | try { 43 | preferenceObject = new PreferenceObject("checkForUpdate", boolean.class, false, Preferences.Visibility.GLOBAL); 44 | preferenceObjectCollection.add(preferenceObject); 45 | } catch (Exception e) { 46 | //already registered setting 47 | sharedParameters.printDebugMessage(e.getMessage()); 48 | } 49 | 50 | return preferenceObjectCollection; 51 | 52 | 53 | } 54 | 55 | @Override 56 | public void loadSettings() { 57 | // reattaching related tools before working on them! 58 | if (BurpUITools.reattachTools(sharedParameters.subTabSupportedTabs, sharedParameters.get_mainMenuBarUsingMontoya())) { 59 | try { 60 | // to make sure UI has been updated 61 | sharedParameters.printlnOutput("Detached windows were found. We need to wait for a few seconds after reattaching the tabs."); 62 | Thread.sleep(3000); 63 | } catch (Exception e) { 64 | sharedParameters.printDebugMessage("Error in SharpenerGeneralSettings.loadSettings(): " + e.getMessage()); 65 | } 66 | } 67 | 68 | topMenuSettings = new TopMenuSettings(sharedParameters); 69 | burpFrameSettings = new BurpFrameSettings(sharedParameters); 70 | mainTabsSettings = new MainTabsSettings(sharedParameters); 71 | subTabsSettings = new SubTabsSettings(sharedParameters); 72 | pwnFoxSettings = new PwnFoxSettings(sharedParameters); 73 | 74 | if (sharedParameters.preferences.safeGetSetting("checkForUpdate", false)) { 75 | SharpenerMainClass sharpenerBurpExtension = (SharpenerMainClass) sharedParameters.burpExtender; 76 | sharpenerBurpExtension.checkForUpdate(); 77 | } 78 | } 79 | 80 | @Override 81 | public void unloadSettings() { 82 | if(burpFrameSettings!=null){ 83 | burpFrameSettings.unloadSettings(); 84 | } 85 | 86 | if(mainTabsSettings != null){ 87 | mainTabsSettings.unloadSettings(); 88 | } 89 | 90 | if(subTabsSettings != null){ 91 | subTabsSettings.unloadSettings(); 92 | } 93 | 94 | if(pwnFoxSettings != null){ 95 | pwnFoxSettings.unloadSettings(); 96 | } 97 | 98 | if(topMenuSettings != null){ 99 | topMenuSettings.unloadSettings(); 100 | } 101 | } 102 | } 103 | -------------------------------------------------------------------------------- /src/main/java/com/irsdl/burp/generic/BurpTitleAndIcon.java: -------------------------------------------------------------------------------- 1 | // Released under AGPL see LICENSE for more information 2 | // Developed by Soroush Dalili (@irsdl) 3 | 4 | package com.irsdl.burp.generic; 5 | 6 | import com.irsdl.generic.ImageHelper; 7 | 8 | import javax.swing.*; 9 | import java.awt.*; 10 | import java.awt.event.WindowEvent; 11 | import java.awt.event.WindowFocusListener; 12 | import java.util.ArrayList; 13 | 14 | public class BurpTitleAndIcon { 15 | public static void resetTitle(BurpExtensionSharedParameters sharedParameters) { 16 | setTitle(sharedParameters, sharedParameters.get_originalBurpTitle()); 17 | } 18 | 19 | public static void resetIcon(BurpExtensionSharedParameters sharedParameters) { 20 | setIcon(sharedParameters, sharedParameters.get_originalBurpIcon()); 21 | removeMainFrameWindowFocusListener(sharedParameters); 22 | } 23 | 24 | public static void changeTitleAndIcon(BurpExtensionSharedParameters sharedParameters, String title, Image img) { 25 | setTitle(sharedParameters, title); 26 | setIcon(sharedParameters, img); 27 | } 28 | 29 | public static void setTitle(BurpExtensionSharedParameters sharedParameters, String title) { 30 | SwingUtilities.invokeLater(() -> { 31 | sharedParameters.get_mainFrameUsingMontoya().setTitle(title); 32 | sharedParameters.printDebugMessage("Burp Suite title was changed to: " + title); 33 | }); 34 | } 35 | 36 | private static void setIcon(BurpExtensionSharedParameters sharedParameters, Image img) { 37 | if (img != null) { 38 | SwingUtilities.invokeLater(() -> { 39 | 40 | java.util.List iconList = new ArrayList<>(); 41 | iconList.add(img); 42 | for (Window window : Window.getWindows()) { 43 | window.setIconImages(iconList); 44 | } 45 | /* another way? 46 | for (Frame frame : Frame.getFrames()) { 47 | frame.setIconImages(iconList); 48 | } 49 | sharedParameters.get_mainFrame().setIconImage(img); 50 | */ 51 | sharedParameters.printDebugMessage("Burp Suite icon has been updated"); 52 | 53 | }); 54 | } 55 | } 56 | 57 | private static void removeMainFrameWindowFocusListener(BurpExtensionSharedParameters sharedParameters) { 58 | if (sharedParameters.addedIconListener) { 59 | sharedParameters.addedIconListener = false; 60 | int listenerCount = sharedParameters.get_mainFrameUsingMontoya().getWindowFocusListeners().length; 61 | if (listenerCount > 0) { 62 | // We assume that the last one is ours! 63 | sharedParameters.get_mainFrameUsingMontoya().removeWindowFocusListener(sharedParameters.get_mainFrameUsingMontoya().getWindowFocusListeners()[listenerCount - 1]); 64 | } 65 | } 66 | } 67 | 68 | public static void setIcon(BurpExtensionSharedParameters sharedParameters, String imgPath, int iconSize, boolean isResource) { 69 | Image loadedImg; 70 | if (isResource) { 71 | loadedImg = ImageHelper.scaleImageToWidth(ImageHelper.loadImageResource(sharedParameters.extensionClass, imgPath), iconSize); 72 | } else { 73 | loadedImg = ImageHelper.scaleImageToWidth(ImageHelper.loadImageFile(imgPath), iconSize); 74 | } 75 | 76 | if (loadedImg != null) { 77 | setIcon(sharedParameters, loadedImg); 78 | 79 | if (sharedParameters.addedIconListener) { 80 | removeMainFrameWindowFocusListener(sharedParameters); 81 | } 82 | 83 | WindowFocusListener mainFrameWindowFocusListener = new WindowFocusListener() { 84 | 85 | @Override 86 | public void windowGainedFocus(WindowEvent e) { 87 | setIcon(sharedParameters, loadedImg); 88 | } 89 | 90 | @Override 91 | public void windowLostFocus(WindowEvent e) { 92 | setIcon(sharedParameters, loadedImg); 93 | } 94 | }; 95 | 96 | sharedParameters.get_mainFrameUsingMontoya().addWindowFocusListener(mainFrameWindowFocusListener); 97 | sharedParameters.addedIconListener = true; 98 | 99 | } else { 100 | sharedParameters.printlnError("Image could not be loaded to be used as the Burp Suite icon: " + imgPath); 101 | } 102 | } 103 | } 104 | -------------------------------------------------------------------------------- /src/main/java/com/irsdl/generic/uiObjFinder/UIWalker.java: -------------------------------------------------------------------------------- 1 | // Released under AGPL see LICENSE for more information 2 | // Developed by Soroush Dalili (@irsdl) 3 | 4 | package com.irsdl.generic.uiObjFinder; 5 | 6 | import javax.swing.*; 7 | import java.awt.*; 8 | 9 | public class UIWalker { 10 | public static JComponent GetCurrentJComponent(Component rootUIObject) { 11 | JComponent rootUIJComponent = null; 12 | if (rootUIObject instanceof JComponent) { 13 | rootUIJComponent = (JComponent) rootUIObject; 14 | } else if (rootUIObject.getComponentAt(0, 0) instanceof JComponent) { 15 | rootUIJComponent = (JComponent) rootUIObject.getComponentAt(0, 0); 16 | } 17 | return rootUIJComponent; 18 | } 19 | 20 | public static Component FindUIObjectInSubComponents(Component rootUIObject, int maxDepth, UiSpecObject uiSpecObject) { 21 | Component foundObject = null; 22 | JComponent rootUIJComponent = GetCurrentJComponent(rootUIObject); 23 | 24 | if (rootUIJComponent != null) { 25 | if (uiSpecObject.isCompatible(rootUIJComponent)) { 26 | foundObject = rootUIJComponent; 27 | } else { 28 | foundObject = FindUIObjectInSubComponents(rootUIJComponent, maxDepth, 0, uiSpecObject); 29 | } 30 | } 31 | 32 | return foundObject; 33 | } 34 | 35 | private static Component FindUIObjectInSubComponents(JComponent rootUIJComponent, int maxDepth, int currentDepth, UiSpecObject uiSpecObject) { 36 | Component foundObject = null; 37 | for (Component subComponent : rootUIJComponent.getComponents()) { 38 | if (uiSpecObject.isCompatible(subComponent)) { 39 | foundObject = subComponent; 40 | break; 41 | } else if (currentDepth < maxDepth && subComponent instanceof JComponent) { 42 | foundObject = FindUIObjectInSubComponents((JComponent) subComponent, maxDepth, currentDepth + 1, uiSpecObject); 43 | if (foundObject != null) 44 | break; 45 | } 46 | } 47 | return foundObject; 48 | } 49 | 50 | public static Component FindUIObjectInParentComponents(Component rootUIObject, int maxDepth, UiSpecObject uiSpecObject) { 51 | Component foundObject = null; 52 | JComponent rootUIJComponent = GetCurrentJComponent(rootUIObject); 53 | 54 | if (rootUIJComponent != null) { 55 | if (uiSpecObject.isCompatible(rootUIJComponent)) { 56 | foundObject = rootUIJComponent; 57 | } else { 58 | foundObject = FindUIObjectInParentComponents(rootUIJComponent, maxDepth, 0, uiSpecObject); 59 | } 60 | } 61 | 62 | return foundObject; 63 | } 64 | 65 | private static Component FindUIObjectInParentComponents(JComponent rootUIJComponent, int maxDepth, int currentDepth, UiSpecObject uiSpecObject) { 66 | Component foundObject = null; 67 | if (rootUIJComponent.getParent() instanceof JComponent parentComponent) { 68 | if (uiSpecObject.isCompatible(parentComponent)) { 69 | foundObject = parentComponent; 70 | } else if (currentDepth < maxDepth && parentComponent instanceof JComponent) { 71 | foundObject = FindUIObjectInParentComponents(parentComponent, maxDepth, currentDepth + 1, uiSpecObject); 72 | } 73 | } 74 | return foundObject; 75 | } 76 | 77 | public static Component FindUIObjectInNeighbourComponents(Component rootUIObject, UiSpecObject uiSpecObject) { 78 | Component foundObject = null; 79 | JComponent rootUIJComponent = GetCurrentJComponent(rootUIObject); 80 | 81 | if (rootUIJComponent != null) { 82 | if (uiSpecObject.isCompatible(rootUIJComponent)) { 83 | foundObject = rootUIJComponent; 84 | } else { 85 | foundObject = FindUIObjectInNeighbourComponents(rootUIJComponent, uiSpecObject); 86 | } 87 | } 88 | 89 | return foundObject; 90 | } 91 | 92 | private static Component FindUIObjectInNeighbourComponents(JComponent rootUIJComponent, UiSpecObject uiSpecObject) { 93 | Component foundObject = null; 94 | if (rootUIJComponent.getParent() instanceof JComponent parentComponent) { 95 | foundObject = FindUIObjectInSubComponents(parentComponent, 1, uiSpecObject); 96 | } 97 | return foundObject; 98 | } 99 | 100 | public static Component FindUIObjectInComponents(Component[] arrayOfComponents, UiSpecObject uiSpecObject) { 101 | Component foundObject = null; 102 | for(Component currentComponent:arrayOfComponents){ 103 | if (uiSpecObject.isCompatible(currentComponent)) { 104 | foundObject = currentComponent; 105 | break; 106 | } 107 | } 108 | return foundObject; 109 | } 110 | 111 | } 112 | -------------------------------------------------------------------------------- /src/main/java/com/irsdl/generic/ImageHelper.java: -------------------------------------------------------------------------------- 1 | // Released under AGPL see LICENSE for more information 2 | // Developed by Soroush Dalili (@irsdl) 3 | 4 | package com.irsdl.generic; 5 | 6 | import javax.swing.*; 7 | import java.awt.*; 8 | import java.awt.datatransfer.DataFlavor; 9 | import java.awt.datatransfer.Transferable; 10 | import java.awt.datatransfer.UnsupportedFlavorException; 11 | import java.awt.image.BufferedImage; 12 | import java.io.File; 13 | import java.io.IOException; 14 | import java.net.URL; 15 | 16 | import static org.apache.commons.lang3.exception.ExceptionUtils.getStackTrace; 17 | 18 | public class ImageHelper { 19 | public static Image scaleImageToWidth(BufferedImage image, int width) { 20 | if (image == null) 21 | return null; 22 | 23 | int height = (int) (Math.floor((image.getHeight() * width) / (double) image.getWidth())); 24 | if (image.getWidth() > width) { 25 | return image.getScaledInstance(width, height, Image.SCALE_AREA_AVERAGING); 26 | } else { 27 | return image.getScaledInstance(width, height, Image.SCALE_SMOOTH); 28 | } 29 | } 30 | 31 | public static Image scaleImageToWidth2(BufferedImage image, int width) { 32 | if (image == null) 33 | return null; 34 | 35 | int height = (int) (Math.floor((image.getHeight() * width) / (double) image.getWidth())); 36 | BufferedImage resizedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 37 | Graphics2D graphics2D = resizedImage.createGraphics(); 38 | graphics2D.drawImage(image, 0, 0, width, height, null); 39 | graphics2D.dispose(); 40 | return resizedImage; 41 | } 42 | 43 | public static BufferedImage loadImageResource(String filename) { 44 | return loadImageResource(UIHelper.class, filename); 45 | } 46 | 47 | public static BufferedImage loadImageResource(Class claz, String filePath) { 48 | URL imageURLMain = null; 49 | 50 | if (!filePath.startsWith("/")) { 51 | imageURLMain = claz.getResource("/" + filePath); 52 | } 53 | 54 | if (imageURLMain == null) { 55 | imageURLMain = claz.getResource(filePath); 56 | } 57 | 58 | if (imageURLMain != null) { 59 | Image original = new ImageIcon(imageURLMain).getImage(); 60 | ImageIcon originalIcon = new ImageIcon(original); 61 | BufferedImage bufferedImage = new BufferedImage(originalIcon.getIconWidth(), originalIcon.getIconHeight(), BufferedImage.TYPE_INT_ARGB); 62 | Graphics2D g = (Graphics2D) bufferedImage.getGraphics(); 63 | g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 64 | g.drawImage(originalIcon.getImage(), null, null); 65 | return bufferedImage; 66 | } 67 | return null; 68 | } 69 | 70 | public static BufferedImage loadImageFile(String filePath) { 71 | BufferedImage bufferedImage = null; 72 | File file = new File(filePath); 73 | 74 | if (file.exists() && file.isFile()) { 75 | try { 76 | Image original = new ImageIcon(filePath).getImage(); 77 | ImageIcon originalIcon = new ImageIcon(original); 78 | bufferedImage = new BufferedImage(originalIcon.getIconWidth(), originalIcon.getIconHeight(), BufferedImage.TYPE_INT_ARGB); 79 | Graphics2D g = (Graphics2D) bufferedImage.getGraphics(); 80 | g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 81 | g.drawImage(originalIcon.getImage(), null, null); 82 | } catch (Exception e) { 83 | System.err.println(e.getMessage() + "\r\n" + getStackTrace(e)); 84 | } 85 | } 86 | return bufferedImage; 87 | } 88 | 89 | // https://alvinalexander.com/java/java-copy-image-to-clipboard-example/ 90 | // code below from exampledepot.com 91 | //This method writes an image to the system clipboard. 92 | //otherwise it returns null. 93 | public static void setClipboard(Image image) { 94 | ImageSelection imgSel = new ImageSelection(image); 95 | Toolkit.getDefaultToolkit().getSystemClipboard().setContents(imgSel, null); 96 | } 97 | 98 | 99 | // This class is used to hold an image while on the clipboard. 100 | static class ImageSelection implements Transferable { 101 | private final Image image; 102 | 103 | public ImageSelection(Image image) { 104 | this.image = image; 105 | } 106 | 107 | // Returns supported flavors 108 | public DataFlavor[] getTransferDataFlavors() { 109 | return new DataFlavor[]{DataFlavor.imageFlavor}; 110 | } 111 | 112 | // Returns true if flavor is supported 113 | public boolean isDataFlavorSupported(DataFlavor flavor) { 114 | return DataFlavor.imageFlavor.equals(flavor); 115 | } 116 | 117 | // Returns image 118 | public Object getTransferData(DataFlavor flavor) 119 | throws UnsupportedFlavorException, IOException { 120 | if (!DataFlavor.imageFlavor.equals(flavor)) { 121 | throw new UnsupportedFlavorException(flavor); 122 | } 123 | return image; 124 | } 125 | } 126 | } 127 | -------------------------------------------------------------------------------- /BappDescription.html: -------------------------------------------------------------------------------- 1 |

This extension should add a number of UI and functional features to Burp Suite to make working with it easier.

2 | 3 |

Current Features

4 | 5 |
    6 |
  • Making main tools' tabs more distinguishable by choosing a theme
  • 7 |
  • Ability to control style of sub-tabs in Repeater and Intruder
  • 8 |
  • Ability to change Burp Suite title and its icon
  • 9 |
  • Copy & pasting style ability for Repeater and Intruder tabs
  • 10 |
  • Pasting style for Repeater and Intruder tabs when their title matches a Regular Expression
  • 11 |
  • Copy & pasting titles by creating unique titles by adding a number in the end
  • 12 |
  • Rename titles without a need to double-click on the title
  • 13 |
  • Jump to first and last tabs in Repeater and Intruder
  • 14 |
  • Back and Forward feature depends on the previously selected tabs
  • 15 |
  • Finding Repeater and Intruder tabs when their title matches a Regular Expression
  • 16 |
  • Scrollable main tool tabs
  • 17 |
  • Scrollable Repeater and Intruder tabs
  • 18 |
  • Taking screenshot of repeater or intruder tabs
  • 19 |
  • Trimming long titles into 100 characters
  • 20 |
  • Show previously chosen titles for a tab
  • 21 |
  • Several keyboard shortcuts to make the tab navigation easier
  • 22 |
  • Support for PwnFox Firefox extension highlighter
  • 23 |
  • Ability to save the last size and position of Burp Suite to move it to the same location next time
  • 24 |
  • Ability to detect off-screen Burp Suite window to bring it to the centre
  • 25 |
26 |
27 |

Usage Tips

28 | 39 |
    40 |
  • You can use the following key combination(s) in Repeater and Intruder sub-tab menu:
    41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 65 | 66 | 67 | 68 | 70 | 71 | 72 | 73 | 75 | 76 | 77 | 78 | 80 | 81 | 82 | 83 | 85 | 86 | 87 | 88 | 91 | 92 | 93 | 94 | 97 | 98 | 99 | 100 | 102 | 103 | 104 | 105 | 107 | 108 | 109 | 110 | 112 | 113 | 114 | 115 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 |
    DescriptionCombinations/Shortcuts
    Show Context Menu for Repeater and Intruder TabsMouse Middle-Click
    52 | Alt + Any Mouse Key
    53 | Down Arrow
    54 | Ctrl + Enter
    55 | Ctrl + Shift +Enter
    Find Tabs for Repeater and Intruder TabCtrl + Shift + F
    Find NextF3
    64 | Ctrl + F3
    Find PreviousShift + F3
    69 | Ctrl + Shift + F3
    Jump to the First TabHome
    74 | Ctrl + Shift + Home
    Jump to the last TabEnd
    79 | Ctrl + Shift + End
    Previous TabLeft Arrow
    84 | Ctrl + Shift + Left
    Next TabRight Arrow
    89 | Ctrl + Shift + Right
    90 | Mouse Wheel
    Back (Previously Selected Tab)Alt + Left
    95 | Ctrl + Alt + Left
    96 | Mouse Wheel
    ForwardAlt + Right
    101 | Ctrl + Alt + Right
    Copy Subtab TitleCtrl + C
    106 | Ctrl + Shift + C
    Paste Subtab TitleCtrl + V
    111 | Ctrl + Shift + V
    Rename Subtab TitleF2
    116 | Ctrl + F2
    Increase Font SizeCtrl + Mouse Wheel
    Increase Font Size & BoldMiddle Click + CTRL
    Decrease Font Size & BoldMiddle Click + CTRL + SHIFT
    Big & Red & BoldMiddle Click + SHIFT
    136 |
  • 137 |
138 |
139 |
    140 |
  • You can use the following key combination(s) on the main window frame:
    141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 |
    DescriptionCombinations/Shortcuts
    Move Burp Suite Window to the centre of the ScreenCtrl + Alt + C
    155 |
  • 156 |
157 |
158 |
    159 |
  • After setting style on a sub-tab, setting the same title on another sub-tab will copy its style
  • 160 |
  • Alt + Any Mouse Click works on empty parts of the tabs which do not contain any text
  • 161 |
  • Use the Debug option in Global Settings if you are reporting a bug or if you want to see what is happening
  • 162 |
  • Check the extension's GitHub repository rather than BApp Store for the latest updates
  • 163 |
  • A sample of icons should also be accessible in the repository
  • 164 |
165 | 166 |

Limitation

167 | 168 |
    169 |
  • This extension only supports Burp Suite with Montoya API 1.0 and above. The minimum Burp Suite version to use this extension is 2023.1.
  • 170 |
  • This extension has been tested against the latest pro version which was 2023.1 at the time of writing this document. It should however be also compatible with the community edition.
  • 171 |
172 | -------------------------------------------------------------------------------- /src/main/java/com/mdsec/burp/sharpener/uiControllers/burpFrame/BurpFrameSettings.java: -------------------------------------------------------------------------------- 1 | // Burp Suite Extension Name: Sharpener 2 | // Released under AGPL see LICENSE for more information 3 | // Developed by Soroush Dalili (@irsdl) 4 | // Released initially as open source by MDSec - https://www.mdsec.co.uk 5 | // Project link: https://github.com/mdsecresearch/BurpSuiteSharpener 6 | 7 | package com.mdsec.burp.sharpener.uiControllers.burpFrame; 8 | 9 | import com.coreyd97.BurpExtenderUtilities.Preferences; 10 | import com.irsdl.burp.generic.BurpTitleAndIcon; 11 | import com.mdsec.burp.sharpener.SharpenerSharedParameters; 12 | import com.irsdl.objects.PreferenceObject; 13 | import com.irsdl.objects.StandardSettings; 14 | 15 | import java.awt.*; 16 | import java.util.ArrayList; 17 | import java.util.Collection; 18 | 19 | public class BurpFrameSettings extends StandardSettings { 20 | 21 | private BurpFrameListeners burpFrameListeners; 22 | 23 | public BurpFrameSettings(SharpenerSharedParameters sharedParameters) { 24 | super(sharedParameters); 25 | sharedParameters.printDebugMessage("BurpFrameSettings"); 26 | } 27 | 28 | @Override 29 | public void init() { 30 | 31 | } 32 | 33 | @Override 34 | public Collection definePreferenceObjectCollection() { 35 | Collection preferenceObjectCollection = new ArrayList<>(); 36 | 37 | String[] projectStringSettingNames = {"BurpTitle", "BurpIconCustomPath", "BurpResourceIconName"}; 38 | String[] globalStringSettingNames = {"LastBurpIconCustomPath"}; 39 | 40 | for (String settingName : projectStringSettingNames) { 41 | try { 42 | PreferenceObject preferenceObject = new PreferenceObject(settingName, String.class, "", Preferences.Visibility.PROJECT); 43 | preferenceObjectCollection.add(preferenceObject); 44 | } catch (Exception e) { 45 | //already registered setting 46 | sharedParameters.printDebugMessage(e.getMessage()); 47 | } 48 | } 49 | 50 | for (String settingName : globalStringSettingNames) { 51 | try { 52 | PreferenceObject preferenceObject = new PreferenceObject(settingName, String.class, "", Preferences.Visibility.GLOBAL); 53 | preferenceObjectCollection.add(preferenceObject); 54 | } catch (Exception e) { 55 | //already registered setting 56 | sharedParameters.printDebugMessage(e.getMessage()); 57 | } 58 | } 59 | 60 | PreferenceObject preferenceObject = new PreferenceObject("useLastScreenPositionAndSize", boolean.class, true, Preferences.Visibility.GLOBAL); 61 | preferenceObjectCollection.add(preferenceObject); 62 | 63 | preferenceObject = new PreferenceObject("detectOffScreenPosition", boolean.class, true, Preferences.Visibility.GLOBAL); 64 | preferenceObjectCollection.add(preferenceObject); 65 | 66 | preferenceObject = new PreferenceObject("lastApplicationPosition", Point.class, null, Preferences.Visibility.GLOBAL); 67 | preferenceObjectCollection.add(preferenceObject); 68 | 69 | preferenceObject = new PreferenceObject("lastApplicationSize", Dimension.class, null, Preferences.Visibility.GLOBAL); 70 | preferenceObjectCollection.add(preferenceObject); 71 | 72 | return preferenceObjectCollection; 73 | } 74 | 75 | @Override 76 | public void loadSettings() { 77 | sharedParameters.printDebugMessage("loadSettings"); 78 | 79 | String newTitle = sharedParameters.preferences.safeGetStringSetting("BurpTitle"); 80 | if (!newTitle.isBlank()) { 81 | BurpTitleAndIcon.setTitle(sharedParameters, newTitle); 82 | } 83 | 84 | String newIconPath = sharedParameters.preferences.safeGetStringSetting("BurpIconCustomPath"); 85 | String newIconResourcePath = sharedParameters.preferences.safeGetStringSetting("BurpResourceIconName"); 86 | if (!newIconPath.isBlank()) { 87 | sharedParameters.preferences.setSetting("LastBurpIconCustomPath", newIconPath); 88 | BurpTitleAndIcon.setIcon(sharedParameters, newIconPath, 48, false); 89 | } else if (!newIconResourcePath.isBlank()) { 90 | BurpTitleAndIcon.setIcon(sharedParameters, newIconResourcePath, 48, true); 91 | } 92 | 93 | boolean useLastScreenPositionAndSize = sharedParameters.preferences.safeGetBooleanSetting("useLastScreenPositionAndSize"); 94 | //boolean detectOffScreenPosition = sharedParameters.preferences.safeGetBooleanSetting("detectOffScreenPosition"); 95 | 96 | if(useLastScreenPositionAndSize){ 97 | Point lastApplicationPosition = sharedParameters.preferences.safeGetSetting("lastApplicationPosition", null); 98 | Dimension lastApplicationSize = sharedParameters.preferences.safeGetSetting("lastApplicationSize", null); 99 | 100 | if(lastApplicationPosition != null){ 101 | sharedParameters.get_mainFrameUsingMontoya().setLocation(lastApplicationPosition); 102 | } 103 | 104 | if(lastApplicationSize != null){ 105 | sharedParameters.get_mainFrameUsingMontoya().setSize(lastApplicationSize); 106 | } 107 | } 108 | 109 | burpFrameListeners = new BurpFrameListeners(sharedParameters); 110 | } 111 | 112 | @Override 113 | public void unloadSettings() { 114 | sharedParameters.printDebugMessage("reset Burp title and icon"); 115 | 116 | if(burpFrameListeners!=null){ 117 | burpFrameListeners.removeBurpFrameListener(sharedParameters.get_mainFrameUsingMontoya()); 118 | } 119 | 120 | // reset Burp title and icon 121 | BurpTitleAndIcon.resetTitle(sharedParameters); 122 | BurpTitleAndIcon.resetIcon(sharedParameters); 123 | 124 | } 125 | } 126 | -------------------------------------------------------------------------------- /gradlew: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # 4 | # Copyright 2015 the original author or authors. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # https://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | # 18 | 19 | ############################################################################## 20 | ## 21 | ## Gradle start up script for UN*X 22 | ## 23 | ############################################################################## 24 | 25 | # Attempt to set APP_HOME 26 | # Resolve links: $0 may be a link 27 | PRG="$0" 28 | # Need this for relative symlinks. 29 | while [ -h "$PRG" ] ; do 30 | ls=`ls -ld "$PRG"` 31 | link=`expr "$ls" : '.*-> \(.*\)$'` 32 | if expr "$link" : '/.*' > /dev/null; then 33 | PRG="$link" 34 | else 35 | PRG=`dirname "$PRG"`"/$link" 36 | fi 37 | done 38 | SAVED="`pwd`" 39 | cd "`dirname \"$PRG\"`/" >/dev/null 40 | APP_HOME="`pwd -P`" 41 | cd "$SAVED" >/dev/null 42 | 43 | APP_NAME="Gradle" 44 | APP_BASE_NAME=`basename "$0"` 45 | 46 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 47 | DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' 48 | 49 | # Use the maximum available, or set MAX_FD != -1 to use that value. 50 | MAX_FD="maximum" 51 | 52 | warn () { 53 | echo "$*" 54 | } 55 | 56 | die () { 57 | echo 58 | echo "$*" 59 | echo 60 | exit 1 61 | } 62 | 63 | # OS specific support (must be 'true' or 'false'). 64 | cygwin=false 65 | msys=false 66 | darwin=false 67 | nonstop=false 68 | case "`uname`" in 69 | CYGWIN* ) 70 | cygwin=true 71 | ;; 72 | Darwin* ) 73 | darwin=true 74 | ;; 75 | MINGW* ) 76 | msys=true 77 | ;; 78 | NONSTOP* ) 79 | nonstop=true 80 | ;; 81 | esac 82 | 83 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 84 | 85 | 86 | # Determine the Java command to use to start the JVM. 87 | if [ -n "$JAVA_HOME" ] ; then 88 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 89 | # IBM's JDK on AIX uses strange locations for the executables 90 | JAVACMD="$JAVA_HOME/jre/sh/java" 91 | else 92 | JAVACMD="$JAVA_HOME/bin/java" 93 | fi 94 | if [ ! -x "$JAVACMD" ] ; then 95 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 96 | 97 | Please set the JAVA_HOME variable in your environment to match the 98 | location of your Java installation." 99 | fi 100 | else 101 | JAVACMD="java" 102 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 103 | 104 | Please set the JAVA_HOME variable in your environment to match the 105 | location of your Java installation." 106 | fi 107 | 108 | # Increase the maximum file descriptors if we can. 109 | if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then 110 | MAX_FD_LIMIT=`ulimit -H -n` 111 | if [ $? -eq 0 ] ; then 112 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 113 | MAX_FD="$MAX_FD_LIMIT" 114 | fi 115 | ulimit -n $MAX_FD 116 | if [ $? -ne 0 ] ; then 117 | warn "Could not set maximum file descriptor limit: $MAX_FD" 118 | fi 119 | else 120 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 121 | fi 122 | fi 123 | 124 | # For Darwin, add options to specify how the application appears in the dock 125 | if $darwin; then 126 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" 127 | fi 128 | 129 | # For Cygwin or MSYS, switch paths to Windows format before running java 130 | if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then 131 | APP_HOME=`cygpath --path --mixed "$APP_HOME"` 132 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 133 | 134 | JAVACMD=`cygpath --unix "$JAVACMD"` 135 | 136 | # We build the pattern for arguments to be converted via cygpath 137 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` 138 | SEP="" 139 | for dir in $ROOTDIRSRAW ; do 140 | ROOTDIRS="$ROOTDIRS$SEP$dir" 141 | SEP="|" 142 | done 143 | OURCYGPATTERN="(^($ROOTDIRS))" 144 | # Add a user-defined pattern to the cygpath arguments 145 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then 146 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 147 | fi 148 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 149 | i=0 150 | for arg in "$@" ; do 151 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 152 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option 153 | 154 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition 155 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 156 | else 157 | eval `echo args$i`="\"$arg\"" 158 | fi 159 | i=`expr $i + 1` 160 | done 161 | case $i in 162 | 0) set -- ;; 163 | 1) set -- "$args0" ;; 164 | 2) set -- "$args0" "$args1" ;; 165 | 3) set -- "$args0" "$args1" "$args2" ;; 166 | 4) set -- "$args0" "$args1" "$args2" "$args3" ;; 167 | 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 168 | 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 169 | 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 170 | 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 171 | 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 172 | esac 173 | fi 174 | 175 | # Escape application args 176 | save () { 177 | for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done 178 | echo " " 179 | } 180 | APP_ARGS=`save "$@"` 181 | 182 | # Collect all arguments for the java command, following the shell quoting and substitution rules 183 | eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" 184 | 185 | exec "$JAVACMD" "$@" 186 | -------------------------------------------------------------------------------- /src/main/java/com/irsdl/generic/JScrollMenu.java: -------------------------------------------------------------------------------- 1 | // Released under AGPL see LICENSE for more information 2 | // Developed by Soroush Dalili (@irsdl) 3 | 4 | // from https://stackoverflow.com/questions/9288350/adding-vertical-scroll-to-a-jpopupmenu 5 | 6 | package com.irsdl.generic; 7 | 8 | import javax.swing.*; 9 | import javax.swing.plaf.MenuItemUI; 10 | import javax.swing.plaf.PopupMenuUI; 11 | import java.awt.*; 12 | 13 | 14 | public class JScrollMenu extends JMenu { 15 | // Covers the one in the JMenu because the method that creates it in JMenu is private 16 | /** 17 | * The popup menu portion of the menu. 18 | */ 19 | private JPopupMenu popupMenu; 20 | 21 | 22 | /** 23 | * Constructs a new JMenu with no text. 24 | */ 25 | public JScrollMenu() { 26 | this(""); 27 | } 28 | 29 | /** 30 | * Constructs a new JMenu with the supplied string as its text. 31 | * 32 | * @param s the text for the menu label 33 | */ 34 | public JScrollMenu(String s) { 35 | super(s); 36 | } 37 | 38 | /** 39 | * Constructs a menu whose properties are taken from the Action supplied. 40 | * 41 | * @param a an Action 42 | */ 43 | public JScrollMenu(Action a) { 44 | this(); 45 | setAction(a); 46 | } 47 | 48 | 49 | /** 50 | * Lazily creates the popup menu. This method will create the popup using the JScrollPopupMenu class. 51 | */ 52 | protected void ensurePopupMenuCreatedHere() { 53 | if (popupMenu == null) { 54 | this.popupMenu = new JScrollPopupMenu(); 55 | popupMenu.setLightWeightPopupEnabled(false); 56 | popupListener = createWinListener(popupMenu); 57 | popupMenu.setInvoker(this); 58 | } 59 | } 60 | 61 | ////////////////////////////// 62 | //// All of these methods are necessary because ensurePopupMenuCreated() is private in JMenu 63 | ////////////////////////////// 64 | @Override 65 | public void updateUI() { 66 | setUI((MenuItemUI) UIManager.getUI(this)); 67 | 68 | if (popupMenu != null) { 69 | popupMenu.setUI((PopupMenuUI) UIManager.getUI(popupMenu)); 70 | } 71 | } 72 | 73 | 74 | @Override 75 | public boolean isPopupMenuVisible() { 76 | ensurePopupMenuCreatedHere(); 77 | return popupMenu.isVisible(); 78 | } 79 | 80 | 81 | @Override 82 | public void setMenuLocation(int x, int y) { 83 | super.setMenuLocation(x, y); 84 | if (popupMenu != null) { 85 | popupMenu.setLocation(x, y); 86 | } 87 | } 88 | 89 | @Override 90 | public JMenuItem add(JMenuItem menuItem) { 91 | ensurePopupMenuCreatedHere(); 92 | return popupMenu.add(menuItem); 93 | } 94 | 95 | @Override 96 | public Component add(Component c) { 97 | ensurePopupMenuCreatedHere(); 98 | popupMenu.add(c); 99 | return c; 100 | } 101 | 102 | @Override 103 | public Component add(Component c, int index) { 104 | ensurePopupMenuCreatedHere(); 105 | popupMenu.add(c, index); 106 | return c; 107 | } 108 | 109 | 110 | @Override 111 | public void addSeparator() { 112 | ensurePopupMenuCreatedHere(); 113 | popupMenu.addSeparator(); 114 | } 115 | 116 | @Override 117 | public void insert(String s, int pos) { 118 | if (pos < 0) { 119 | throw new IllegalArgumentException("index less than zero."); 120 | } 121 | 122 | ensurePopupMenuCreatedHere(); 123 | popupMenu.insert(new JMenuItem(s), pos); 124 | } 125 | 126 | @Override 127 | public JMenuItem insert(JMenuItem mi, int pos) { 128 | if (pos < 0) { 129 | throw new IllegalArgumentException("index less than zero."); 130 | } 131 | ensurePopupMenuCreatedHere(); 132 | popupMenu.insert(mi, pos); 133 | return mi; 134 | } 135 | 136 | @Override 137 | public JMenuItem insert(Action a, int pos) { 138 | if (pos < 0) { 139 | throw new IllegalArgumentException("index less than zero."); 140 | } 141 | 142 | ensurePopupMenuCreatedHere(); 143 | JMenuItem mi = new JMenuItem(a); 144 | mi.setHorizontalTextPosition(SwingConstants.TRAILING); 145 | mi.setVerticalTextPosition(SwingConstants.CENTER); 146 | popupMenu.insert(mi, pos); 147 | return mi; 148 | } 149 | 150 | @Override 151 | public void insertSeparator(int index) { 152 | if (index < 0) { 153 | throw new IllegalArgumentException("index less than zero."); 154 | } 155 | 156 | ensurePopupMenuCreatedHere(); 157 | popupMenu.insert(new JPopupMenu.Separator(), index); 158 | } 159 | 160 | 161 | @Override 162 | public void remove(JMenuItem item) { 163 | if (popupMenu != null) { 164 | popupMenu.remove(item); 165 | } 166 | } 167 | 168 | @Override 169 | public void remove(int pos) { 170 | if (pos < 0) { 171 | throw new IllegalArgumentException("index less than zero."); 172 | } 173 | if (pos > getItemCount()) { 174 | throw new IllegalArgumentException("index greater than the number of items."); 175 | } 176 | if (popupMenu != null) { 177 | popupMenu.remove(pos); 178 | } 179 | } 180 | 181 | @Override 182 | public void remove(Component c) { 183 | if (popupMenu != null) { 184 | popupMenu.remove(c); 185 | } 186 | } 187 | 188 | @Override 189 | public void removeAll() { 190 | if (popupMenu != null) { 191 | popupMenu.removeAll(); 192 | } 193 | } 194 | 195 | @Override 196 | public int getMenuComponentCount() { 197 | return (popupMenu == null) ? 0 : popupMenu.getComponentCount(); 198 | } 199 | 200 | @Override 201 | public Component getMenuComponent(int n) { 202 | return (popupMenu == null) ? null : popupMenu.getComponent(n); 203 | } 204 | 205 | @Override 206 | public Component[] getMenuComponents() { 207 | return (popupMenu == null) ? new Component[0] : popupMenu.getComponents(); 208 | } 209 | 210 | @Override 211 | public JPopupMenu getPopupMenu() { 212 | ensurePopupMenuCreatedHere(); 213 | return popupMenu; 214 | } 215 | 216 | @Override 217 | public MenuElement[] getSubElements() { 218 | return popupMenu == null ? new MenuElement[0] : new MenuElement[]{popupMenu}; 219 | } 220 | 221 | 222 | @Override 223 | public void applyComponentOrientation(ComponentOrientation o) { 224 | super.applyComponentOrientation(o); 225 | 226 | if (popupMenu != null) { 227 | int nComponents = getMenuComponentCount(); 228 | for (int i = 0; i < nComponents; ++i) { 229 | getMenuComponent(i).applyComponentOrientation(o); 230 | } 231 | popupMenu.setComponentOrientation(o); 232 | } 233 | } 234 | 235 | @Override 236 | public void setComponentOrientation(ComponentOrientation o) { 237 | super.setComponentOrientation(o); 238 | if (popupMenu != null) { 239 | popupMenu.setComponentOrientation(o); 240 | } 241 | } 242 | } -------------------------------------------------------------------------------- /src/main/java/com/irsdl/generic/uiObjFinder/UiSpecObject.java: -------------------------------------------------------------------------------- 1 | // Released under AGPL see LICENSE for more information 2 | // Developed by Soroush Dalili (@irsdl) 3 | 4 | package com.irsdl.generic.uiObjFinder; 5 | 6 | import javax.swing.*; 7 | import java.awt.*; 8 | import java.lang.reflect.Type; 9 | 10 | public class UiSpecObject { 11 | private boolean _isJComponent = false; 12 | private Type _objectType = null; 13 | private Type _parentObjectType = null; 14 | private Boolean _isShowing = null; 15 | private String _frameTitle = null; 16 | private String _name = null; 17 | private boolean _isPartialName = false; 18 | private boolean _isCaseSensitiveName = true; 19 | private Integer _minWidth = null; 20 | private Integer _maxWidth = null; 21 | private Integer _minHeight = null; 22 | private Integer _maxHeight = null; 23 | private Color _backgroundColor = null; 24 | private Integer _minJComponentCount = null; 25 | private Integer _maxJComponentCount = null; 26 | 27 | public UiSpecObject() { 28 | } 29 | 30 | public UiSpecObject(Class type) { 31 | set_objectType(type); 32 | } 33 | 34 | public boolean isCompatible(Component component) { 35 | if (component == null) { 36 | return false; 37 | } 38 | 39 | if (get_minJComponentCount() != null || get_maxJComponentCount() != null) { 40 | set_isJComponent(true); 41 | } 42 | 43 | if (get_isJComponent() && !(component instanceof JComponent)) { 44 | return false; 45 | } 46 | 47 | if (get_frameTitle() != null && !(component instanceof JFrame)) { 48 | return false; 49 | } else if (get_frameTitle() != null && component instanceof JFrame && !((JFrame) component).getTitle().equals(get_frameTitle())) { 50 | return false; 51 | } 52 | 53 | if (get_objectType() != null && !((Class) get_objectType()).isAssignableFrom(component.getClass())) { 54 | return false; 55 | } 56 | 57 | if (get_parentObjectType() != null && !((Class) get_parentObjectType()).isAssignableFrom(component.getParent().getClass())) { 58 | return false; 59 | } 60 | 61 | if (is_isShowing() != null && component.isShowing() != is_isShowing()) { 62 | return false; 63 | } 64 | 65 | if (get_name() != null) { 66 | String componentName = component.getName(); 67 | 68 | if (componentName == null) 69 | return false; 70 | 71 | if (!get_isCaseSensitiveName()) { 72 | componentName = componentName.toLowerCase(); 73 | } 74 | 75 | if (!get_isPartialName()) { 76 | if (!componentName.equals(get_name())) { 77 | return false; 78 | } 79 | } else { 80 | if (!componentName.contains(get_name())) { 81 | return false; 82 | } 83 | } 84 | } 85 | 86 | if (get_minWidth() != null && component.getWidth() < get_minWidth()) { 87 | return false; 88 | } 89 | 90 | if (get_minHeight() != null && component.getHeight() < get_minHeight()) { 91 | return false; 92 | } 93 | 94 | if (get_maxWidth() != null && component.getWidth() > get_maxWidth()) { 95 | return false; 96 | } 97 | 98 | if (get_maxHeight() != null && component.getHeight() > get_maxHeight()) { 99 | return false; 100 | } 101 | 102 | if (get_backgroundColor() != null && !component.getBackground().equals(get_backgroundColor())) { 103 | return false; 104 | } 105 | 106 | if (get_minJComponentCount() != null && ((JComponent) component).getComponentCount() < get_minJComponentCount()) { 107 | return false; 108 | } 109 | 110 | return get_maxJComponentCount() == null || ((JComponent) component).getComponentCount() <= get_maxJComponentCount(); 111 | } 112 | 113 | public boolean get_isJComponent() { 114 | return _isJComponent; 115 | } 116 | 117 | public void set_isJComponent(boolean _isJComponent) { 118 | this._isJComponent = _isJComponent; 119 | } 120 | 121 | public Type get_objectType() { 122 | return _objectType; 123 | } 124 | 125 | public void set_objectType(Type _objectType) { 126 | this._objectType = _objectType; 127 | } 128 | 129 | public Type get_parentObjectType() { 130 | return _parentObjectType; 131 | } 132 | 133 | public void set_parentObjectType(Type _parentObjectType) { 134 | this._parentObjectType = _parentObjectType; 135 | } 136 | 137 | public Boolean is_isShowing() { 138 | return _isShowing; 139 | } 140 | 141 | public void set_isShowing(boolean _isShowing) { 142 | this._isShowing = _isShowing; 143 | } 144 | 145 | public String get_frameTitle() { 146 | return _frameTitle; 147 | } 148 | 149 | public void set_frameTitle(String _frameTitle) { 150 | this._frameTitle = _frameTitle; 151 | } 152 | 153 | public String get_name() { 154 | return _name; 155 | } 156 | 157 | public void set_name(String _name) { 158 | this._name = _name; 159 | } 160 | 161 | public boolean get_isPartialName() { 162 | return _isPartialName; 163 | } 164 | 165 | public void set_isPartialName(boolean _isPartialName) { 166 | this._isPartialName = _isPartialName; 167 | } 168 | 169 | public boolean get_isCaseSensitiveName() { 170 | return _isCaseSensitiveName; 171 | } 172 | 173 | public void set_isCaseSensitiveName(boolean _isCaseSensitiveName) { 174 | this._isCaseSensitiveName = _isCaseSensitiveName; 175 | } 176 | 177 | public Integer get_minWidth() { 178 | return _minWidth; 179 | } 180 | 181 | public void set_minWidth(int _minWidth) { 182 | this._minWidth = _minWidth; 183 | } 184 | 185 | public Integer get_maxWidth() { 186 | return _maxWidth; 187 | } 188 | 189 | public void set_maxWidth(int _maxWidth) { 190 | this._maxWidth = _maxWidth; 191 | } 192 | 193 | public Integer get_minHeight() { 194 | return _minHeight; 195 | } 196 | 197 | public void set_minHeight(int _minHeight) { 198 | this._minHeight = _minHeight; 199 | } 200 | 201 | public Integer get_maxHeight() { 202 | return _maxHeight; 203 | } 204 | 205 | public void set_maxHeight(int _maxHeight) { 206 | this._maxHeight = _maxHeight; 207 | } 208 | 209 | public Color get_backgroundColor() { 210 | return _backgroundColor; 211 | } 212 | 213 | public void set_backgroundColor(Color _backgroundColor) { 214 | this._backgroundColor = _backgroundColor; 215 | } 216 | 217 | public Integer get_minJComponentCount() { 218 | return _minJComponentCount; 219 | } 220 | 221 | public void set_minJComponentCount(int _minJComponentCount) { 222 | this._minJComponentCount = _minJComponentCount; 223 | } 224 | 225 | public Integer get_maxJComponentCount() { 226 | return _maxJComponentCount; 227 | } 228 | 229 | public void set_maxJComponentCount(int _maxJComponentCount) { 230 | this._maxJComponentCount = _maxJComponentCount; 231 | } 232 | } 233 | -------------------------------------------------------------------------------- /src/main/java/com/irsdl/generic/UIHelper.java: -------------------------------------------------------------------------------- 1 | // Released under AGPL see LICENSE for more information 2 | // Developed by Soroush Dalili (@irsdl) 3 | 4 | package com.irsdl.generic; 5 | 6 | import javax.swing.*; 7 | import javax.swing.filechooser.FileFilter; 8 | import java.awt.*; 9 | import java.io.File; 10 | import java.util.ArrayList; 11 | 12 | public class UIHelper { 13 | 14 | // Show a message to the user 15 | public static void showMessage(final String strMsg, final String strTitle, Component parentCmp) { 16 | new Thread(() -> JOptionPane.showMessageDialog(parentCmp, strMsg, strTitle, JOptionPane.INFORMATION_MESSAGE)).start(); 17 | 18 | } 19 | 20 | // Show a message to the user 21 | public static void showWarningMessage(final String strMsg, Component parentCmp) { 22 | new Thread(() -> JOptionPane.showMessageDialog(parentCmp, strMsg, "Warning", JOptionPane.WARNING_MESSAGE)).start(); 23 | } 24 | 25 | // Show a message to the user 26 | public static String showPlainInputMessage(final String strMessage, final String strTitle, final String defaultValue, Component parentCmp) { 27 | String output = (String) JOptionPane.showInputDialog(parentCmp, 28 | strMessage, strTitle, JOptionPane.PLAIN_MESSAGE, null, null, defaultValue); 29 | if (output == null) { 30 | output = defaultValue; 31 | } 32 | 33 | if(output == null) 34 | output = ""; 35 | 36 | return output; 37 | } 38 | 39 | // Common method to ask a multiline question 40 | public static String[] showPlainInputMessages(final String[] strMessages, final String strTitle, final String[] defaultValues, Component parentCmp) { 41 | String[] output = new String[strMessages.length]; 42 | java.util.List strMessagesObjectList = new ArrayList<>(); 43 | 44 | for (int i = 0; i < strMessages.length; i++) { 45 | String defaultValue = ""; 46 | if (defaultValues.length > i) 47 | defaultValue = defaultValues[i]; 48 | strMessagesObjectList.add(strMessages[i]); 49 | strMessagesObjectList.add(new JTextField(defaultValue)); 50 | } 51 | 52 | int option = JOptionPane.showConfirmDialog(parentCmp, strMessagesObjectList.toArray(), strTitle, JOptionPane.OK_CANCEL_OPTION); 53 | if (option == JOptionPane.OK_OPTION) { 54 | for (int i = 0; i < strMessages.length; i++) { 55 | output[i] = ((JTextField) strMessagesObjectList.get(i * 2 + 1)).getText(); 56 | } 57 | } 58 | if(output == null) 59 | output = new String[strMessages.length]; 60 | return output; 61 | } 62 | 63 | // Common method to ask a multiple question 64 | public static Integer askConfirmMessage(final String strTitle, final String strQuestion, String[] msgOptions, Component parentCmp) { 65 | Integer output = JOptionPane.showOptionDialog(parentCmp, 66 | strQuestion, 67 | strTitle, 68 | JOptionPane.YES_NO_CANCEL_OPTION, 69 | JOptionPane.QUESTION_MESSAGE, 70 | null, 71 | msgOptions, 72 | msgOptions[0]); 73 | if(output == null) 74 | output = -1; 75 | return output; 76 | } 77 | 78 | // to update the JCheckbox background colour after using the customizeUiComponent() method 79 | public static void updateJCheckBoxBackground(Container c) { 80 | Component[] components = c.getComponents(); 81 | for (Component com : components) { 82 | if (com instanceof JCheckBox) { 83 | com.setBackground(c.getBackground()); 84 | } else if (com instanceof Container) { 85 | updateJCheckBoxBackground((Container) com); 86 | } 87 | } 88 | } 89 | 90 | // Show directory dialog and return the path 91 | public static String showDirectoryDialog(final String initialPath, Component parentCmp) { 92 | return showFileDialog(initialPath, true, null, parentCmp, false); 93 | } 94 | 95 | // Show directory dialog and return the path 96 | public static String showDirectorySaveDialog(final String initialPath, Component parentCmp) { 97 | return showFileDialog(initialPath, true, null, parentCmp, true); 98 | } 99 | 100 | // Show file dialog and return the file path 101 | public static String showFileDialog(final String initialPath, FileFilter fileFilter, Component parentCmp) { 102 | return showFileDialog(initialPath, false, fileFilter, parentCmp, false); 103 | } 104 | 105 | // Show file chooser 106 | public static String showFileDialog(final String initialPath, final boolean dirOnly, FileFilter fileFilter, Component parentCmp, boolean isSave) { 107 | String filePath = ""; 108 | JFileChooser _fileChooser = new JFileChooser(); 109 | if (dirOnly) 110 | _fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 111 | 112 | if (fileFilter != null) 113 | _fileChooser.setFileFilter(fileFilter); 114 | 115 | if (!initialPath.trim().isEmpty()) { 116 | File file = new File(initialPath); 117 | _fileChooser.setCurrentDirectory(file); 118 | } 119 | 120 | int returnVal; 121 | if (isSave) { 122 | returnVal = _fileChooser.showSaveDialog(parentCmp); 123 | } else { 124 | returnVal = _fileChooser.showOpenDialog(parentCmp); 125 | } 126 | 127 | if (returnVal == JFileChooser.APPROVE_OPTION) { 128 | filePath = _fileChooser.getSelectedFile().getAbsolutePath(); 129 | } 130 | 131 | if(filePath == null) 132 | filePath = ""; 133 | 134 | return filePath; 135 | } 136 | 137 | public static boolean isFrameOutOffScreen(JFrame jframe, double offScreenMargin){ 138 | boolean result = false; 139 | try{ 140 | if(offScreenMargin > 1 || offScreenMargin < 0) 141 | offScreenMargin = 0; 142 | 143 | Rectangle bounds = new Rectangle(0, 0, 0, 0); 144 | GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); 145 | GraphicsDevice[] lstGDs = ge.getScreenDevices(); 146 | for (GraphicsDevice gd : lstGDs) { 147 | bounds.add(gd.getDefaultConfiguration().getBounds()); 148 | } 149 | 150 | Rectangle frameBounds = jframe.getBounds(); 151 | double widthOffset = offScreenMargin * frameBounds.getWidth(); 152 | double heightOffset = offScreenMargin * frameBounds.getHeight(); 153 | Rectangle boundsWithThreshold = new Rectangle((int)(bounds.getX() - widthOffset), 154 | (int)(bounds.getY() - heightOffset), 155 | (int)(bounds.getWidth() + 2 * widthOffset), 156 | (int)(bounds.getHeight() + 2 * heightOffset) 157 | ); 158 | 159 | result = !boundsWithThreshold.contains(frameBounds); 160 | }catch(Exception e){ 161 | System.err.println("Error in isFrameOutOffScreen, it has been ignored"); 162 | } 163 | return result; 164 | } 165 | 166 | public static void moveFrameToCenter(JFrame jframe){ 167 | try{ 168 | Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); 169 | jframe.setLocation(dim.width/2-jframe.getSize().width/2, dim.height/2-jframe.getSize().height/2); 170 | }catch(Exception e){ 171 | System.err.println("Error in moveFrameToCenter, it has been ignored"); 172 | } 173 | 174 | } 175 | 176 | } 177 | -------------------------------------------------------------------------------- /src/main/java/com/irsdl/burp/generic/BurpUITools.java: -------------------------------------------------------------------------------- 1 | // Released under AGPL see LICENSE for more information 2 | // Developed by Soroush Dalili (@irsdl) 3 | 4 | package com.irsdl.burp.generic; 5 | 6 | import javax.swing.*; 7 | import java.awt.*; 8 | import java.util.Set; 9 | 10 | public class BurpUITools { 11 | public enum MainTabs { 12 | None("None"), 13 | Collaborator("Collaborator"), 14 | Comparer("Comparer"), 15 | Dashboard("Dashboard"), 16 | Decoder("Decoder"), 17 | Extender("Extender"), 18 | Extensions("Extensions"), 19 | Intruder("Intruder"), 20 | Logger("Logger"), 21 | ProjectOptions("Project options"), 22 | Proxy("Proxy"), 23 | Repeater("Repeater"), 24 | Sequencer("Sequencer"), 25 | Target("Target"), 26 | UserOptions("User options"), 27 | 28 | HackVertor("Extension:Hackvertor"), 29 | LoggerPlusPlus("Extension:Logger++"), 30 | PythonScripter("Extension:Python Scripts"), 31 | Stepper("Extension:Stepper"), 32 | Autorize("Extension:Autorize"), 33 | Errors("Extension:Errors"), 34 | ; 35 | private final String text; 36 | 37 | MainTabs(final String text) { 38 | this.text = text.replaceAll("Extension: *","Extension> "); 39 | } 40 | 41 | /* (non-Javadoc) 42 | * @see java.lang.Enum#toString() 43 | */ 44 | @Override 45 | public String toString() { 46 | return text.replaceAll("Extension> *", ""); 47 | } 48 | 49 | public String toRawString() { 50 | return text; 51 | } 52 | 53 | } 54 | 55 | public static MainTabs getMainTabsObjFromString(String tabTitleName) { 56 | MainTabs result = MainTabs.None; 57 | if (tabTitleName != null) { 58 | for (MainTabs tab : BurpUITools.MainTabs.values()) { 59 | if (tab.toString().equalsIgnoreCase(tabTitleName.trim())) { 60 | result = tab; 61 | break; 62 | } 63 | } 64 | } 65 | return result; 66 | } 67 | 68 | public static boolean isDarkMode(Component component) { 69 | boolean result = component.getBackground().getBlue() < 128; 70 | return result; 71 | } 72 | 73 | public static boolean switchToMainTab(String tabName, JTabbedPane tabbedPane) { 74 | boolean result = false; 75 | for (Component component : tabbedPane.getComponents()) { 76 | int componentIndex = tabbedPane.indexOfComponent(component); 77 | if (componentIndex == -1) { 78 | continue; 79 | } 80 | 81 | String componentTitle = tabbedPane.getTitleAt(componentIndex); 82 | if (componentTitle.trim().equalsIgnoreCase(tabName.trim())) { 83 | tabbedPane.setSelectedIndex(componentIndex); 84 | result = true; 85 | break; 86 | } 87 | } 88 | 89 | return result; 90 | } 91 | 92 | public static boolean isStringInMainTabs(String tabTitleName) { 93 | boolean result = true; 94 | try { 95 | MainTabs.valueOf(tabTitleName); 96 | } catch (Exception e) { 97 | result = false; 98 | } 99 | return result; 100 | } 101 | 102 | // This is case-insensitive to prevent confusion 103 | public static boolean isMenuBarLoaded(String toolbarName, JMenuBar menuBar) { 104 | boolean result = false; 105 | for (int i = 0; i < menuBar.getMenuCount(); i++) { 106 | JMenuItem item = menuBar.getMenu(i); 107 | if (item.getText().trim().equalsIgnoreCase(toolbarName.trim())) { 108 | result = true; 109 | break; 110 | } 111 | } 112 | return result; 113 | } 114 | 115 | // This is case-insensitive to prevent confusion 116 | public static void removeMenuBarByName(String toolbarName, JMenuBar menuBar, boolean repaintUI) { 117 | SwingUtilities.invokeLater(() -> { 118 | 119 | for (int i = 0; i < menuBar.getMenuCount(); i++) { 120 | JMenuItem item = menuBar.getMenu(i); 121 | if (item.getText().trim().equalsIgnoreCase(toolbarName.trim())) { 122 | menuBar.remove(i); 123 | // break; // we may have more than one menu so this line needs to be commented 124 | } 125 | } 126 | 127 | if (repaintUI) { 128 | menuBar.revalidate(); 129 | menuBar.repaint(); 130 | } 131 | 132 | }); 133 | } 134 | 135 | // This is case-insensitive to prevent confusion 136 | public static JMenuItem getMenuItem(String toolbarName, JMenuBar menuBar) { 137 | JMenuItem result = null; 138 | for (int i = 0; i < menuBar.getMenuCount(); i++) { 139 | JMenuItem item = menuBar.getMenu(i); 140 | if (item.getText().trim().equalsIgnoreCase(toolbarName.trim())) { 141 | result = item; 142 | break; 143 | } 144 | } 145 | return result; 146 | } 147 | 148 | // This is case-insensitive to prevent confusion 149 | public static MenuElement getSubMenuComponentFromMain(String toolbarName, String subItemName, JMenuBar menuBar) { 150 | MenuElement result = null; 151 | JMenuItem mainMenuItem = getMenuItem(toolbarName, menuBar); 152 | if (mainMenuItem != null) { 153 | for (int i = 0; i < mainMenuItem.getSubElements()[0].getSubElements().length - 1; i++) { 154 | MenuElement item = mainMenuItem.getSubElements()[0].getSubElements()[i]; 155 | if (item instanceof JMenuItem finalObj) { 156 | if (finalObj.getText().equalsIgnoreCase(subItemName)) { 157 | result = finalObj; 158 | break; 159 | } 160 | } else if (item instanceof JMenu finalObj) { 161 | if (finalObj.getText().equalsIgnoreCase(subItemName)) { 162 | result = finalObj; 163 | break; 164 | } 165 | } else if (item instanceof JCheckBoxMenuItem finalObj) { 166 | if (finalObj.getText().equalsIgnoreCase(subItemName)) { 167 | result = finalObj; 168 | break; 169 | } 170 | } 171 | } 172 | } 173 | return result; 174 | } 175 | 176 | public static boolean reattachTools(Set toolName, JMenuBar menuBar) { 177 | boolean result = false; 178 | for (BurpUITools.MainTabs tool : toolName) { 179 | JMenuItem detachedTool = (JMenuItem) BurpUITools.getSubMenuComponentFromMain("Window", "Reattach " + tool, menuBar); 180 | if (detachedTool != null) { 181 | detachedTool.doClick(); 182 | result = true; 183 | } 184 | } 185 | return result; 186 | } 187 | 188 | // This is case-insensitive to prevent confusion 189 | public static boolean isTabLoaded(String tabName, JTabbedPane tabbedPane) { 190 | boolean result = false; 191 | for (Component component : tabbedPane.getComponents()) { 192 | int componentIndex = tabbedPane.indexOfComponent(component); 193 | if (componentIndex == -1) { 194 | continue; 195 | } 196 | 197 | String componentTitle = tabbedPane.getTitleAt(componentIndex); 198 | if (componentTitle.trim().equalsIgnoreCase(tabName.trim())) { 199 | result = true; 200 | break; 201 | } 202 | } 203 | return result; 204 | } 205 | } 206 | -------------------------------------------------------------------------------- /src/main/java/com/irsdl/generic/JScrollPopupMenu.java: -------------------------------------------------------------------------------- 1 | // Released under AGPL see LICENSE for more information 2 | // Developed by Soroush Dalili (@irsdl) 3 | 4 | // from https://stackoverflow.com/questions/9288350/adding-vertical-scroll-to-a-jpopupmenu 5 | 6 | package com.irsdl.generic; 7 | 8 | import javax.swing.*; 9 | import java.awt.*; 10 | import java.awt.event.MouseWheelEvent; 11 | 12 | public class JScrollPopupMenu extends JPopupMenu { 13 | protected int maximumVisibleRows = 10; 14 | 15 | public JScrollPopupMenu() { 16 | this(null); 17 | } 18 | 19 | public JScrollPopupMenu(String label) { 20 | super(label); 21 | setLayout(new ScrollPopupMenuLayout()); 22 | 23 | super.add(getScrollBar()); 24 | addMouseWheelListener(event -> { 25 | JScrollBar scrollBar = getScrollBar(); 26 | int amount = (event.getScrollType() == MouseWheelEvent.WHEEL_UNIT_SCROLL) 27 | ? event.getUnitsToScroll() * scrollBar.getUnitIncrement() 28 | : (event.getWheelRotation() < 0 ? -1 : 1) * scrollBar.getBlockIncrement(); 29 | 30 | scrollBar.setValue(scrollBar.getValue() + amount); 31 | event.consume(); 32 | }); 33 | } 34 | 35 | private JScrollBar popupScrollBar; 36 | 37 | protected JScrollBar getScrollBar() { 38 | if (popupScrollBar == null) { 39 | popupScrollBar = new JScrollBar(Adjustable.VERTICAL); 40 | popupScrollBar.addAdjustmentListener(e -> { 41 | doLayout(); 42 | repaint(); 43 | }); 44 | 45 | popupScrollBar.setVisible(false); 46 | } 47 | 48 | return popupScrollBar; 49 | } 50 | 51 | public int getMaximumVisibleRows() { 52 | return maximumVisibleRows; 53 | } 54 | 55 | public void setMaximumVisibleRows(int maximumVisibleRows) { 56 | this.maximumVisibleRows = maximumVisibleRows; 57 | } 58 | 59 | @Override 60 | public void paintChildren(Graphics g) { 61 | Insets insets = getInsets(); 62 | g.clipRect(insets.left, insets.top, getWidth(), getHeight() - insets.top - insets.bottom); 63 | super.paintChildren(g); 64 | } 65 | 66 | @Override 67 | protected void addImpl(Component comp, Object constraints, int index) { 68 | super.addImpl(comp, constraints, index); 69 | 70 | if (maximumVisibleRows < getComponentCount() - 1) { 71 | getScrollBar().setVisible(true); 72 | } 73 | } 74 | 75 | @Override 76 | public void remove(int index) { 77 | // can't remove the scrollbar 78 | ++index; 79 | 80 | super.remove(index); 81 | 82 | if (maximumVisibleRows >= getComponentCount() - 1) { 83 | getScrollBar().setVisible(false); 84 | } 85 | } 86 | 87 | @Override 88 | public void show(Component invoker, int x, int y) { 89 | JScrollBar scrollBar = getScrollBar(); 90 | if (scrollBar.isVisible()) { 91 | int extent = 0; 92 | int max = 0; 93 | int i = 0; 94 | int unit = -1; 95 | int width = 0; 96 | for (Component comp : getComponents()) { 97 | if (!(comp instanceof JScrollBar)) { 98 | Dimension preferredSize = comp.getPreferredSize(); 99 | width = Math.max(width, preferredSize.width); 100 | if (unit < 0) { 101 | unit = preferredSize.height; 102 | } 103 | if (i++ < maximumVisibleRows) { 104 | extent += preferredSize.height; 105 | } 106 | max += preferredSize.height; 107 | } 108 | } 109 | 110 | Insets insets = getInsets(); 111 | int widthMargin = insets.left + insets.right; 112 | int heightMargin = insets.top + insets.bottom; 113 | scrollBar.setUnitIncrement(unit); 114 | scrollBar.setBlockIncrement(extent); 115 | scrollBar.setValues(0, heightMargin + extent, 0, heightMargin + max); 116 | 117 | width += scrollBar.getPreferredSize().width + widthMargin; 118 | int height = heightMargin + extent; 119 | 120 | setPopupSize(new Dimension(width, height)); 121 | } 122 | 123 | super.show(invoker, x, y); 124 | } 125 | 126 | protected static class ScrollPopupMenuLayout implements LayoutManager { 127 | @Override 128 | public void addLayoutComponent(String name, Component comp) { 129 | } 130 | 131 | @Override 132 | public void removeLayoutComponent(Component comp) { 133 | } 134 | 135 | @Override 136 | public Dimension preferredLayoutSize(Container parent) { 137 | int visibleAmount = Integer.MAX_VALUE; 138 | Dimension dim = new Dimension(); 139 | for (Component comp : parent.getComponents()) { 140 | if (comp.isVisible()) { 141 | if (comp instanceof JScrollBar scrollBar) { 142 | visibleAmount = scrollBar.getVisibleAmount(); 143 | } else { 144 | Dimension pref = comp.getPreferredSize(); 145 | dim.width = Math.max(dim.width, pref.width); 146 | dim.height += pref.height; 147 | } 148 | } 149 | } 150 | 151 | Insets insets = parent.getInsets(); 152 | dim.height = Math.min(dim.height + insets.top + insets.bottom, visibleAmount); 153 | 154 | return dim; 155 | } 156 | 157 | @Override 158 | public Dimension minimumLayoutSize(Container parent) { 159 | int visibleAmount = Integer.MAX_VALUE; 160 | Dimension dim = new Dimension(); 161 | for (Component comp : parent.getComponents()) { 162 | if (comp.isVisible()) { 163 | if (comp instanceof JScrollBar scrollBar) { 164 | visibleAmount = scrollBar.getVisibleAmount(); 165 | } else { 166 | Dimension min = comp.getMinimumSize(); 167 | dim.width = Math.max(dim.width, min.width); 168 | dim.height += min.height; 169 | } 170 | } 171 | } 172 | 173 | Insets insets = parent.getInsets(); 174 | dim.height = Math.min(dim.height + insets.top + insets.bottom, visibleAmount); 175 | 176 | return dim; 177 | } 178 | 179 | @Override 180 | public void layoutContainer(Container parent) { 181 | Insets insets = parent.getInsets(); 182 | 183 | int width = parent.getWidth() - insets.left - insets.right; 184 | int height = parent.getHeight() - insets.top - insets.bottom; 185 | 186 | int x = insets.left; 187 | int y = insets.top; 188 | int position = 0; 189 | 190 | for (Component comp : parent.getComponents()) { 191 | if ((comp instanceof JScrollBar scrollBar) && comp.isVisible()) { 192 | Dimension dim = scrollBar.getPreferredSize(); 193 | scrollBar.setBounds(x + width - dim.width, y, dim.width, height); 194 | width -= dim.width; 195 | position = scrollBar.getValue(); 196 | } 197 | } 198 | 199 | y -= position; 200 | for (Component comp : parent.getComponents()) { 201 | if (!(comp instanceof JScrollBar) && comp.isVisible()) { 202 | Dimension pref = comp.getPreferredSize(); 203 | comp.setBounds(x, y, width, pref.height); 204 | y += pref.height; 205 | } 206 | } 207 | } 208 | } 209 | } --------------------------------------------------------------------------------