@@ -116,7 +116,7 @@ public void registerExtenderCallbacks(IBurpExtenderCallbacks callbacks) {
116116 stdout .println ("[+] " + EXTENSION_NAME + " v" + EXTENSION_VERSION + " (Legacy API) loaded successfully!" );
117117 stdout .println ("[+] Backend URL: " + configManager .getBackendUrl ());
118118 stdout .println ("[+] 功能: 提交扫描任务、配置管理" );
119- stdout .println ("[+] 右键菜单: Send to SQLMap WebUI / Send to SQLMap WebUI (选择配置 )..." );
119+ stdout .println ("[+] 右键菜单: Send to SQLMap WebUI / Send to SQLMap WebUI (配置扫描 )..." );
120120 }
121121
122122 /**
@@ -177,38 +177,45 @@ public List<JMenuItem> createMenuItems(IContextMenuInvocation invocation) {
177177 }
178178 menuItems .add (sendWithDefault );
179179
180- // 选择配置发送
181- JMenuItem sendWithOptions = new JMenuItem ("Send to SQLMap WebUI (选择配置)..." + menuSuffix );
180+ // 标记注入点并扫描 - 支持多选报文
181+ int maxMarkCount = configManager .getMaxInjectionMarkCount ();
182+ JMenuItem markInjectionPoints = new JMenuItem ("标记注入点并扫描 (*)" + menuSuffix );
182183 if (filterResult .allBinary ()) {
183- sendWithOptions .setEnabled (false );
184- sendWithOptions .setToolTipText ("所有选中的报文都是二进制格式,无法发起扫描任务" );
184+ markInjectionPoints .setEnabled (false );
185+ markInjectionPoints .setToolTipText ("所有选中的报文都是二进制格式,无法发起扫描任务" );
185186 } else {
186- sendWithOptions .addActionListener (e -> {
187+ // 超过限制时显示警告但仍然可点击(对话框会处理超限情况)
188+ if (filterResult .textCount () > maxMarkCount ) {
189+ markInjectionPoints .setToolTipText (
190+ String .format ("选中的纯文本报文数量(%d)超过标记上限(%d),仅前%d个报文可进行注入点标记" ,
191+ filterResult .textCount (), maxMarkCount , maxMarkCount ));
192+ }
193+ markInjectionPoints .addActionListener (e -> {
187194 if (filterResult .hasTextMessages ()) {
188- ConfigSelectionDialog dialog = new ConfigSelectionDialog (
189- callbacks , apiClient , configManager , uiTab );
190- dialog .show (filterResult .textMessages . get ( 0 ) );
195+ BatchInjectionMarkDialog dialog = new BatchInjectionMarkDialog (
196+ callbacks , apiClient , configManager , uiTab , helpers );
197+ dialog .show (filterResult .textMessages , filterResult . binaryMessages );
191198 }
192199 });
193200 }
194- menuItems .add (sendWithOptions );
201+ menuItems .add (markInjectionPoints );
195202
196- // 标记注入点并扫描
197- JMenuItem markInjectionPoints = new JMenuItem ("标记注入点并扫描 (*)" +
198- (filterResult .allBinary () ? " (二进制报文)" : "" ));
203+ // 配置扫描发送(高级配置对话框)
204+ JMenuItem sendWithOptions = new JMenuItem ("Send to SQLMap WebUI (配置扫描)..." + menuSuffix );
199205 if (filterResult .allBinary ()) {
200- markInjectionPoints .setEnabled (false );
201- markInjectionPoints .setToolTipText ("所有选中的报文都是二进制格式,无法发起扫描任务" );
206+ sendWithOptions .setEnabled (false );
207+ sendWithOptions .setToolTipText ("所有选中的报文都是二进制格式,无法发起扫描任务" );
202208 } else {
203- markInjectionPoints .addActionListener (e -> {
209+ sendWithOptions .addActionListener (e -> {
204210 if (filterResult .hasTextMessages ()) {
205- InjectionPointDialog dialog = new InjectionPointDialog (
206- callbacks , apiClient , configManager , uiTab );
207- dialog .show (filterResult .textMessages .get (0 ));
211+ // 使用新的高级配置对话框
212+ AdvancedScanConfigDialog dialog = new AdvancedScanConfigDialog (
213+ callbacks , apiClient , configManager , uiTab , helpers );
214+ dialog .show (filterResult .textMessages , filterResult .binaryMessages );
208215 }
209216 });
210217 }
211- menuItems .add (markInjectionPoints );
218+ menuItems .add (sendWithOptions );
212219
213220 // 提交会话Header 和 Header规则 - 仅在选中单条请求时显示
214221 if (selectedMessages .length == 1 && filterResult .hasTextMessages ()) {
0 commit comments