跳到主要内容

GUI开发

实现效果

使用IDEA创建一个GUI界面,并展示在Burp中

  • 创建一个新的Tab标签页
  • 实现效果为点击按钮后获取到最新的请求并展示到tab中

涉及接口:

  • ITab

实现代码

创建项目过程省略,使用旧版API开发。

先新建一个包专门用来放UI,再使用IDEA自带的创建一个 GUI Form

new

给最外层的panel设置上字段名,我设置的是 rootPanel

image-20240922下午70313070

然后从右边拉组件到左边就行了,因为要实现的功能是点击一个按钮就获取最新的请求,所以设计的布局如下:

image-20240922下午70631718

此时UI就设计好了,接下来就是给它添加到burp的扩展中;先把最上层的rootPanel 添加一个getter 函数,方便BurpExtender类获取到。

image-20240922下午70901258

然后在Burp中引入这个UI组件,实现ITab接口加载到burp中

package burp;

import org.gm7.ui.BurpGUI;

import javax.swing.*;
import java.awt.*;

public class BurpExtender implements IBurpExtender, ITab {
// 回调对象
private IBurpExtenderCallbacks callbacks;
// 辅助类,一般用于辅助分析数据包结构
private IExtensionHelpers helpers;
private JPanel rootPanel;

// 实现 IBurpExtender 接口函数
@Override
public void registerExtenderCallbacks(IBurpExtenderCallbacks callbacks) {
// 设置插件名字
callbacks.setExtensionName("Demo");

// callbacks到处都要用,搞成类变量
this.callbacks = callbacks;

// 辅助类,一般用于辅助分析数据包结构,类变量方便其他函数调用
helpers = callbacks.getHelpers();

// ui
BurpGUI burpGUI = new BurpGUI();
rootPanel = burpGUI.getRootPanel();
// 注册组件
callbacks.customizeUiComponent(rootPanel);
callbacks.addSuiteTab(this);

}

// 组件显示的名字
@Override
public String getTabCaption() {
return "MyTab";
}

// 显示的组件
@Override
public Component getUiComponent() {
return rootPanel;
}
}

打包后测试一下,UI确实加载进去了,显示也没问题。

image-20240922下午71153662


接下来就是给UI添加一些事件了,给按钮添加点击事件

image-20240922下午71821574

因为获取历史请求要用到callbacks对象,所以我们在初始化UI的时候就先给它传进去

image-20240922下午71622849

编写事件实现代码

image-20240922下午72422571

完成打包

实现测试

image-20240922下午72555340

点击按钮后,获取到最新的请求

image-20240922下午72703944

扩展总结

  • 这里注册用的不是 registerXXX,而是用的 addSuiteTab,同时在注册之前需要用 customizeUiComponent 把组件先添加进去。
  • 整个过程中,可以先给UI画好,然后再去实现对应的功能,缺什么对象就给UI类中传什么对象。

参考

  • null