카테고리 없음

tt

1231. 2025. 3. 26. 13:06
from burp import IBurpExtender, IHttpListener, ITab
from javax.swing import JPanel, JButton, JTextField, JLabel, JComboBox, JTable, JScrollPane, JOptionPane
from javax.swing.table import DefaultTableModel
from java.awt import Color, 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(20)
        self.top_panel.add(JLabel("Keyword:"))
        self.top_panel.add(self.keyword_field)

        # 색상 선택
        self.color_selector = JComboBox(["red", "orange", "yellow", "green", "cyan", "blue", "pink", "magenta", "gray"])
        self.top_panel.add(JLabel("Color:"))
        self.top_panel.add(self.color_selector)

        # 추가 버튼
        self.add_button = JButton("Add", actionPerformed=self.add_keyword)
        self.top_panel.add(self.add_button)

        # 삭제 버튼
        self.delete_button = JButton("Delete Selected", actionPerformed=self.delete_keyword)
        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 successfully.")

    # ITab 인터페이스 메소드
    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])
            self.keyword_field.setText("")
        else:
            JOptionPane.showMessageDialog(self.panel, "Keyword cannot be empty!")

    # 키워드 삭제 메소드
    def delete_keyword(self, event):
        selected_row = self.table.getSelectedRow()
        if selected_row != -1:
            self.table_model.removeRow(selected_row)
        else:
            JOptionPane.showMessageDialog(self.panel, "Please select a keyword to delete.")

    # IHttpListener 인터페이스 메소드
    def processHttpMessage(self, toolFlag, messageIsRequest, messageInfo):
        if toolFlag == self.callbacks.TOOL_PROXY and not messageIsRequest:
            request = messageInfo.getRequest()
            analyzedRequest = self.helpers.analyzeRequest(request)
            request_body = request[analyzedRequest.getBodyOffset():].tostring()
            request_url = analyzedRequest.getUrl().toString()

            # 테이블에서 설정된 모든 키워드를 검사
            for row in range(self.table_model.getRowCount()):
                keyword = self.table_model.getValueAt(row, 0)
                color = self.table_model.getValueAt(row, 1)
                if keyword in request_body or keyword in request_url:
                    messageInfo.setHighlight(color)
                    break  # 첫 번째 일치 키워드만 하이라이트하고 종료