from burp import IBurpExtender, IHttpListener, ITab
from javax.swing import JPanel, JButton, JTextField, JLabel, JComboBox, JTable, JScrollPane
from javax.swing.table import DefaultTableModel
from java.awt import BorderLayout, FlowLayout
class BurpExtender(IBurpExtender, IHttpListener, ITab):
def registerExtenderCallbacks(self, callbacks):
self.callbacks = callbacks
self.helpers = callbacks.getHelpers()
callbacks.setExtensionName("Keyword Highlighter Advanced")
callbacks.registerHttpListener(self)
# GUI 설정
self.panel = JPanel(BorderLayout())
self.top_panel = JPanel(FlowLayout())
self.keyword_field = JTextField(15)
self.color_selector = JComboBox(["red", "orange", "yellow", "green", "cyan", "blue", "pink", "magenta", "gray"])
self.add_button = JButton("Add", actionPerformed=self.add_keyword)
self.delete_button = JButton("Delete Selected", actionPerformed=self.delete_keyword)
self.top_panel.add(JLabel("Keyword:"))
self.top_panel.add(self.keyword_field)
self.top_panel.add(JLabel("Color:"))
self.top_panel.add(self.color_selector)
self.top_panel.add(self.add_button)
self.top_panel.add(self.delete_button)
self.table_model = DefaultTableModel(["Keyword", "Color"], 0)
self.table = JTable(self.table_model)
scroll_pane = JScrollPane(self.table)
self.panel.add(self.top_panel, BorderLayout.NORTH)
self.panel.add(scroll_pane, BorderLayout.CENTER)
callbacks.addSuiteTab(self)
print("Keyword Highlighter Advanced loaded.")
def getTabCaption(self):
return "Keyword Highlighter"
def getUiComponent(self):
return self.panel
def add_keyword(self, event):
keyword = self.keyword_field.getText().strip()
color = self.color_selector.getSelectedItem()
if keyword:
self.table_model.addRow([keyword, color])
def delete_keyword(self, event):
selected_row = self.table.getSelectedRow()
if selected_row != -1:
self.table_model.removeRow(selected_row)
def processHttpMessage(self, toolFlag, messageIsRequest, messageInfo):
if toolFlag == self.callbacks.TOOL_PROXY and not messageIsRequest:
request = messageInfo.getRequest()
analyzedRequest = self.helpers.analyzeRequest(request)
request_url = analyzedRequest.getUrl().toString()
request_body = request[analyzedRequest.getBodyOffset():].tostring()
content_to_search = (request_url + request_body).lower()
# 등록된 키워드 체크
for row in range(self.table_model.getRowCount()):
keyword = self.table_model.getValueAt(row, 0).lower()
color = self.table_model.getValueAt(row, 1).lower()
if keyword in content_to_search:
# 정확히 지원되는 색상 문자열만 사용
messageInfo.setHighlight(color)
return # 첫 번째 매칭 키워드에 하이라이트 처리