Home

Awesome

pwndbg-gui CodeQL

An unofficial GUI wrapper around pwndbg intended to leverage the UI benefits of a graphical user interface.

Setup

  1. Install and setup pwndbg
  2. Optionally add any settings you want in ~/.gdbinit
  3. Run python start.py
    • This will create a virtual environment and install the needed dependencies
    • On Debian/Ubuntu systems, you may need to previously install python3-venv
    • If you want to attach to running programs, GDB needs to be started with sudo. To do this, copy ~/.gdbinit into /root and run python start.py --sudo and enter your sudo password when prompted

Features

Preview

Overview Running

Motivation

pwndbg is a command line utility that greatly enhances gdb by allowing the user to more easily view data, as well as by adding many new commands. As the dominant tools for debugging and pwning, they mostly suffer from the fact that they are bound to the limitations of terminal applications. To address this we wanted to leverage a modern UI framework to wrap the most essential functionality. This allows us to filter out, reorder and customize the gdb output, simplifying or highlighting important information. Our GUI application primarily focuses on usability reducing the number of user commands, displaying information neatly, copying data easily, and providing hotkeys for control-flow.

Approach

The GUI is written using the Qt framework for python. GDB is managed as a subprocess in MI mode and interaction is handled by pygdbmi. To make the GUI more fluent and prevent hangups, the application is multithreaded. The main thread is the GUI thread, which starts other threads that handle input to GDB (GdbHandler), collecting output from GDB (GdbReader) and interaction with the inferior process (InferiorHandler)

Troubleshooting

External dependencies

Disclaimer

This tool was developed as project for the Binary Exploitation practical course at TUM. All features are targeted to complete the pwning challenges during the course. If you like it, but have a use case that is currently not supported feel free to open a PR or an issue.