From 66c608d42213dab5c8368d151d6aa9264134af82 Mon Sep 17 00:00:00 2001 From: Joas A Santos <34966120+CyberSecurityUP@users.noreply.github.com> Date: Mon, 7 Apr 2025 13:25:47 -0300 Subject: [PATCH] Add files via upload --- plugins/gdb_debugger_plugin.py | 70 ++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 plugins/gdb_debugger_plugin.py diff --git a/plugins/gdb_debugger_plugin.py b/plugins/gdb_debugger_plugin.py new file mode 100644 index 0000000..ddbff11 --- /dev/null +++ b/plugins/gdb_debugger_plugin.py @@ -0,0 +1,70 @@ +from PyQt5.QtWidgets import QWidget, QVBoxLayout, QTextEdit, QPushButton, QLabel, QFileDialog, QHBoxLayout +from PyQt5.QtCore import QProcess +import os + +def register(app): + tab = QWidget() + layout = QVBoxLayout() + + terminal_label = QLabel("🔧 GDB Debugger Shell (ELF, BIN, EXE)") + terminal_label.setStyleSheet("color: cyan; font-weight: bold;") + layout.addWidget(terminal_label) + + gdb_output = QTextEdit() + gdb_output.setReadOnly(True) + gdb_output.setStyleSheet("background-color: black; color: #00FF00; font-family: monospace;") + layout.addWidget(gdb_output) + + gdb_input = QTextEdit() + gdb_input.setPlaceholderText("Digite comandos GDB aqui e pressione Enter ou use os botões abaixo...") + gdb_input.setStyleSheet("background-color: #111; color: white; font-family: monospace;") + gdb_input.setFixedHeight(60) + layout.addWidget(gdb_input) + + command_layout = QHBoxLayout() + load_btn = QPushButton("📂 Carregar Executável") + run_btn = QPushButton("▶️ run") + info_btn = QPushButton("ℹ️ info functions") + disas_btn = QPushButton("🧠 disassemble main") + break_btn = QPushButton("⛔ break main") + + for btn in [run_btn, info_btn, disas_btn, break_btn]: + command_layout.addWidget(btn) + + layout.addWidget(load_btn) + layout.addLayout(command_layout) + + tab.setLayout(layout) + app.tabs.addTab(tab, "🛠 GDB Debugger") + + process = QProcess() + binary_loaded = {'path': None} + + def run_gdb_command(command): + if not binary_loaded['path']: + gdb_output.append("[!] Nenhum arquivo carregado.") + return + gdb_output.append(f">>> {command}") + process.write((command + "\n").encode()) + + def load_executable(): + file, _ = QFileDialog.getOpenFileName(None, "Selecionar binário", "", "Executáveis (*.elf *.bin *.exe *.out)") + if file: + binary_loaded['path'] = file + gdb_output.append(f"[+] Carregado: {file}") + process.start("gdb", [file]) + process.readyReadStandardOutput.connect(lambda: gdb_output.append(process.readAllStandardOutput().data().decode())) + process.readyReadStandardError.connect(lambda: gdb_output.append(process.readAllStandardError().data().decode())) + + def execute_input(): + command = gdb_input.toPlainText().strip() + if command: + run_gdb_command(command) + gdb_input.clear() + + load_btn.clicked.connect(load_executable) + run_btn.clicked.connect(lambda: run_gdb_command("run")) + info_btn.clicked.connect(lambda: run_gdb_command("info functions")) + disas_btn.clicked.connect(lambda: run_gdb_command("disassemble main")) + break_btn.clicked.connect(lambda: run_gdb_command("break main")) + gdb_input.textChanged.connect(lambda: execute_input() if "\n" in gdb_input.toPlainText() else None) \ No newline at end of file