BurpSuite外掛開發指南之 API 下篇
0x00 前言
此文是接著 《BurpSuite外掛開發指南之 API 上篇》 所寫,此篇中將要介紹的 API 和上篇有著緊密的聯絡,所以建議讀者可以將上下篇作為一個整體去看待。
《BurpSuite 外掛開發指南》系列文章如下:
- 《BurpSuite外掛開發指南之 API 篇》
- 《BurpSuite外掛開發指南之 Java 篇》
- 《BurpSuite外掛開發指南之 Python 篇》
0x01 API 參考
IMessageEditor
public interface IMessageEditor
此介面被用於使用 Burp 的 HTTP 訊息編輯框的例項提供擴充套件功能,以便擴充套件外掛可以在它自己的 UI 中使用訊息編輯框,擴充套件外掛可以透過呼叫 IBurpExtenderCallbacks.createMessageEditor() 獲得此介面的例項。
此介面提供了以下方法:
#!java
// 此方法返回了編輯器的 UI 元件,擴充套件外掛可以將其新增到自己的 UI 中
java.awt.Component getComponent()
// 此方法用於獲取當前已顯示的訊息,此訊息可能已被使用者修改
byte[] getMessage()
// 此方法返回了使用者當前所選擇的資料
byte[] getSelectedData()
// 此方法用於決定當前的訊息是否可被使用者修改
boolean isMessageModified()
// 此方法用於將一個 HTTP 訊息顯示在編輯器中
void setMessage(byte[] message, boolean isRequest)
注: 此介面需要與 IMessageEditorTabFactory 等相關介面一起使用。
Demo code:
請見 IMessageEditorTabFactory 的例項程式碼。
IMessageEditorController
public interface IMessageEditorController
此介面被用於 IMessageEditor 獲取當前顯示的訊息的細節。建立了 Burp 的 HTTP 訊息編輯器例項的擴充套件外掛可以有選擇的實現 IMessageEditorController介面,當擴充套件外掛需要當前訊息的其他資訊時,編輯器將會呼叫此介面(例如:傳送當前訊息到其他的 Burp 工具中)。擴充套件透過 IMessageEditorTabFactory 工廠提供自定義的編輯器標籤頁,此工廠的 createNewInstance 方法接受一個由該工廠所生成的每一個標籤頁的IMessageEditorController 物件的引用,當標籤頁需要當前訊息的其他資訊時,則會呼叫該物件。
此方法提供了以下方法:
#!java
// 此方法用於獲取當前訊息的 HTTP 服務資訊
IHttpService getHttpService()
// 此方法用於獲取當前訊息的 HTTP 請求(也有可能是一個響應訊息)
byte[] getRequest()
// 此方法用於獲取當前訊息的 HTTP 響應(也有可能是一個請求訊息)
byte[] getResponse()
Demo code:
請見 IMessageEditorTabFactory 的例項程式碼。
IMessageEditorTab
public interface IMessageEditorTab
擴充套件外掛透過註冊 IMessageEditorTabFactory 工廠,此工廠的createNewInstance返回一個當前介面的例項,Burp 將會在其 HTTP 訊息編輯器中建立自定義的標籤頁。
此介面提供瞭如下方法:
#!java
// 此方法返回當前顯示的訊息
byte[] getMessage()
// 此方法用於獲取當前已被使用者選擇的資料
byte[] getSelectedData()
// 此方法返回自定義標籤頁的標題
java.lang.String getTabCaption()
// 此方法返回自定義標籤頁內容的元件
java.awt.Component getUiComponent()
// 此方法用於指示在顯示一個新的 HTTP 訊息時,是否啟用自定義的標籤頁
boolean isEnabled(byte[] content, boolean isRequest)
// 此方法用於決定當前顯示的訊息是否可被使用者修改
boolean isModified()
// 此方法可以顯示一個新的訊息或者清空已存在的訊息
void setMessage(byte[] content, boolean isRequest)
Demo code:
請見 IMessageEditorTabFactory 的例項程式碼。
IMessageEditorTabFactory
public interface IMessageEditorTabFactory
擴充套件可以實現此介面,並且可以呼叫 IBurpExtenderCallbacks.registerMessageEditorTabFactory() 註冊一個自定義的訊息編輯器標籤頁的工廠。擴充套件外掛可以在 Burp 的 HTTP 編輯器中渲染或編輯 HTTP 訊息。
此介面提供了一個方法:
#!java
// Burp 將會對每一個 HTTP 訊息編輯器呼叫一次此方法,此工廠必須返回一個新的 IMessageEditorTab 物件
IMessageEditorTab createNewInstance(IMessageEditorController controller, boolean editable)
Demo code:
#!java
package burp;
import java.awt.Component;
import java.io.PrintWriter;
public class BurpExtender implements IBurpExtender, IMessageEditorTabFactory{
public PrintWriter stdout;
public IExtensionHelpers helpers;
private IBurpExtenderCallbacks callbacks;
@Override
public void registerExtenderCallbacks(final IBurpExtenderCallbacks callbacks){
this.stdout = new PrintWriter(callbacks.getStdout(), true);
this.callbacks = callbacks;
this.helpers = callbacks.getHelpers();
callbacks.setExtensionName("Her0in");
callbacks.registerMessageEditorTabFactory(this);
}
@Override
public IMessageEditorTab createNewInstance(
IMessageEditorController controller, boolean editable) {
// 返回 IMessageEditorTab 的例項
return new iMessageEditorTab();
}
class iMessageEditorTab implements IMessageEditorTab{
// 建立一個新的文字編輯器
private ITextEditor iTextEditor = callbacks.createTextEditor();
@Override
public String getTabCaption() {
// 設定訊息編輯器標籤頁的標題
return "測試 MessageEditorTab";
}
@Override
public Component getUiComponent() {
// 返回 iTextEditor 的元件資訊,當然也可以放置其他的元件
return iTextEditor.getComponent();
}
@Override
public boolean isEnabled(byte[] content, boolean isRequest) {
// 在顯示一個新的 HTTP 訊息時,啟用自定義的標籤頁
// 透過 content 和 isRequest 也可以對特定的訊息進行設定
return true;
}
@Override
public void setMessage(byte[] content, boolean isRequest) {
// 把請求訊息裡面的 data 引數進行 Base64 編碼操作
// 這裡並未處理引數中沒有 data 時的異常
IParameter parameter = helpers.getRequestParameter(content, "data");
stdout.println("data = " + parameter.getValue());
iTextEditor.setText(helpers.stringToBytes(helpers.base64Encode(parameter.getValue())));
}
@Override
public byte[] getMessage() {
// 獲取 iTextEditor 的文字
return iTextEditor.getText();
}
@Override
public boolean isModified() {
// 允許使用者修改當前的訊息
return true;
}
@Override
public byte[] getSelectedData() {
// 直接返回 iTextEditor 中選中的文字
return iTextEditor.getSelectedText();
}
}
}
載入上述程式碼生成的外掛後,會顯示自定義的標籤頁和文字編輯器。
注意:官網提供的自定義訊息編輯器的程式碼有誤!
IParameter
public interface IParameter
此介面用於操控 HTTP 請求引數,開發者透過此介面可以靈活的獲取請求或響應裡的引數。
#!java
// 此方法用於獲取引數名稱
java.lang.String getName()
// 此方法用於獲取在 HTTP 請求裡面的最後一個引數的名稱
int getNameEnd()
// 此方法用於獲取在 HTTP 請求裡面的第一個引數的名稱
int getNameStart()
// 此方法用於獲取引數型別,引數的型別在 IParameter 介面中有定義
byte getType()
// 此方法用於獲取引數的值
java.lang.String getValue()
// 此方法用於獲取最後一個引數的值
int getValueEnd()
// 此方法用於獲取第一個引數的值
int getValueStart()
Demo code:
#!java
package burp;
import java.io.PrintWriter;
import java.util.List;
public class BurpExtender implements IBurpExtender, IHttpListener{
public PrintWriter stdout;
public IExtensionHelpers helpers;
private IBurpExtenderCallbacks callbacks;
@Override
public void registerExtenderCallbacks(final IBurpExtenderCallbacks callbacks){
this.stdout = new PrintWriter(callbacks.getStdout(), true);
this.callbacks = callbacks;
this.helpers = callbacks.getHelpers();
callbacks.setExtensionName("Her0in");
callbacks.registerHttpListener(this);
}
@Override
public void processHttpMessage(int toolFlag, boolean messageIsRequest,
IHttpRequestResponse messageInfo) {
// 獲取請求中的引數
if(messageIsRequest){
IRequestInfo iRequestInfo = helpers.analyzeRequest(messageInfo);
// 獲取請求中的所有引數
List<IParameter> iParameters = iRequestInfo.getParameters();
for (IParameter iParameter : iParameters) {
if(iParameter.getType() == IParameter.PARAM_URL)
stdout.println("引數:" + iParameter.getName() + " 在 URL中");
stdout.println("引數:" + iParameter.getName() + " 的值為:" + iParameter.getValue());
}
}
}
}
載入上述程式碼生成的外掛後,執行效果如下圖所示:
IProxyListener
public interface IProxyListener
擴充套件可以實現此介面,並且可以透過呼叫 IBurpExtenderCallbacks.registerProxyListener() 註冊一個代理監聽器。在代理工具處理了請求或響應後會通知此監聽器。擴充套件外掛透過註冊這樣一個監聽器,對這些訊息執行自定義的分析或修改操作。
此介面提供了一個很常用的方法:
#!java
// 當代理工具處理 HTTP 訊息時則會呼叫此方法
void processProxyMessage(boolean messageIsRequest, IInterceptedProxyMessage message)
Demo code:
#!java
package burp;
import java.io.PrintWriter;
public class BurpExtender implements IBurpExtender, IProxyListener{
public PrintWriter stdout;
public IExtensionHelpers helpers;
private IBurpExtenderCallbacks callbacks;
@Override
public void registerExtenderCallbacks(final IBurpExtenderCallbacks callbacks){
this.stdout = new PrintWriter(callbacks.getStdout(), true);
this.callbacks = callbacks;
this.helpers = callbacks.getHelpers();
callbacks.setExtensionName("Her0in");
callbacks.registerProxyListener(this);
}
@Override
public void processProxyMessage(boolean messageIsRequest,
IInterceptedProxyMessage message) {
// TODO here
}
}
IRequestInfo
public interface IRequestInfo
此介面被用於獲取一個 HTTP 請求的詳細資訊。擴充套件外掛可以透過呼叫 IExtensionHelpers.analyzeRequest() 獲得一個 IRequestInfo 物件。
此介面提供了以下方法:
#!java
// 此方法用於獲取 HTTP body 在請求訊息中的起始偏移量
int getBodyOffset()
// 此方法用於獲取請求訊息的 HTTP 型別
byte getContentType()
// 此方法用於獲取請求中包含的 HTTP 頭
java.util.List<java.lang.String> getHeaders()
// 此方法用於獲取請求的 HTTP 方法
java.lang.String getMethod()
// 此方法用於獲取請求中包含的引數
java.util.List<IParameter> getParameters()
// 此方法用於獲取請求中的 URL
java.net.URL getUrl()
Demo code:
#!java
package burp;
import java.io.PrintWriter;
public class BurpExtender implements IBurpExtender, IHttpListener{
public PrintWriter stdout;
public IExtensionHelpers helpers;
@Override
public void registerExtenderCallbacks(final IBurpExtenderCallbacks callbacks){
this.stdout = new PrintWriter(callbacks.getStdout(), true);
this.helpers = callbacks.getHelpers();
callbacks.setExtensionName("Her0in");
callbacks.registerHttpListener(this);
}
@Override
public void processHttpMessage(int toolFlag, boolean messageIsRequest,
IHttpRequestResponse messageInfo) {
// 列印出請求的 Url 和 響應碼
if(messageIsRequest){
stdout.println(helpers.bytesToString(messageInfo.getRequest()));
}
else{
IResponseInfo responseInfo = helpers.analyzeResponse(messageInfo.getResponse());
short statusCode = responseInfo.getStatusCode();
stdout.printf("響應碼 => %d\r\n", statusCode);
}
}
}
載入上述程式碼生成的外掛後,執行效果如下圖所示:
IResponseInfo
public interface IResponseInfo
此介面被用於獲取一個 HTTP 請求的詳細資訊。擴充套件外掛可以透過呼叫 IExtensionHelpers. analyzeResponse() 獲得一個 IResponseInfo 物件。
#!java
// 此方法用於獲取 HTTP body 在響應訊息中的起始偏移量
int getBodyOffset()
// 此方法用於獲取響應訊息中設定的 HTTP Cookie
java.util.List<ICookie> getCookies()
// 此方法用於獲取包含在響應訊息中的 HTTP 頭
java.util.List<java.lang.String> getHeaders()
// 此方法用於獲取根據 HTTP 響應判斷出的 MIME 型別
java.lang.String getInferredMimeType()
// 此方法用於獲取 HTTP 響應頭中指示的 MIME 型別
java.lang.String getStatedMimeType()
// 此方法用於獲取 HTTP 狀態碼
short getStatusCode()
Demo code:
#!java
package burp;
import java.io.PrintWriter;
public class BurpExtender implements IBurpExtender, IHttpListener{
public PrintWriter stdout;
public IExtensionHelpers helpers;
@Override
public void registerExtenderCallbacks(final IBurpExtenderCallbacks callbacks){
this.stdout = new PrintWriter(callbacks.getStdout(), true);
this.helpers = callbacks.getHelpers();
callbacks.setExtensionName("Her0in");
callbacks.registerHttpListener(this);
}
@Override
public void processHttpMessage(int toolFlag, boolean messageIsRequest,
IHttpRequestResponse messageInfo) {
// 列印出請求的 Url 和 響應碼
if(messageIsRequest){
stdout.println(helpers.bytesToString(messageInfo.getRequest()));
}
else{
IResponseInfo responseInfo = helpers.analyzeResponse(messageInfo.getResponse());
short statusCode = responseInfo.getStatusCode();
stdout.printf("響應碼 => %d\r\n", statusCode);
}
}
}
IScanIssue
public interface IScanIssue
此介面用於獲取 Scanner 工具掃描到的問題的細節。擴充套件可以透過註冊一個 IScannerListener 或者是 透過呼叫 IBurpExtenderCallbacks.getScanIssues() 獲取掃描問題的細節。擴充套件同樣可以透過註冊IScannerCheck介面或者是呼叫IBurpExtenderCallbacks.addScanIssue()方法來自定義掃描問題,此時擴充套件需要提供它對此介面的實現。
此介面提供了以下方法:
#!java
// 此方法返回掃描問題的信任等級
java.lang.String getConfidence()
// 此方法返回生成掃描問題所對應的 HTTP 訊息
IHttpRequestResponse[] getHttpMessages()
// 此方法返回生成掃描問題所對應的 HTTP 服務資訊
IHttpService getHttpService()
// 此方法返回指定掃描問題型別的背景描述資訊
java.lang.String getIssueBackground()
// 此方法返回指定的掃描問題的詳細資訊
java.lang.String getIssueDetail()
// 此方法返回掃描問題型別的名稱
java.lang.String getIssueName()
// 此方法返回掃描問題型別的數字標誌符
int getIssueType()
// 此方法返回指定掃描問題的解決方式的背景描述資訊
java.lang.String getRemediationBackground()
// 此方法返回指定掃描問題的解決方式的背景詳情
java.lang.String getRemediationDetail()
// 此方法返回掃描問題的錯誤等級
java.lang.String getSeverity()
// 此方法返回生成掃描問題對應的 URL 資訊
java.net.URL getUrl()
Demo code:
請見 IScannerListener 的例項程式碼。
IScannerCheck
public interface IScannerCheck
擴充套件可以實現此介面,之後可以透過呼叫IBurpExtenderCallbacks.registerScannerCheck() 註冊一個自定義的 Scanner 工具的檢查器。Burp 將會告知檢查器執行“主動掃描”或“被動掃描”,並且在確認掃描到問題時給出報告。
#!java
// 當自定義的Scanner工具的檢查器針對同一個 URL 路徑報告了多個掃描問題時,Scanner 工具會呼叫此方法
int consolidateDuplicateIssues(IScanIssue existingIssue, IScanIssue newIssue)
// Scanner 工具會對每一個可插入的點執行“主動掃描”
java.util.List<IScanIssue> doActiveScan(IHttpRequestResponse baseRequestResponse, IScannerInsertionPoint insertionPoint)
// Scanner 工具會對每一個可插入的點執行“被動掃描”
java.util.List<IScanIssue> doPassiveScan(IHttpRequestResponse baseRequestResponse)
Demo code:
#!java
package burp;
import java.io.PrintWriter;
import java.util.List;
public class BurpExtender implements IBurpExtender, IScannerCheck{
public PrintWriter stdout;
public IExtensionHelpers helpers;
@Override
public void registerExtenderCallbacks(final IBurpExtenderCallbacks callbacks){
this.stdout = new PrintWriter(callbacks.getStdout(), true);
this.helpers = callbacks.getHelpers();
callbacks.setExtensionName("Her0in");
callbacks.registerScannerCheck(this);
}
@Override
public List<IScanIssue> doPassiveScan(
IHttpRequestResponse baseRequestResponse) {
// TODO here
return null;
}
@Override
public List<IScanIssue> doActiveScan(
IHttpRequestResponse baseRequestResponse,
IScannerInsertionPoint insertionPoint) {
// TODO here
return null;
}
@Override
public int consolidateDuplicateIssues(IScanIssue existingIssue,
IScanIssue newIssue) {
// TODO here
return 0;
}
}
IScannerInsertionPoint
public interface IScannerInsertionPoint
此介面被用於定義一個用於Scanner工具檢查器掃描的插入點。擴充套件可以透過註冊IScannerCheck 獲得此介面例項,或者透過註冊IScannerInsertionPointProvider 建立一個 Burp 所使用的掃描檢查器例項。
#!java
// 此方法用於使用指定的 payload 在插入點構建一個請求
byte[] buildRequest(byte[] payload)
// 此方法返回插入點的基本值
java.lang.String getBaseValue()
// 此方法返回插入點的名稱
java.lang.String getInsertionPointName()
// 此方法返回插入點的型別,插入點型別在IScannerInsertionPoint介面中定義
byte getInsertionPointType()
// 當使用指定的 payload 替換到插入點時,此方法可以決定 payload 在請求中的偏移量
int[] getPayloadOffsets(byte[] payload)
Demo code:
請見 IScannerCheck 的例項程式碼。
IScannerInsertionPointProvider
public interface IScannerInsertionPointProvider
擴充套件可以實現此介面並且可以透過呼叫IBurpExtenderCallbacks.registerScannerInsertionPointProvider()註冊自定義掃描插入點的工廠。
此介面提供了以下方法:
#!java
// 當掃描請求為“主動掃描”時, Scanner 工具將會呼叫此方法,並且提供者應該提供一個自定義插入點的列表以便用於掃描
java.util.List<IScannerInsertionPoint> getInsertionPoints(IHttpRequestResponse baseRequestResponse)
IScannerListener
public interface IScannerListener
擴充套件可以實現此介面,並且可以透過呼叫IBurpExtenderCallbacks.registerScannerListener() 註冊一個 Scanner 工具的監聽器。當 Scanner 工具掃描到新的問題時,會通知此監聽器。擴充套件透過註冊這樣的監聽器用於針對掃描問題自定義的分析和記錄。
此介面提供了以下方法:
#!java
// 當一個新的掃描問題被新增到 Burp 的Scanner工具的掃描結果中時,此方法將被 Burp 呼叫
void newScanIssue(IScanIssue issue)
Demo code:
#!java
package burp;
import java.io.PrintWriter;
public class BurpExtender implements IBurpExtender, IScannerListener{
public PrintWriter stdout;
public IExtensionHelpers helpers;
@Override
public void registerExtenderCallbacks(final IBurpExtenderCallbacks callbacks){
this.stdout = new PrintWriter(callbacks.getStdout(), true);
this.helpers = callbacks.getHelpers();
callbacks.setExtensionName("Her0in");
callbacks.registerScannerListener(this);
}
@Override
public void newScanIssue(IScanIssue issue) {
// TODO Auto-generated method stub
stdout.println("掃描到新的問題 :");
stdout.println("url => " + issue.getUrl());
stdout.println("詳情 => " + issue.getIssueDetail());
}
}
載入上述程式碼生成的外掛後,執行效果如下圖所示:
IScanQueueItem
public interface IScanQueueItem
此介面被用於獲取在 Burp 的 Scanner 工具中啟用的掃描佇列裡的專案詳情。擴充套件可以透過呼叫IBurpExtenderCallbacks.doActiveScan() 獲得掃描佇列專案的引用。
#!java
// 此方法可以取消掃描佇列專案中的掃描狀態
void cancel()
// 獲取掃描佇列專案生成的問題的細節
IScanIssue[] getIssues()
// 此方法返回掃描佇列專案發生錯誤時的網路錯誤號
int getNumErrors()
// 此方法返回掃描佇列專案的攻擊插入點的數量
int getNumInsertionPoints()
// 此方法返回掃描佇列專案已經發出的請求的數量
int getNumRequests()
// 此方法返回掃描佇列專案中已經完成掃描的百分比
byte getPercentageComplete()
// 此方法返回掃描佇列專案的狀態描述
java.lang.String getStatus()
IScopeChangeListener
public interface IScopeChangeListener
擴充套件可以實現此介面並且可以透過呼叫IBurpExtenderCallbacks.registerScopeChangeListener()註冊一個 Target 工具下的 scope 變化監聽器。當 Burp 的 Target 工具下的 scope 發生變化時,將會通知此介面。
此介面提供了以下方法:
#!java
// 當 Burp 的 Target 工具下的 scope 發生變化時,將會呼叫此方法。
void scopeChanged()
Demo code:
#!java
package burp;
import java.io.PrintWriter;
public class BurpExtender implements IBurpExtender, IScopeChangeListener{
public PrintWriter stdout;
public IExtensionHelpers helpers;
@Override
public void registerExtenderCallbacks(final IBurpExtenderCallbacks callbacks){
this.stdout = new PrintWriter(callbacks.getStdout(), true);
this.helpers = callbacks.getHelpers();
callbacks.setExtensionName("Her0in");
callbacks.registerScopeChangeListener(this);
}
@Override
public void scopeChanged() {
// 手動新增或右鍵選單新增目標到 scope 列表,就會執行此方法
stdout.println("scope 有變化!");
}
}
載入上述程式碼生成的外掛後,執行效果如下圖所示:
ISessionHandlingAction
public interface ISessionHandlingAction
擴充套件可以實現此方法並且可以透過呼叫IBurpExtenderCallbacks.registerSessionHandlingAction() 註冊一個自定義的會話操作動作。每一個已註冊的會話操作動作在會話操作規則的UI中都是可用的,並且使用者可以選擇其中一個作為會話操作行為的規則。使用者可以選擇直接呼叫操作,也可以按照宏定義呼叫操作。
此介面呼叫瞭如下方法:
#!java
// 此方法由 Burp 呼叫獲取會話操作行為的名稱
java.lang.String getActionName()
// 當會話操作行為被執行時會呼叫此方法
void performAction(IHttpRequestResponse currentRequest, IHttpRequestResponse[] macroItems)
ITab
public interface ITab
此介面用於自定義的標籤頁,呼叫IBurpExtenderCallbacks.addSuiteTab()方法可以在 Burp 的 UI 中顯示自定義的標籤頁。
#!java
// 此方法用於獲取自定義標籤的標題文字
java.lang.String getTabCaption()
// Burp 呼叫此方法獲取自定義標籤頁顯示的元件
java.awt.Component getUiComponent()
Demo code:
#!java
package burp;
import java.awt.Component;
import java.io.PrintWriter;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class BurpExtender implements IBurpExtender, ITab{
public PrintWriter stdout;
public IExtensionHelpers helpers;
private JPanel jPanel1;
private JButton jButton1;
@Override
public void registerExtenderCallbacks(final IBurpExtenderCallbacks callbacks){
this.stdout = new PrintWriter(callbacks.getStdout(), true);
this.helpers = callbacks.getHelpers();
callbacks.setExtensionName("Her0in");
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
//建立一個 JPanel
jPanel1 = new JPanel();
jButton1 = new JButton("點我");
// 將按鈕新增到皮膚中
jPanel1.add(jButton1);
//自定義的 UI 元件
callbacks.customizeUiComponent(jPanel1);
//將自定義的標籤頁新增到Burp UI 中
callbacks.addSuiteTab(BurpExtender.this);
}
});
}
@Override
public String getTabCaption() {
// 返回自定義標籤頁的標題
return "Her0in";
}
@Override
public Component getUiComponent() {
// 返回自定義標籤頁中的皮膚的元件物件
return jPanel1;
}
}
載入上述程式碼生成的外掛後,執行效果如下圖所示:
ITempFile
public interface ITempFile
此介面用於操作呼叫IBurpExtenderCallbacks.saveToTempFile()建立的臨時檔案。
#!java
// 刪除臨時檔案,此方法已過時
void delete()
// 此方法用於獲取臨時檔案內容的緩衝區
byte[] getBuffer()
ITextEditor
public interface ITextEditor
此介面用於擴充套件 Burp 的 原始文字編輯器,擴充套件透過呼叫IBurpExtenderCallbacks.createTextEditor() 獲得一個此介面的例項。
#!java
// 此方法返回用於擴充套件新增自定義的編輯器的 UI 元件
java.awt.Component getComponent()
// 此方法用於獲取當前的已選擇的文字
byte[] getSelectedText()
// 此方法用於獲取使用者在已顯示的文字中選擇的邊界
int[] getSelectionBounds()
// 此方法用於獲取當前已顯示的文字
byte[] getText()
// 此方法用於指示使用者是否對編輯器的內容做了修改
boolean isTextModified()
// 此方法用於決定當前的編輯器是否可編輯
void setEditable(boolean editable)
// 此方法用於更新編輯器下邊的搜尋框的搜尋表示式
void setSearchExpression(java.lang.String expression)
// 此方法用於更新編輯器中當前已顯示的文字
void setText(byte[] text)
Demo code:
請見 IMessageEditorTabFactory 的例項程式碼。
相關文章
- BurpSuite外掛開發指南之 API 上篇2020-08-19UIAPI
- BurpSuite外掛開發指南之 Python 篇2020-08-19UIPython
- BurpSuite外掛開發指南之 Java 篇2020-08-19UIJava
- 基於Ruby的Burpsuite外掛開發2020-08-19UI
- 前端外掛之Datatables使用--下篇2019-08-14前端
- burpsuite好用的外掛2024-11-30UI
- VSTO之PowerPoint(PPT)外掛開發常用API彙總2019-08-02API
- Babel 外掛開發入門指南2018-06-05Babel
- Babel外掛開發入門指南2018-06-03Babel
- 基於Intellij 外掛開發指南2018-09-01IntelliJ
- Flutter Plugin外掛開發填坑指南2020-02-16FlutterPlugin
- IntelliJ IDEA/Android Studio外掛開發指南2021-04-21IntelliJIdeaAndroid
- Flutter開發之Flutter外掛開發2019-12-12Flutter
- Flutter學習指南:封裝 API 外掛2018-12-13Flutter封裝API
- burpsuite學院之api測試2024-06-20UIAPI
- Jenkins 外掛開發之旅:兩天內從 idea 到釋出(下篇)2019-05-13JenkinsIdea
- BurpSuite 擴充套件開發[1]-API與HelloWold2020-08-19UI套件API
- (是時候開發屬於自己的外掛了)資料校驗外掛開發指南2019-02-22
- burpsuite擴充套件開發之Python2020-08-19UI套件Python
- SQL隱碼攻擊 - sqlmap聯動burpsuite之burp4sqlmap++外掛2024-03-12SQLUI
- 構建api gateway之 動態外掛2023-02-10APIGateway
- VSCode外掛開發全攻略(九)常用API總結2018-10-18VSCodeAPI
- 一些開發chrome外掛用到的API總結2018-12-11ChromeAPI
- 開發Rhino外掛2024-04-13
- Flutter外掛開發2019-09-12Flutter
- Mybatis外掛開發2019-06-10MyBatis
- chrome 外掛開發2024-07-20Chrome
- flutter 外掛開發2024-07-04Flutter
- VscodeIDEA開發外掛2024-05-30VSCodeIdea
- Webstorm 外掛開發2021-11-15WebORM
- Skywalking 外掛開發2022-06-14
- Flutter外掛開發之APK自動安裝2019-06-13FlutterAPK
- apisix~lua外掛開發與外掛註冊2024-05-14API
- ZBlog外掛開發檔案結構(外掛)2024-08-25
- VScode股票外掛開發2018-11-05VSCode
- Vue-外掛開發2018-06-25Vue
- babel外掛開發心得2018-06-05Babel
- eslint外掛開發教程2020-05-21EsLint