11package burp ;
22
33import burp .ui .MessageDialog ;
4- import net .razorvine .pyro .NameServerProxy ;
54import net .razorvine .pyro .PyroException ;
65import net .razorvine .pyro .PyroProxy ;
7- import net .razorvine .pyro .PyroURI ;
86
97import javax .swing .*;
108import javax .swing .text .*;
2119import java .util .regex .Pattern ;
2220
2321
24- public class BurpExtender implements IBurpExtender , ITab , ActionListener , IContextMenuFactory , MouseListener , IExtensionStateListener , IIntruderPayloadProcessor ,IHttpListener {
22+ public class BurpExtender implements IBurpExtender , ITab , ActionListener , IContextMenuFactory , MouseListener , IExtensionStateListener , IIntruderPayloadProcessor ,IHttpListener , IMessageEditorTabFactory {
2523
2624 private IBurpExtenderCallbacks callbacks ;
2725 private IExtensionHelpers helpers ;
@@ -102,6 +100,9 @@ public void registerExtenderCallbacks(IBurpExtenderCallbacks c) {
102100 // register to execute actions on unload
103101 callbacks .registerExtensionStateListener (this );
104102
103+ // register editor tab
104+ callbacks .registerMessageEditorTabFactory (this );
105+
105106 // Initialize stdout and stderr
106107 stdout = new PrintWriter (callbacks .getStdout (), true );
107108 stderr = new PrintWriter (callbacks .getStderr (), true );
@@ -1082,6 +1083,90 @@ public void processHttpMessage(int toolFlag, boolean messageIsRequest, IHttpRequ
10821083
10831084 }
10841085
1086+ @ Override
1087+ public IMessageEditorTab createNewInstance (IMessageEditorController controller , boolean editable ) {
1088+ return new iMessageEditorTab (controller , editable );
1089+ }
1090+
1091+ public class iMessageEditorTab implements IMessageEditorTab {
1092+
1093+ private IMessageEditorController controller ;
1094+ private ITextEditor iTextEditor = callbacks .createTextEditor ();
1095+ private byte [] currentMessage ;
1096+
1097+
1098+ public iMessageEditorTab (IMessageEditorController controller , boolean editable ) {
1099+ this .controller = controller ;
1100+ }
1101+
1102+
1103+ @ Override
1104+ public String getTabCaption () {
1105+ return "BurpyTab" ;
1106+ }
1107+
1108+ @ Override
1109+ public Component getUiComponent () {
1110+ return iTextEditor .getComponent ();
1111+ }
1112+
1113+ @ Override
1114+ public boolean isEnabled (byte [] content , boolean isRequest ) {
1115+ return true ;
1116+ }
1117+
1118+ @ Override
1119+ public void setMessage (byte [] content , boolean isRequest ) {
1120+
1121+ String ret = "" ;
1122+ try {
1123+ ret = (String ) pyroBurpyService .call ("invoke_method" , "decrypt" , helpers .base64Encode (content ));
1124+ } catch (Exception e ) {
1125+ stderr .println (e .toString ());
1126+ StackTraceElement [] exceptionElements = e .getStackTrace ();
1127+ for (int i =0 ; i < exceptionElements .length ; i ++) {
1128+ stderr .println (exceptionElements [i ].toString ());
1129+ }
1130+ }
1131+ iTextEditor .setText (ret .getBytes (StandardCharsets .UTF_8 ));
1132+
1133+ currentMessage = ret .getBytes (StandardCharsets .UTF_8 );
1134+ }
1135+
1136+ @ Override
1137+ public byte [] getMessage () {
1138+ if (iTextEditor .isTextModified ()){
1139+ byte [] data = iTextEditor .getText ();
1140+ String ret = "" ;
1141+ try {
1142+ ret = (String ) pyroBurpyService .call ("invoke_method" , "encrypt" , helpers .base64Encode (data ));
1143+ } catch (Exception e ) {
1144+ stderr .println (e .toString ());
1145+ StackTraceElement [] exceptionElements = e .getStackTrace ();
1146+ for (int i =0 ; i < exceptionElements .length ; i ++) {
1147+ stderr .println (exceptionElements [i ].toString ());
1148+ }
1149+ }
1150+
1151+ return ret .getBytes (StandardCharsets .UTF_8 );
1152+ } else {
1153+ return currentMessage ;
1154+ }
1155+ }
1156+
1157+ @ Override
1158+ public boolean isModified () {
1159+ return iTextEditor .isTextModified ();
1160+ }
1161+
1162+ @ Override
1163+ public byte [] getSelectedData () {
1164+ return iTextEditor .getSelectedText ();
1165+ }
1166+ }
1167+
1168+
1169+
10851170 public static void main (String [] args ) throws PyroException , java .io .IOException {
10861171 // for testing purpose
10871172 System .out .println ("Initializing service" );
@@ -1106,6 +1191,5 @@ public static void main(String[] args) throws PyroException, java.io.IOException
11061191 }
11071192
11081193 }
1109-
11101194}
11111195
0 commit comments