1+ from java .awt import Font
2+ from javax .swing import JScrollPane , JTextPane
3+ from javax .swing .text import SimpleAttributeSet
4+
5+ from burp import IBurpExtender , IExtensionStateListener , IHttpListener , ITab
6+
7+ import base64
8+ import traceback
9+
10+
11+ class BurpExtender (IBurpExtender , IExtensionStateListener , IHttpListener , ITab ):
12+ def registerExtenderCallbacks (self , callbacks ):
13+ self .callbacks = callbacks
14+ self .helpers = callbacks .helpers
15+
16+ self .scriptpane = JTextPane ()
17+ self .scriptpane .setFont (Font ('Monospaced' , Font .PLAIN , 11 ))
18+
19+ self .scrollpane = JScrollPane ()
20+ self .scrollpane .setViewportView (self .scriptpane )
21+
22+ self ._code = compile ('' , '<string>' , 'exec' )
23+ self ._script = ''
24+
25+ script = callbacks .loadExtensionSetting ('script' )
26+
27+ if script :
28+ script = base64 .b64decode (script )
29+
30+ self .scriptpane .document .insertString (
31+ self .scriptpane .document .length ,
32+ script ,
33+ SimpleAttributeSet ())
34+
35+ self ._script = script
36+ self ._code = compile (script , '<string>' , 'exec' )
37+
38+ callbacks .registerExtensionStateListener (self )
39+ callbacks .registerHttpListener (self )
40+ callbacks .customizeUiComponent (self .getUiComponent ())
41+ callbacks .addSuiteTab (self )
42+
43+ self .scriptpane .requestFocus ()
44+
45+ def extensionUnloaded (self ):
46+ try :
47+ self .callbacks .saveExtensionSetting (
48+ 'script' , base64 .b64encode (self ._script ))
49+ except Exception :
50+ traceback .print_exc (file = self .callbacks .getStderr ())
51+ return
52+
53+ def processHttpMessage (self , toolFlag , messageIsRequest , messageInfo ):
54+ try :
55+ globals_ = {}
56+ locals_ = {'extender' : self ,
57+ 'callbacks' : self .callbacks ,
58+ 'helpers' : self .helpers ,
59+ 'toolFlag' : toolFlag ,
60+ 'messageIsRequest' : messageIsRequest ,
61+ 'messageInfo' : messageInfo
62+ }
63+ exec (self .script , globals_ , locals_ )
64+ except Exception :
65+ traceback .print_exc (file = self .callbacks .getStderr ())
66+ return
67+
68+ def getTabCaption (self ):
69+ return 'Script'
70+
71+ def getUiComponent (self ):
72+ return self .scrollpane
73+
74+ @property
75+ def script (self ):
76+ end = self .scriptpane .document .length
77+ _script = self .scriptpane .document .getText (0 , end )
78+
79+ if _script == self ._script :
80+ return self ._code
81+
82+ self ._script = _script
83+ self ._code = compile (_script , '<string>' , 'exec' )
84+ return self ._code
0 commit comments