medusa
An open source interactive disassembler
Table of Contents
Loading contents...
README.md
Medusa
Medusa is a disassembler designed to be both modular and interactive.
It runs on Windows and Linux, it should be the same on OSX.
This project is organized as a library. To disassemble a file you have to use
medusa_text or qMedusa.
Build-bot
+--------+-------------------------------------------------------------+-----------------------------------------------------------------------------------------------+
| branch | Travis | AppVeyor |
+========+=============================================================+===============================================================================================+
| dev | |unix_build| | |windows_build| |
+--------+-------------------------------------------------------------+-----------------------------------------------------------------------------------------------+
Prerequisites
Medusa requires the following libraries: boost >= 1.55 <http://www.boost.org>
(system, filesystem, thread, date_time), OGDF <http://www.ogdf.net>
(required git), and Qt5 >= 5.2 <http://qt-project.org>
for the GUI.
You also need CMake <http://www.cmake.org>
for compilation and a C++11 compiler (VS2015 update 2 on Windows).
Git is optional but allows to clone remote repository for specific features, see Compilation/Options.
Feature
+-------------------------------------------------------------------------------------------+
| Loader |
+---------+---------+--------+--------+---------+-------------------------------------------+
| Name | Mapping | Import | Export | Symbols | Notes |
+=========+=========+========+========+=========+===========================================+
| ELF | yes | yes | no | no | Some kind of reloc are not handled |
+---------+---------+--------+--------+---------+-------------------------------------------+
| PE | yes | yes | yes | no | Reloc are not handled |
+---------+---------+--------+--------+---------+-------------------------------------------+
| Mach-O | yes | yes | no | no | - Doesn’t support FAT binary |
| | | | | | - on X86, esi as glbptr is not handled |
+---------+---------+--------+--------+---------+-------------------------------------------+
| GameBoy | yes | yes | yes | yes | - GameBoy Color registers are not handled |
| | | | | | - All mappers are not handled |
+---------+---------+--------+--------+---------+-------------------------------------------+
| ST62ROM | yes | yes | yes | yes | |
+---------+---------+--------+--------+---------+-------------------------------------------+
+----------------------------------------------------------------+
| Architecture |
+------+---------+-------------+----------+----------------------+
| Name | Mode | Disassembly | Semantic | Notes |
+======+=========+=============+==========+======================+
| x86 | 16-bit | yes | partial | |
+------+---------+-------------+ | |
| x86 | 32-bit | yes | | Support until SEE4.2 |
+------+---------+-------------+ | |
| x86 | 64-bit | yes | | |
+------+---------+-------------+----------+----------------------+
| z80 | gameboy | yes | yes | |
+------+---------+-------------+----------+----------------------+
| avr8 | | no | no | Broken |
+------+---------+-------------+----------+----------------------+
| arm | normal | partial | partial | |
+------+---------+-------------+----------+ |
| arm | thumb | partial | no | |
+------+---------+-------------+----------+ |
| arm | thumb2 | partial | no | |
+------+---------+-------------+----------+----------------------+
| st62 | | yes | partial | |
+------+---------+-------------+----------+----------------------+
+--------------------------------------------------------------------------+
| Tool |
+--------+---------------+---------+-------+---------+----------+----------+
| Name | interactivity | Comment | Label | Graph | Database | Notes |
+========+===============+=========+=======+=========+==========+==========+
| qt | partial | yes | yes | yes | yes | |
+--------+---------------+---------+-------+---------+----------+----------+
| text | no | no | no | no | yes | |
+--------+---------------+---------+-------+---------+----------+----------+
+----------------+
| Binding |
+--------+-------+
| Name | Notes |
+========+=======+
| Python | WIP |
+--------+-------+
+------------------------------------+
| Database |
+------+---------+------+------------+
| Name | Save | Load | Notes |
+======+=========+======+============+
| text | yes | yes | Incomplete |
+------+---------+------+------------+
+------------------+
| Operating System |
+---------+--------+
| Name | Notes |
+=========+========+
| UNIX | WIP |
+---------+ |
| Windows | |
+---------+--------+
Roadmap
Each versions of Medusa bring a new specific feature.
- 0.1 the beginning of the project
- 0.2 new qt interface
- 0.3 flow graph
- 0.4 load/save database
- 0.5 semantic support
- 0.6 better python binding
- 0.7 debugger
Compilation
First off, you need boost libraries; you can either download a built version or compile yourself. Boost is available here <http://www.boost.org/users/history/version_1_55_0.html>
_
Now, make sure you have installed Qt5 if you need a graphical user interface (and I’m pretty sure you do ;)). Medusa requires at least the version 5.2, be sure to pick the good version on the official website <http://qt-project.org/downloads>
_ or use your package manager.
Finally, we’re ready to retrieve and compile medusa:
.. code-block:: bash
git clone https://github.com/wisk/medusa.git
mkdir build
cd build
# UNIX users should define CMAKE_BUILD_TYPE e.g. -DCMAKE_BUILD_TYPE=Release to compile Medusa with optimization
cmake -DBOOST_ROOT:PATH=
# for UNIX users
make && cd bin && ./qMedusa
# for Windows users
explorer Medusa.sln
Note: If CMake is unable to find Boost on Windows, try to define BOOST_LIBRARYDIR. This variable must be set to the library directory (e.g.: C:\boost_1_55_0\lib64-msvc-14.0).
In my configuration, QT5_CMAKE_PATH is set to /usr/lib/cmake on ArchLinux and C:\Qt\5.6\msvc2015_64\lib\cmake on Windows.
For Windows users, you should probably add -G”Visual Studio 14 Win64” where 14 is your Visual Studio version and Win64 if you build medusa in 64-bit.
To run the Qt interface on Windows, you may have to add the folder %QTDIR%\bin to your %PATH% and copy the folder %QTDIR%\plugins\platforms.
By default, Medusa searches modules in the current folder, so you should run medusa executables from the folder where modules are located (e.g. build/bin on UNIX or build\bin\{Debug,Release,…} on Windows).
Options
+-------------------------+---------------+-----------------------------------------------------------------------------+
| Name | Default value | Meaning |
+=========================+===============+=============================================================================+
| MEDUSA_BUILD_TOOLS | TRUE | Compile tools |
+-------------------------+---------------+-----------------------------------------------------------------------------+
| MEDUSA_BUILD_TESTS | TRUE | Compile tests |
+-------------------------+---------------+-----------------------------------------------------------------------------+
| MEDUSA_CMAKE_USE_COTIRE | FALSE | Use cotire for building |
+-------------------------+---------------+-----------------------------------------------------------------------------+
| MEDUSA_BUILD_WITH_OGDF | FALSE | Add OGDF project and build it, this library allows qMedusa to display graph |
+-------------------------+---------------+-----------------------------------------------------------------------------+
| MEDUSA_MODULES_TO_BUILD | “all” | Semicolon-separated list of modules to build, or “all” |
+-------------------------+---------------+-----------------------------------------------------------------------------+
Screenshots
Main interface
.. image:: https://raw.github.com/wisk/medusa/dev/img/shots/main_interface.png
Control flow graph
.. image:: https://raw.github.com/wisk/medusa/dev/img/shots/cfg.png
Interactivity
.. image:: https://raw.github.com/wisk/med
... Content truncated. Click "See More" to view the full README.
Tool Information
Author
wisk
Project Added On
May 26, 2025
License
Open Source
Tags
Related Tools
JPGtoMalware
It embeds the executable file or payload inside the jpg file. The method the program uses isn't exactly called one of the steganography methods. For this reason, it does not cause any distortion in the JPG file. The JPG file size and payload do not have to be proportional.The JPG file is displayed normally in any viewing application or web application. It can bypass various security programs such as firewall, antivirus. If the file is examined in detail, it is easier to detect than steganog...
StablePufferRelay
Pentesting tool to extract valuable information from .pcap (wireshark) files
Stablervmi
rVMI - A New Paradigm For Full System Analysis
Stable