buby 1.5.0.pre2-java → 1.5.0.pre3-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. data/Rakefile +1 -1
  2. data/VERSION.yml +1 -1
  3. data/buby.gemspec +15 -4
  4. data/ext/buby/burp/BurpExtender.java +55 -16
  5. data/ext/burp_interfaces/burp/IBurpExtenderCallbacks.java +52 -53
  6. data/ext/burp_interfaces/burp/IContextMenuInvocation.java +26 -15
  7. data/ext/burp_interfaces/burp/IInterceptedProxyMessage.java +23 -3
  8. data/ext/burp_interfaces/burp/IProxyListener.java +1 -1
  9. data/lib/buby.rb +48 -30
  10. data/lib/buby/burp_extender.rb +339 -0
  11. data/lib/buby/burp_extender/console_frame.rb +33 -0
  12. data/lib/buby/burp_extender/console_pane.rb +26 -0
  13. data/lib/buby/burp_extender/console_tab.rb +15 -0
  14. data/lib/buby/burp_extender/context_menu.rb +29 -0
  15. data/lib/buby/burp_extender/context_menu_factory.rb +17 -0
  16. data/lib/buby/burp_extender/context_menu_item.rb +13 -0
  17. data/lib/buby/burp_extender/jcheck_box_menu_item.rb +12 -0
  18. data/lib/buby/burp_extender/jmenu.rb +11 -0
  19. data/lib/buby/burp_extender/jmenu_item.rb +12 -0
  20. data/lib/buby/burp_extender/menu.rb +11 -0
  21. data/lib/buby/burp_extender/menu_item.rb +12 -0
  22. data/lib/buby/extender.rb +156 -0
  23. data/lib/buby/implants/context_menu_invocation.rb +29 -2
  24. data/lib/buby/implants/cookie.rb +0 -1
  25. data/lib/buby/implants/extension_helpers.rb +0 -37
  26. data/lib/buby/implants/http_request_response.rb +3 -3
  27. data/lib/buby/implants/intercepted_proxy_message.rb +0 -1
  28. data/lib/buby/implants/intruder_attack.rb +0 -1
  29. data/lib/buby/implants/jruby.rb +19 -10
  30. data/lib/buby/implants/message_editor.rb +0 -1
  31. data/lib/buby/implants/message_editor_controller.rb +0 -1
  32. data/lib/buby/implants/parameter.rb +0 -1
  33. data/lib/buby/implants/request_info.rb +0 -1
  34. data/lib/buby/implants/response_info.rb +0 -1
  35. data/lib/buby/implants/scan_queue_item.rb +0 -1
  36. data/lib/buby/implants/scanner_insertion_point.rb +0 -1
  37. data/lib/buby/implants/temp_file.rb +0 -1
  38. data/lib/buby/implants/text_editor.rb +0 -1
  39. data/lib/buby/scanner_check.rb +1 -1
  40. data/lib/buby/version.rb +2 -2
  41. metadata +15 -4
  42. data/lib/buby.jar +0 -0
  43. data/lib/burp_interfaces.jar +0 -0
data/Rakefile CHANGED
@@ -138,7 +138,7 @@ task :test_console, [:script] do |t,args|
138
138
 
139
139
  require 'irb'
140
140
 
141
- require 'burpsuite_pro_v1.5.04.jar'
141
+ require File.basename Dir.glob('lib/burpsuite_pro_*.jar').last
142
142
  require 'burp_interfaces.jar'
143
143
  require 'buby.jar'
144
144
  require 'buby'
@@ -2,4 +2,4 @@
2
2
  :major: 1
3
3
  :minor: 5
4
4
  :patch: 0
5
- :build: pre2
5
+ :build: pre3
@@ -5,12 +5,12 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "buby"
8
- s.version = "1.5.0.pre2"
8
+ s.version = "1.5.0.pre3"
9
9
  s.platform = "java"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
12
12
  s.authors = ["Eric Monti, tduehr"]
13
- s.date = "2013-02-19"
13
+ s.date = "2013-03-14"
14
14
  s.description = "Buby is a mashup of JRuby with the popular commercial web security testing tool Burp Suite from PortSwigger. Burp is driven from and tied to JRuby with a Java extension using the BurpExtender API. This extension aims to add Ruby scriptability to Burp Suite with an interface comparable to the Burp's pure Java extension interface."
15
15
  s.email = "td@matasano.com"
16
16
  s.executables = ["buby"]
@@ -64,10 +64,22 @@ Gem::Specification.new do |s|
64
64
  "ext/burp_interfaces/burp/ITab.java",
65
65
  "ext/burp_interfaces/burp/ITempFile.java",
66
66
  "ext/burp_interfaces/burp/ITextEditor.java",
67
- "lib/buby.jar",
68
67
  "lib/buby.rb",
68
+ "lib/buby/burp_extender.rb",
69
+ "lib/buby/burp_extender/console_frame.rb",
70
+ "lib/buby/burp_extender/console_pane.rb",
71
+ "lib/buby/burp_extender/console_tab.rb",
72
+ "lib/buby/burp_extender/context_menu.rb",
73
+ "lib/buby/burp_extender/context_menu_factory.rb",
74
+ "lib/buby/burp_extender/context_menu_item.rb",
75
+ "lib/buby/burp_extender/jcheck_box_menu_item.rb",
76
+ "lib/buby/burp_extender/jmenu.rb",
77
+ "lib/buby/burp_extender/jmenu_item.rb",
78
+ "lib/buby/burp_extender/menu.rb",
79
+ "lib/buby/burp_extender/menu_item.rb",
69
80
  "lib/buby/context_menu_factory.rb",
70
81
  "lib/buby/cookie.rb",
82
+ "lib/buby/extender.rb",
71
83
  "lib/buby/http_listener.rb",
72
84
  "lib/buby/implants.rb",
73
85
  "lib/buby/implants/buby_array_wrapper.rb",
@@ -109,7 +121,6 @@ Gem::Specification.new do |s|
109
121
  "lib/buby/session_handling_action.rb",
110
122
  "lib/buby/tab.rb",
111
123
  "lib/buby/version.rb",
112
- "lib/burp_interfaces.jar",
113
124
  "samples/drb_buby.rb",
114
125
  "samples/drb_sample_cli.rb",
115
126
  "samples/mechanize_burp.rb",
@@ -7,6 +7,8 @@ import org.jruby.javasupport.JavaUtil;
7
7
  import org.jruby.runtime.ThreadContext;
8
8
  import org.jruby.runtime.builtin.IRubyObject;
9
9
  import org.jruby.RubyBoolean;
10
+ import java.util.List;
11
+ import javax.swing.JMenuItem;
10
12
 
11
13
  /**
12
14
  * This is an implementation of the BurpExtender/IBurpExtender interface
@@ -15,7 +17,7 @@ import org.jruby.RubyBoolean;
15
17
  * This is a complete implementation of the Burp Extender interfaces available
16
18
  * as of Burp Suite 1.4
17
19
  */
18
- public class BurpExtender implements IBurpExtender, IExtensionStateListener, IHttpListener, IProxyListener, IScannerListener {
20
+ public class BurpExtender implements IBurpExtender, IExtensionStateListener, IHttpListener, IProxyListener, IScannerListener, IContextMenuFactory, IScopeChangeListener {
19
21
 
20
22
  // Legacy callbacks
21
23
  public final static String L_CLOSE_METH = "evt_application_closing";
@@ -24,15 +26,20 @@ public class BurpExtender implements IBurpExtender, IExtensionStateListener, IHt
24
26
  public final static String L_MAINARGS_METH = "evt_commandline_args";
25
27
  public final static String L_PROXYMSG_METH = "evt_proxy_message_raw";
26
28
  public final static String L_SCANISSUE_METH = "evt_scan_issue";
27
- public final static String L_REG_METH = "evt_register_callbacks";
28
-
29
- // new callbacks
30
- public final static String INIT_METH = "extender_initialize";
31
- public final static String PROXYMSG_METH = "process_proxy_message";
32
- public final static String HTTPMSG_METH = "process_http_messge";
33
- public final static String SCANISSUE_METH = "new_scan_issue";
34
- public final static String REG_METH = "register_callbacks";
35
- public final static String UNLOAD_METH = "extension_unloaded";
29
+ public final static String L_REG_METH = "evt_register_callbacks";
30
+
31
+ // new style callbacks
32
+ public final static String INIT_METH = "extender_initialize";
33
+ public final static String REG_METH = "register_callbacks";
34
+ public final static String PROXYMSG_METH = "process_proxy_message";
35
+ public final static String HTTPMSG_METH = "process_http_messge";
36
+ public final static String SCANISSUE_METH = "new_scan_issue";
37
+
38
+ // new callback methods
39
+ public final static String UNLOAD_METH = "extension_unloaded";
40
+ public final static String MENUFAC_METH = "create_menu_items";
41
+ public final static String SCOPE_METH = "scope_changed";
42
+
36
43
 
37
44
  // Flag used to identify Burp Suite as a whole.
38
45
  public static final int TOOL_SUITE = 0x00000001;
@@ -134,13 +141,14 @@ public class BurpExtender implements IBurpExtender, IExtensionStateListener, IHt
134
141
  * <code>IBurpExtenderCallbacks</code> interface.
135
142
  */
136
143
  public void registerExtenderCallbacks(IBurpExtenderCallbacks cb) {
144
+ cb.setExtensionName("Buby");
145
+ cb.issueAlert("[BurpExtender] registering JRuby handler callbacks");
146
+ cb.registerExtensionStateListener(this);
147
+ cb.registerHttpListener(this);
148
+ cb.registerScannerListener(this);
149
+ cb.registerContextMenuFactory(this);
150
+ cb.registerScopeChangeListener(this);
137
151
  if(r_obj != null) {
138
- // TODO should look for Buby class instead
139
- cb.setExtensionName("Buby v" + r_obj.getType().defineOrGetModuleUnder("Version").getConstant("STRING"));
140
- cb.issueAlert("[BurpExtender] registering JRuby handler callbacks");
141
- cb.registerExtensionStateListener(this);
142
- cb.registerHttpListener(this);
143
- cb.registerScannerListener(this);
144
152
  boolean respondsLegacyRegister = r_obj.respondsTo(L_REG_METH);
145
153
  boolean respondsRegister = r_obj.respondsTo(REG_METH);
146
154
 
@@ -429,5 +437,36 @@ public class BurpExtender implements IBurpExtender, IExtensionStateListener, IHt
429
437
  if (r_obj != null && r_obj.respondsTo(UNLOAD_METH))
430
438
  r_obj.callMethod(ctx(r_obj), UNLOAD_METH);
431
439
  }
440
+
441
+ /**
442
+ * This method will be called by Burp when the user invokes a context menu
443
+ * anywhere within Burp. The factory can then provide any custom context
444
+ * menu items that should be displayed in the context menu, based on the
445
+ * details of the menu invocation.
446
+ *
447
+ * @param invocation An object that implements the
448
+ * <code>IMessageEditorTabFactory</code> interface, which the extension can
449
+ * query to obtain details of the context menu invocation.
450
+ * @return A list of custom menu items (which may include sub-menus,
451
+ * checkbox menu items, etc.) that should be displayed. Extensions may
452
+ * return
453
+ * <code>null</code> from this method, to indicate that no menu items are
454
+ * required.
455
+ */
456
+ public List<JMenuItem> createMenuItems(IContextMenuInvocation invocation) {
457
+ // IRubyObject ret = null;
458
+ if (r_obj != null && r_obj.respondsTo(MENUFAC_METH))
459
+ return (RubyArray)r_obj.callMethod(ctx(r_obj), MENUFAC_METH, to_ruby(rt(r_obj), invocation));
460
+ return null;
461
+ }
462
+
463
+ /**
464
+ * This method is invoked whenever a change occurs to Burp's suite-wide
465
+ * target scope.
466
+ */
467
+ public void scopeChanged() {
468
+ if (r_obj != null && r_obj.respondsTo(SCOPE_METH))
469
+ r_obj.callMethod(ctx(r_obj), SCOPE_METH);
470
+ }
432
471
  }
433
472
 
@@ -243,6 +243,11 @@ public interface IBurpExtenderCallbacks
243
243
  */
244
244
  void registerSessionHandlingAction(ISessionHandlingAction action);
245
245
 
246
+ /**
247
+ * This method is used to unload the extension from Burp Suite.
248
+ */
249
+ void unloadExtension();
250
+
246
251
  /**
247
252
  * This method is used to add a custom tab to the main Burp Suite window.
248
253
  *
@@ -274,23 +279,29 @@ public interface IBurpExtenderCallbacks
274
279
  *
275
280
  * @param controller An object created by the extension that implements the
276
281
  * <code>IMessageEditorController</code> interface. This parameter is
277
- * optional and may be
278
- * <code>null</code>. If it is provided, then the message editor will query
279
- * the controller when required to obtain details about the currently
280
- * displayed message, including the
282
+ * optional and may be <code>null</code>. If it is provided, then the
283
+ * message editor will query the controller when required to obtain details
284
+ * about the currently displayed message, including the
281
285
  * <code>IHttpService</code> for the message, and the associated request or
282
286
  * response message. If a controller is not provided, then the message
283
287
  * editor will not support context menu actions, such as sending requests to
284
288
  * other Burp tools.
285
289
  * @param editable Indicates whether the editor created should be editable,
286
290
  * or used only for message viewing.
287
- * @return An object that implements the
288
- * <code>IMessageEditor</code> interface, and which the extension can use in
289
- * its own UI.
291
+ * @return An object that implements the <code>IMessageEditor</code>
292
+ * interface, and which the extension can use in its own UI.
290
293
  */
291
294
  IMessageEditor createMessageEditor(IMessageEditorController controller,
292
295
  boolean editable);
293
296
 
297
+ /**
298
+ * This method returns the command line arguments that were passed to Burp
299
+ * on startup.
300
+ *
301
+ * @return The command line arguments that were passed to Burp on startup.
302
+ */
303
+ String[] getCommandLineArguments();
304
+
294
305
  /**
295
306
  * This method is used to save configuration settings for the extension in a
296
307
  * persistent way that survives reloads of the extension and of Burp Suite.
@@ -298,9 +309,8 @@ public interface IBurpExtenderCallbacks
298
309
  * <code>loadExtensionSetting()</code>.
299
310
  *
300
311
  * @param name The name of the setting.
301
- * @param value The value of the setting. If this value is
302
- * <code>null</code> then any existing setting with the specified name will
303
- * be removed.
312
+ * @param value The value of the setting. If this value is <code>null</code>
313
+ * then any existing setting with the specified name will be removed.
304
314
  */
305
315
  void saveExtensionSetting(String name, String value);
306
316
 
@@ -310,8 +320,8 @@ public interface IBurpExtenderCallbacks
310
320
  * <code>saveExtensionSetting()</code>.
311
321
  *
312
322
  * @param name The name of the setting.
313
- * @return The value of the setting, or
314
- * <code>null</code> if no value is set.
323
+ * @return The value of the setting, or <code>null</code> if no value is
324
+ * set.
315
325
  */
316
326
  String loadExtensionSetting(String name);
317
327
 
@@ -319,9 +329,8 @@ public interface IBurpExtenderCallbacks
319
329
  * This method is used to create a new instance of Burp's plain text editor,
320
330
  * for the extension to use in its own UI.
321
331
  *
322
- * @return An object that implements the
323
- * <code>ITextEditor</code> interface, and which the extension can use in
324
- * its own UI.
332
+ * @return An object that implements the <code>ITextEditor</code> interface,
333
+ * and which the extension can use in its own UI.
325
334
  */
326
335
  ITextEditor createTextEditor();
327
336
 
@@ -335,8 +344,8 @@ public interface IBurpExtenderCallbacks
335
344
  * @param useHttps Flags whether the protocol is HTTPS or HTTP.
336
345
  * @param request The full HTTP request.
337
346
  * @param tabCaption An optional caption which will appear on the Repeater
338
- * tab containing the request. If this value is
339
- * <code>null</code> then a default tab index will be displayed.
347
+ * tab containing the request. If this value is <code>null</code> then a
348
+ * default tab index will be displayed.
340
349
  */
341
350
  void sendToRepeater(
342
351
  String host,
@@ -460,9 +469,9 @@ public interface IBurpExtenderCallbacks
460
469
  *
461
470
  * @param httpService The HTTP service to which the request should be sent.
462
471
  * @param request The full HTTP request.
463
- * @return An object that implements the
464
- * <code>IHttpRequestResponse</code> interface, and which the extension can
465
- * query to obtain the details of the response.
472
+ * @return An object that implements the <code>IHttpRequestResponse</code>
473
+ * interface, and which the extension can query to obtain the details of the
474
+ * response.
466
475
  */
467
476
  IHttpRequestResponse makeHttpRequest(IHttpService httpService,
468
477
  byte[] request);
@@ -488,8 +497,8 @@ public interface IBurpExtenderCallbacks
488
497
  * current Suite-wide scope.
489
498
  *
490
499
  * @param url The URL to query.
491
- * @return Returns
492
- * <code>true</code> if the URL is within the current Suite-wide scope.
500
+ * @return Returns <code>true</code> if the URL is within the current
501
+ * Suite-wide scope.
493
502
  */
494
503
  boolean isInScope(java.net.URL url);
495
504
 
@@ -556,9 +565,8 @@ public interface IBurpExtenderCallbacks
556
565
  * <code>ISessionHandlingAction</code> can query and update the cookie jar
557
566
  * in order to handle unusual session handling mechanisms.
558
567
  *
559
- * @return A list of
560
- * <code>ICookie</code> objects representing the contents of Burp's session
561
- * handling cookie jar.
568
+ * @return A list of <code>ICookie</code> objects representing the contents
569
+ * of Burp's session handling cookie jar.
562
570
  */
563
571
  List<ICookie> getCookieJarContents();
564
572
 
@@ -568,11 +576,10 @@ public interface IBurpExtenderCallbacks
568
576
  * <code>ISessionHandlingAction</code> can query and update the cookie jar
569
577
  * in order to handle unusual session handling mechanisms.
570
578
  *
571
- * @param cookie An
572
- * <code>ICookie</code> object containing details of the cookie to be
573
- * updated. If the cookie jar already contains a cookie that matches the
574
- * specified domain and name, then that cookie will be updated with the new
575
- * value and expiration, unless the new value is
579
+ * @param cookie An <code>ICookie</code> object containing details of the
580
+ * cookie to be updated. If the cookie jar already contains a cookie that
581
+ * matches the specified domain and name, then that cookie will be updated
582
+ * with the new value and expiration, unless the new value is
576
583
  * <code>null</code>, in which case the cookie will be removed. If the
577
584
  * cookie jar does not already contain a cookie that matches the specified
578
585
  * domain and name, then the cookie will be added.
@@ -665,8 +672,7 @@ public interface IBurpExtenderCallbacks
665
672
  * of runtime data, avoiding the need to retain that data in memory.
666
673
  *
667
674
  * @param buffer The data to be saved to a temporary file.
668
- * @return An object that implements the
669
- * <code>ITempFile</code> interface.
675
+ * @return An object that implements the <code>ITempFile</code> interface.
670
676
  */
671
677
  ITempFile saveToTempFile(byte[] buffer);
672
678
 
@@ -677,9 +683,8 @@ public interface IBurpExtenderCallbacks
677
683
  * <code>IHttpRequestResponse</code> objects into a form suitable for
678
684
  * long-term storage.
679
685
  *
680
- * @param httpRequestResponse The
681
- * <code>IHttpRequestResponse</code> object whose request and response
682
- * messages are to be saved to temporary files.
686
+ * @param httpRequestResponse The <code>IHttpRequestResponse</code> object
687
+ * whose request and response messages are to be saved to temporary files.
683
688
  * @return An object that implements the
684
689
  * <code>IHttpRequestResponsePersisted</code> interface.
685
690
  */
@@ -693,19 +698,18 @@ public interface IBurpExtenderCallbacks
693
698
  * payload positions, Scanner insertion points, and highlights in Scanner
694
699
  * issues.
695
700
  *
696
- * @param httpRequestResponse The
697
- * <code>IHttpRequestResponse</code> object to which the markers should be
698
- * applied.
701
+ * @param httpRequestResponse The <code>IHttpRequestResponse</code> object
702
+ * to which the markers should be applied.
699
703
  * @param requestMarkers A list of index pairs representing the offsets of
700
704
  * markers to be applied to the request message. Each item in the list must
701
705
  * be an int[2] array containing the start and end offsets for the marker.
702
- * This parameter is optional and may be
703
- * <code>null</code> if no request markers are required.
706
+ * This parameter is optional and may be <code>null</code> if no request
707
+ * markers are required.
704
708
  * @param responseMarkers A list of index pairs representing the offsets of
705
709
  * markers to be applied to the response message. Each item in the list must
706
710
  * be an int[2] array containing the start and end offsets for the marker.
707
- * This parameter is optional and may be
708
- * <code>null</code> if no response markers are required.
711
+ * This parameter is optional and may be <code>null</code> if no response
712
+ * markers are required.
709
713
  * @return An object that implements the
710
714
  * <code>IHttpRequestResponseWithMarkers</code> interface.
711
715
  */
@@ -718,8 +722,7 @@ public interface IBurpExtenderCallbacks
718
722
  * This method is used to obtain the descriptive name for the Burp tool
719
723
  * identified by the tool flag provided.
720
724
  *
721
- * @param toolFlag A flag identifying a Burp tool (
722
- * <code>TOOL_PROXY</code>,
725
+ * @param toolFlag A flag identifying a Burp tool ( <code>TOOL_PROXY</code>,
723
726
  * <code>TOOL_SCANNER</code>, etc.). Tool flags are defined within this
724
727
  * interface.
725
728
  * @return The descriptive name for the specified tool.
@@ -746,11 +749,9 @@ public interface IBurpExtenderCallbacks
746
749
  * request parameter.
747
750
  *
748
751
  * @param request The request to be parsed.
749
- * @return An array of:
750
- * <code>String[] { name, value, type }</code> containing details of the
751
- * parameters contained within the request.
752
- * @deprecated Use
753
- * <code>IExtensionHelpers.analyzeRequest()</code> instead.
752
+ * @return An array of: <code>String[] { name, value, type }</code>
753
+ * containing details of the parameters contained within the request.
754
+ * @deprecated Use <code>IExtensionHelpers.analyzeRequest()</code> instead.
754
755
  */
755
756
  @Deprecated
756
757
  String[][] getParameters(byte[] request);
@@ -761,8 +762,7 @@ public interface IBurpExtenderCallbacks
761
762
  *
762
763
  * @param message The request to be parsed.
763
764
  * @return An array of HTTP headers.
764
- * @deprecated Use
765
- * <code>IExtensionHelpers.analyzeRequest()</code> or
765
+ * @deprecated Use <code>IExtensionHelpers.analyzeRequest()</code> or
766
766
  * <code>IExtensionHelpers.analyzeResponse()</code> instead.
767
767
  */
768
768
  @Deprecated
@@ -776,8 +776,7 @@ public interface IBurpExtenderCallbacks
776
776
  * @param menuItemCaption The caption to be displayed on the menu item.
777
777
  * @param menuItemHandler The handler to be invoked when the user clicks on
778
778
  * the menu item.
779
- * @deprecated Use
780
- * <code>registerContextMenuFactory()</code> instead.
779
+ * @deprecated Use <code>registerContextMenuFactory()</code> instead.
781
780
  */
782
781
  @Deprecated
783
782
  void registerMenuItem(
@@ -80,9 +80,8 @@ public interface IContextMenuInvocation
80
80
  * This method can be used to retrieve the native Java input event that was
81
81
  * the trigger for the context menu invocation.
82
82
  *
83
- * @return The
84
- * <code>InputEvent</code> that was the trigger for the context menu
85
- * invocation.
83
+ * @return The <code>InputEvent</code> that was the trigger for the context
84
+ * menu invocation.
86
85
  */
87
86
  InputEvent getInputEvent();
88
87
 
@@ -113,8 +112,7 @@ public interface IContextMenuInvocation
113
112
  * user's selection in the current message. If the user has not made any
114
113
  * selection in the current message, both offsets indicate the position of
115
114
  * the caret within the editor. If the menu is not being invoked from a
116
- * message editor, the method returns
117
- * <code>null</code>.
115
+ * message editor, the method returns <code>null</code>.
118
116
  */
119
117
  int[] getSelectionBounds();
120
118
 
@@ -123,11 +121,25 @@ public interface IContextMenuInvocation
123
121
  * responses that were shown or selected by the user when the context menu
124
122
  * was invoked.
125
123
  *
126
- * @return An array of
127
- * <code>IHttpRequestResponse</code> objects representing the items that
128
- * were shown or selected by the user when the context menu was invoked.
129
- * This method returns
130
- * <code>null</code> if no messages are applicable to the invocation.
124
+ * <b>Note:</b> For performance reasons, the objects returned from this
125
+ * method are tied to the originating context of the messages within the
126
+ * Burp UI. For example, if a context menu is invoked on the Proxy intercept
127
+ * panel, then the
128
+ * <code>IHttpRequestResponse</code> returned by this method will reflect
129
+ * the current contents of the interception panel, and this will change when
130
+ * the current message has been forwarded or dropped. If your extension
131
+ * needs to store details of the message for which the context menu has been
132
+ * invoked, then you should query those details from the
133
+ * <code>IHttpRequestResponse</code> at the time of invocation, or you
134
+ * should use
135
+ * <code>IBurpExtenderCallbacks.saveBuffersToTempFiles()</code> to create a
136
+ * persistent read-only copy of the
137
+ * <code>IHttpRequestResponse</code>.
138
+ *
139
+ * @return An array of <code>IHttpRequestResponse</code> objects
140
+ * representing the items that were shown or selected by the user when the
141
+ * context menu was invoked. This method returns <code>null</code> if no
142
+ * messages are applicable to the invocation.
131
143
  */
132
144
  IHttpRequestResponse[] getSelectedMessages();
133
145
 
@@ -135,11 +147,10 @@ public interface IContextMenuInvocation
135
147
  * This method can be used to retrieve details of the Scanner issues that
136
148
  * were selected by the user when the context menu was invoked.
137
149
  *
138
- * @return An array of
139
- * <code>IScanIssue</code> objects representing the issues that were
140
- * selected by the user when the context menu was invoked. This method
141
- * returns
142
- * <code>null</code> if no Scanner issues are applicable to the invocation.
150
+ * @return An array of <code>IScanIssue</code> objects representing the
151
+ * issues that were selected by the user when the context menu was invoked.
152
+ * This method returns <code>null</code> if no Scanner issues are applicable
153
+ * to the invocation.
143
154
  */
144
155
  IScanIssue[] getSelectedIssues();
145
156
  }