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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
  }