Guide
不管是什么软件,大多是需要UI界面的。Burp Suite的插件开发也不例外,某些场景下也需要配合UI界面才能更好操作插件的功能。
UI界面的开发,无非是学习各种组件的使用方法,根据它们的使用特点去编写特定的事件函数。
由于组件都是前人都写好的,我们只管拿过来使用即可,主要是熟悉组件的使用和去了解组件相关的事件函数即可。
在UI界面中常见、常使用的组件无非是按钮、输入框、单选框、多选框、文本框、弹出框、切换栏...,
组件有很多种,但是不要怕,我们去繁归简,以一个最简单的按钮框进行举例,其实只要学会一个组件的使用,那么其它组件的使用都是类似的了。正所谓:以Botton为鉴,以一驭万。
当然,如果涉及到自定义组件,组件的二次开发,那么这部分的内容会复杂一点,本文不涉及这部分内容。
先介绍一下我的技术栈:
- Java
- Burp suite APIs
- IDEA
- Maven
(不同技术栈,可能步骤和导入的东西不同)
步骤:
-
使用Maven导入UI库文件:
<dependency> <groupId>com.intellij</groupId> <artifactId>forms_rt</artifactId> <version>7.0.3</version> </dependency>
-
创建UI界面平台
-
通过拖拽完成UI的设计
所有的组件都必须放到Jpanel面板下,在Jpanel面板里设置布局方式;
把你想要的组件,从右边的组件库拖到Jpanel面板里,通过放置不同的组件和不同的摆放位置,来形成你的UI界面效果。
组件之间也有树状的关系,比如JButton组件放置在JPanel组件下,那么他们就类似一个父子关系。
同时,和该UI界面对应的类也会自动去声明这些组件类的标识;注意,想要显示在Brup一个标签栏里面的话,这个UI类不要继承extends JFrame,这样这个页面就会嵌套在Brup里面。
如果继承extends JFrame,他就不是嵌套在Brup的标签栏里,这个页面会独立出来一个新的窗口显示。 - Build Project —— 自动生成组件初始化代码
设置一下自动生成代码的方式,这一步不是必须的,只是个人喜好。
注意,你拖拽好UI之后,就会自动的在.java页面生成一些UI代码,最好不要修改和覆盖他。
我的经验的是,拖拽好的时候,最初生成好的code, 最好上传一次git, 方便后期改乱了,能找回。
这个Idea,除了第一次会自动创建code,后面我也找不到按钮让他再次生成了。
留个疑问,后期在继续更新吧。 -
编写你的事件函数
这个可以通过右键生成组件的事件函数模版,有时刚创建项目的时候不弹窗让人选择(应该是个BUG),先不管这个问题,就一个回调模板自己写也没几行。public RoomUI() { button1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 这里开始写你的执行流程 System.out.println("Click the button1."); button1.setSize(100, 100); textField1.setText("I am Mysticbianry!"); } }); }
-
UI界面加到Brup插件里
主要是实现Itab接口的getTabCaption方法、getUiComponent方法。package burp; import java.awt.*; import java.io.PrintWriter; public class BurpExtender implements IBurpExtender, ITab { private IExtensionHelpers helpers; private IBurpExtenderCallbacks callbacks; private PrintWriter stdout; private PrintWriter stderr; private RoomUI roomUI; @Override public void registerExtenderCallbacks(IBurpExtenderCallbacks iBurpExtenderCallbacks) { this.callbacks = iBurpExtenderCallbacks; this.callbacks.setExtensionName("DemoBrupUI"); // helpers = callbacks.getHelpers(); this.stdout = new PrintWriter(callbacks.getStdout(), true); this.stderr = new PrintWriter(callbacks.getStderr(), true); // roomUI = new RoomUI(); callbacks.addSuiteTab(this); stdout.println("DemoBrupUI install success."); } @Override public String getTabCaption() { return "DemoBrupUI"; } @Override public Component getUiComponent() { // 这里是关键,把页面传递回来 return roomUI.$$$getRootComponent$$$(); } }
-
运行、调试
OK!
解决通信问题
两个经典的双向传输问题:
-
Brup的数据怎么传递给UI组件?
在创建RoomUI类的时候,将Burp数据通过构造器的方式插入即可,roomUI = new RoomUI(messages);
当然还有很多方式可以实现,不一一举例了。 -
UI组件的数据怎么传递给Brup?
有几种思路:- 先保存到本地配置文件里,然后去配置文件里面取;
- 通过get/set之类的方法传递出去;
- 保存到Public的全局变量里;
- ...
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...