Metadata-Version: 2.1
Name: dis-cover
Version: 0.4.0
Summary: Disasemble binaries and recover as much info as possible.
Home-page: https://github.com/louismerlin/dis-cover
Author: Louis Merlin
Author-email: louis.merlin@epfl.ch
License: MIT
Platform: UNKNOWN
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Requires-Python: >=3.6.0
Description-Content-Type: text/markdown
Requires-Dist: capstone (>=4.0.2)
Requires-Dist: itanium-demangler (>=1.0)
Requires-Dist: pyelftools (>=0.27)


# dis-cover
Disassemble binaries and recover as much info as possible

## How to use

### Run on you binary

To run this tool on your own binary, first you must install dis-cover, as well as elfutils and binutils.

```
pip install dis-cover
apt install elfutils binutils # or whatever your version of this is
```

Then, you can run it to analyze your binary, for example `/bin/gold`.

```
dis-cover /bin/gold
```

This will create a `reconstructed` elf file in your current directory. This binary will contain symbols and dwarf information describing the classes and hierarchies that dis-cover was able to find.

### Run the case studies

To run the case studies, simply `make run-scenarios`. You need to have `docker` installed.

### Command-line

You can install dis-cover by running `pip install dis-cover`.

Here are the CLI options :

```
usage: dis-cover [-h] [-d OUTPUT_DIRECTORY] [-p] [-o OUTPUT_FILE] [-l] [-b | -c] file

Disasemble binaries and recover as much info as possible

positional arguments:
  file                  File to dis-cover

optional arguments:
  -h, --help            show this help message and exit
  -d OUTPUT_DIRECTORY, --output-directory OUTPUT_DIRECTORY
                        Directory where the temporary files are written (default "/tmp")
  -p, --pickle          Output info in the pickle format (used with --bin)
  -o OUTPUT_FILE, --output-file OUTPUT_FILE
                        File where the output should be written (used with --bin) (default "./reconstructed")
  -l, --list-classes    List the classes found in the binary (used with --bin)
  -b, --bin             Extract info from a binary file (default)
  -c, --cpp             Compile C++ file under multiple scenarios and extract info from the given outputs
```

## Still TODO

- Verify objcopy and eu-unstrip outputs (priority: medium)
- Add better error handling and more helpful messages (priority: medium)
- Set NOBIT flag in the section headers (priority: low)
- Remodel output to be more understandable (priority: low)
- Find a way to compute the size of the classes (priority: low)


