{"id":13419809,"url":"https://github.com/wisk/medusa","last_synced_at":"2025-03-15T05:33:21.028Z","repository":{"id":1961233,"uuid":"2891767","full_name":"wisk/medusa","owner":"wisk","description":"An open source interactive disassembler","archived":false,"fork":false,"pushed_at":"2019-09-16T05:30:40.000Z","size":16647,"stargazers_count":1039,"open_issues_count":27,"forks_count":92,"subscribers_count":85,"default_branch":"dev","last_synced_at":"2024-07-31T22:51:38.321Z","etag":null,"topics":["c-plus-plus","disassembler","emulator","reverse-engineering","symbolic-execution"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wisk.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.rtf","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2011-12-01T14:57:04.000Z","updated_at":"2024-07-07T06:08:17.000Z","dependencies_parsed_at":"2022-07-10T02:00:23.269Z","dependency_job_id":null,"html_url":"https://github.com/wisk/medusa","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wisk%2Fmedusa","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wisk%2Fmedusa/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wisk%2Fmedusa/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wisk%2Fmedusa/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wisk","download_url":"https://codeload.github.com/wisk/medusa/tar.gz/refs/heads/dev","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243690112,"owners_count":20331726,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c-plus-plus","disassembler","emulator","reverse-engineering","symbolic-execution"],"created_at":"2024-07-30T22:01:21.175Z","updated_at":"2025-03-15T05:33:21.021Z","avatar_url":"https://github.com/wisk.png","language":"C++","readme":"Medusa\n======\n\nMedusa is a disassembler designed to be both modular and interactive.\nIt runs on Windows and Linux, it should be the same on OSX.\nThis project is organized as a library. To disassemble a file you have to use\nmedusa_text or qMedusa.\n\nBuild-bot\n=========\n\n\n+--------+-------------------------------------------------------------+-----------------------------------------------------------------------------------------------+\n| branch | Travis                                                      | AppVeyor                                                                                      |\n+========+=============================================================+===============================================================================================+\n| dev    | |unix_build|                                                | |windows_build|                                                                               |\n+--------+-------------------------------------------------------------+-----------------------------------------------------------------------------------------------+\n\nPrerequisites\n=============\n\nMedusa requires the following libraries: `boost \u003e= 1.55 \u003chttp://www.boost.org\u003e`_ (system, filesystem, thread, date_time), `OGDF \u003chttp://www.ogdf.net\u003e`_ (required git), and `Qt5 \u003e= 5.2 \u003chttp://qt-project.org\u003e`_ for the GUI.\nYou also need `CMake \u003chttp://www.cmake.org\u003e`_ for compilation and a C++11 compiler (VS2015 update 2 on Windows).\nGit is optional but allows to clone remote repository for specific features, see *Compilation/Options*.\n\nFeature\n=======\n\n+-------------------------------------------------------------------------------------------+\n| Loader                                                                                    |\n+---------+---------+--------+--------+---------+-------------------------------------------+\n| Name    | Mapping | Import | Export | Symbols | Notes                                     |\n+=========+=========+========+========+=========+===========================================+\n| ELF     | yes     | yes    | no     | no      | Some kind of reloc are not handled        |\n+---------+---------+--------+--------+---------+-------------------------------------------+\n| PE      | yes     | yes    | yes    | no      | Reloc are not handled                     |\n+---------+---------+--------+--------+---------+-------------------------------------------+\n| Mach-O  | yes     | yes    | no     | no      | - Doesn't support FAT binary              |\n|         |         |        |        |         | - on X86, esi as glbptr is not handled    |\n+---------+---------+--------+--------+---------+-------------------------------------------+\n| GameBoy | yes     | yes    | yes    | yes     | - GameBoy Color registers are not handled |\n|         |         |        |        |         | - All mappers are not handled             |\n+---------+---------+--------+--------+---------+-------------------------------------------+\n| ST62ROM | yes     | yes    | yes    | yes     |                                           |\n+---------+---------+--------+--------+---------+-------------------------------------------+\n\n+----------------------------------------------------------------+\n| Architecture                                                   |\n+------+---------+-------------+----------+----------------------+\n| Name | Mode    | Disassembly | Semantic | Notes                |\n+======+=========+=============+==========+======================+\n| x86  | 16-bit  | yes         | partial  |                      |\n+------+---------+-------------+          |                      |\n| x86  | 32-bit  | yes         |          | Support until SEE4.2 |\n+------+---------+-------------+          |                      |\n| x86  | 64-bit  | yes         |          |                      |\n+------+---------+-------------+----------+----------------------+\n| z80  | gameboy | yes         | yes      |                      |\n+------+---------+-------------+----------+----------------------+\n| avr8 |         | no          | no       | Broken               |\n+------+---------+-------------+----------+----------------------+\n| arm  | normal  | partial     | partial  |                      |\n+------+---------+-------------+----------+                      |\n| arm  | thumb   | partial     | no       |                      |\n+------+---------+-------------+----------+                      |\n| arm  | thumb2  | partial     | no       |                      |\n+------+---------+-------------+----------+----------------------+\n| st62 |         | yes         | partial  |                      |\n+------+---------+-------------+----------+----------------------+\n\n+--------------------------------------------------------------------------+\n| Tool                                                                     |\n+--------+---------------+---------+-------+---------+----------+----------+\n| Name   | interactivity | Comment | Label | Graph   | Database | Notes    |\n+========+===============+=========+=======+=========+==========+==========+\n| qt     | partial       | yes     | yes   | yes     | yes      |          |\n+--------+---------------+---------+-------+---------+----------+----------+\n| text   | no            | no      | no    | no      | yes      |          |\n+--------+---------------+---------+-------+---------+----------+----------+\n\n+----------------+\n| Binding        |\n+--------+-------+\n| Name   | Notes |\n+========+=======+\n| Python | WIP   |\n+--------+-------+\n\n+------------------------------------+\n| Database                           |\n+------+---------+------+------------+\n| Name | Save    | Load | Notes      |\n+======+=========+======+============+\n| text | yes     | yes  | Incomplete |\n+------+---------+------+------------+\n\n+------------------+\n| Operating System |\n+---------+--------+\n| Name    | Notes  |\n+=========+========+\n| UNIX    | WIP    |\n+---------+        |\n| Windows |        |\n+---------+--------+\n\n\nRoadmap\n=======\n\nEach versions of Medusa bring a new specific feature.\n\n* 0.1 the beginning of the project\n* 0.2 new qt interface\n* 0.3 flow graph\n* 0.4 load/save database\n* *0.5 semantic support*\n* 0.6 better python binding\n* 0.7 debugger\n\nCompilation\n===========\n\nFirst off, you need boost libraries; you can either download a built version or compile yourself. Boost is available `here \u003chttp://www.boost.org/users/history/version_1_55_0.html\u003e`_\n\nNow, 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 \u003chttp://qt-project.org/downloads\u003e`_ or use your package manager.\n\nFinally, we're ready to retrieve and compile medusa:\n\n.. code-block:: bash\n\n  git clone https://github.com/wisk/medusa.git\n  mkdir build\n  cd build\n  # UNIX users should define CMAKE_BUILD_TYPE e.g. -DCMAKE_BUILD_TYPE=Release to compile Medusa with optimization\n  cmake -DBOOST_ROOT:PATH=\u003cpath to the boost directory\u003e -DQT5_CMAKE_PATH:PATH=\u003cPath to Qt5 cmake scripts directory\u003e ..\n\n  # for UNIX users\n  make \u0026\u0026 cd bin \u0026\u0026 ./qMedusa\n\n  # for Windows users\n  explorer Medusa.sln\n\n\nNote: 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*).\nIn my configuration, **QT5_CMAKE_PATH** is set to */usr/lib/cmake* on ArchLinux and *C:\\\\Qt\\\\5.6\\\\msvc2015_64\\\\lib\\\\cmake* on Windows.\nFor 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.\nTo 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*.\nBy 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).\n\nOptions\n-------\n\n+-------------------------+---------------+-----------------------------------------------------------------------------+\n| Name                    | Default value | Meaning                                                                     |\n+=========================+===============+=============================================================================+\n| MEDUSA_BUILD_TOOLS      | TRUE          | Compile tools                                                               |\n+-------------------------+---------------+-----------------------------------------------------------------------------+\n| MEDUSA_BUILD_TESTS      | TRUE          | Compile tests                                                               |\n+-------------------------+---------------+-----------------------------------------------------------------------------+\n| MEDUSA_CMAKE_USE_COTIRE | FALSE         | Use cotire for building                                                     |\n+-------------------------+---------------+-----------------------------------------------------------------------------+\n| MEDUSA_BUILD_WITH_OGDF  | FALSE         | Add OGDF project and build it, this library allows qMedusa to display graph |\n+-------------------------+---------------+-----------------------------------------------------------------------------+\n| MEDUSA_MODULES_TO_BUILD | \"all\"         | Semicolon-separated list of modules to build, or \"all\"                      |\n+-------------------------+---------------+-----------------------------------------------------------------------------+\n\nScreenshots\n===========\n\nMain interface\n--------------\n\n.. image:: https://raw.github.com/wisk/medusa/dev/img/shots/main_interface.png\n\nControl flow graph\n------------------\n\n.. image:: https://raw.github.com/wisk/medusa/dev/img/shots/cfg.png\n\nInteractivity\n-------------\n\n.. image:: https://raw.github.com/wisk/medusa/dev/img/shots/interactivity.png\n\n.. image:: https://raw.github.com/wisk/medusa/dev/img/shots/label.png\n\nBinding\n-------\n\n.. image:: https://raw.github.com/wisk/medusa/dev/img/shots/python_binding.png\n\nDocker image\n============\n\nIf you do not wish to install the various dependencies on your system, you can\nuse this docker image instead. Even though it is working out of the box, you may\nwant to customize it to suit your needs or for added security (e.g. restrict ssh\naccess to public key authentication only).\n\nBuild the Medusa container\n--------------------------\n``docker build -t medusa .``\n\nGoing inside the container\n--------------------------\n``docker run -it medusa /bin/bash``\n\nOR launch qMedusa (ssh with X forwarding)\n-----------------------------------------\n* ``docker run -it -d medusa``\n* ``ssh -X developer@\u003ccontainers_ip\u003e \"medusa/build/bin/qMedusa\"``\n\nContacts\n========\n\n * IRC: irc://freenode.net/#medusa_disasm\n * Twitter: https://twitter.com/@medusa_disasm\n\nAcknowledgements\n================\n\n* My schoolmates: epieddy, flalande and FX.\n* My workmate: gg, w1gz, lemme.\n* Yusuke Kamiyamane for his `icons \u003chttp://p.yusukekamiyamane.com\u003e`_\n* gunmetal313, saeschdivara, kangjoni76, KarlVogel, ekse for their contributions.\n\n.. |unix_build| image:: https://img.shields.io/travis/wisk/medusa/dev.svg?style=flat-square\u0026label=unix%20build\n    :target: http://travis-ci.org/wisk/medusa\n    :alt: Build status of the dev branch on Mac/Linux\n\n.. |windows_build|  image:: https://img.shields.io/appveyor/ci/wisk/medusa.svg?style=flat-square\u0026label=windows%20build\n    :target: https://ci.appveyor.com/project/wisk/medusa\n    :alt: Build status of the dev branch on Windows\n","funding_links":[],"categories":["TODO scan for Android support in followings","Reverse Engineering","Tools","Awesome Penetration Testing (\"https://github.com/Muhammd/Awesome-Pentest\")","\u003ca id=\"2df6d3d07e56381e1101097d013746a0\"\u003e\u003c/a\u003eDisassemble\u0026\u0026反汇编","Reverse Engineering Tools"],"sub_categories":["Reverse Engineering Tools","Penetration Testing Report Templates","Tools","\u003ca id=\"59f472c7575951c57d298aef21e7d73c\"\u003e\u003c/a\u003e工具"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwisk%2Fmedusa","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwisk%2Fmedusa","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwisk%2Fmedusa/lists"}