From 4dd4c0c5b7eeb1f4a7452bd1eedf7676a37f154b Mon Sep 17 00:00:00 2001 From: dnix Date: Thu, 18 May 2023 18:10:01 +0000 Subject: [PATCH] add README.md, etc. --- binhop/.gitignore => .gitignore | 0 binhop/LICENSE => LICENSE | 0 README.md | 53 ++++++++++++++++++++ binhop/{binhop => }/__init__.py | 0 binhop/{binhop => }/binhop.py | 0 binhop/{binhop => }/core.py | 0 doc/binhop.png | Bin 0 -> 37020 bytes binhop/requirements.txt => requirements.txt | 0 binhop/setup.py => setup.py | 0 9 files changed, 53 insertions(+) rename binhop/.gitignore => .gitignore (100%) rename binhop/LICENSE => LICENSE (100%) create mode 100644 README.md rename binhop/{binhop => }/__init__.py (100%) rename binhop/{binhop => }/binhop.py (100%) rename binhop/{binhop => }/core.py (100%) create mode 100644 doc/binhop.png rename binhop/requirements.txt => requirements.txt (100%) rename binhop/setup.py => setup.py (100%) diff --git a/binhop/.gitignore b/.gitignore similarity index 100% rename from binhop/.gitignore rename to .gitignore diff --git a/binhop/LICENSE b/LICENSE similarity index 100% rename from binhop/LICENSE rename to LICENSE diff --git a/README.md b/README.md new file mode 100644 index 0000000..1cbeb10 --- /dev/null +++ b/README.md @@ -0,0 +1,53 @@ +
+Binhop Logo + +# binhop + +binhop is a **file carving visualizer**, powered by binwalk. + +It makes clear what parts of a blob can be extracted, so you can +take action on the parts that didn't.
+binhop relies entirely on a functioning installation of binwalk. + +[Usage](#usage) • +[Installation](#installation) • +[Contributing](#contributing) • +[License](#license) +
+ +## Usage + +To use the script, run the following command: + +``` +binhop +``` + +Alternatively, you can run binhop on data from STDIN like so: + +``` +binhop < +``` + +## Installation + +To use this script, you need Python 3 and a functioning and "recent" version of `binwalk` installed on your system. You'll probably also want to install optional `binwalk` dependencies such as `sasquatch`, `jefferson`, and others. You can learn how to do that in the [binwalk documentation](https://github.com/ReFirmLabs/binwalk/blob/master/INSTALL.md). + +When that's done, install the Python dependencies for `binhop`, running something like: + +``` +git clone https://github.com/darrylnixon/binhop.git +cd binhop +pip install -r requirements.txt +pip install . +``` + +## Contributing + +If you would like to contribute to this project, feel free to submit a pull request or open an issue on GitHub. + +This tool was written as part of my coursework for CSC 842 - Security Tool Development at Dakota State University. Consequently, I may choose not to maintain this tool beyond the length of the course, but have selected a license that enables open contributions in any case. + +## License + +This project is licensed under the GPLv3 License, because it's important to give back. See the `LICENSE` file for details. \ No newline at end of file diff --git a/binhop/binhop/__init__.py b/binhop/__init__.py similarity index 100% rename from binhop/binhop/__init__.py rename to binhop/__init__.py diff --git a/binhop/binhop/binhop.py b/binhop/binhop.py similarity index 100% rename from binhop/binhop/binhop.py rename to binhop/binhop.py diff --git a/binhop/binhop/core.py b/binhop/core.py similarity index 100% rename from binhop/binhop/core.py rename to binhop/core.py diff --git a/doc/binhop.png b/doc/binhop.png new file mode 100644 index 0000000000000000000000000000000000000000..449e708d7b7c6a058aa579878fbc3012fbf06d1f GIT binary patch literal 37020 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 Q@c;k-07*qoM6N<$g38ADF#rGn literal 0 HcmV?d00001 diff --git a/binhop/requirements.txt b/requirements.txt similarity index 100% rename from binhop/requirements.txt rename to requirements.txt diff --git a/binhop/setup.py b/setup.py similarity index 100% rename from binhop/setup.py rename to setup.py