Add Dockerfile.

This commit is contained in:
Darryl Nixon 2023-05-22 10:42:34 -07:00
parent fb002fcca2
commit b88a17e3c7
3 changed files with 96 additions and 1 deletions

80
Dockerfile Normal file
View file

@ -0,0 +1,80 @@
FROM ubuntu:20.04
# Based on https://github.com/sheabot/binwalk-docker/blob/main/Dockerfile
ENV PORT=8080
# Set shell to bash instead of dash
ARG DEBIAN_FRONTEND=noninteractive
RUN echo "dash dash/sh boolean false" | debconf-set-selections && dpkg-reconfigure dash
# Binwalk installation instructions from:
# https://github.com/ReFirmLabs/binwalk/blob/master/INSTALL.md
RUN apt-get update
RUN apt-get install -y --no-install-recommends \
arj \
binwalk \
build-essential \
bzip2 \
cabextract \
cramfsswap \
default-jdk \
git-core \
gzip \
lhasa \
liblzma-dev \
liblzo2-dev \
liblzo2-dev \
lzop \
mtd-utils \
p7zip \
p7zip-full \
python3 \
python3-lzo \
python3-pip \
sleuthkit \
squashfs-tools \
srecord \
tar \
wget \
zlib1g-dev && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# Install sasquatch to extract non-standard SquashFS images
RUN git clone https://github.com/devttys0/sasquatch /tmp/sasquatch && \
cd /tmp/sasquatch && \
./build.sh && \
cd / && \
rm -rf /tmp/sasquatch
# Install jefferson to extract JFFS2 file systems
RUN pip3 install cstruct && \
git clone https://github.com/sviehb/jefferson /tmp/jefferson && \
cd /tmp/jefferson && \
python3 setup.py install && \
cd / && \
rm -rf /tmp/jefferson
# Install ubi_reader to extract UBIFS file systems
RUN git clone https://github.com/jrspruitt/ubi_reader /tmp/ubi_reader && \
cd /tmp/ubi_reader && \
python3 -m pip install . && \
cd / && \
rm -rf /tmp/ubi_reader
# Install yaffshiv to extract YAFFS file systems
RUN git clone https://github.com/devttys0/yaffshiv /tmp/yaffshiv && \
cd /tmp/yaffshiv && \
python3 setup.py install && \
cd / && \
rm -rf /tmp/yaffshiv
# Install binhop
RUN git clone https://sillyhats.mips.uk/pdf/binhop /tmp/binhop && \
cd /tmp/binhop && \
python3 -m pip install -r requirements.txt
# Run binhop
EXPOSE $PORT
CMD cd /tmp/binhop && python3 /tmp/binhop/binhop.py --port $PORT

View file

@ -17,6 +17,21 @@ take action on the parts that didn't.<br />
## Installation and Usage ## Installation and Usage
### Build with Docker (recommended)
Assuming you have Docker installed and running, you can serve binhop locally with something like:
```
git clone https://github.com/darrylnixon/binhop.git
cd binhop
docker build . -t csc842/binhop
docker run --name binhop -e PORT=3050 -p 3050:3050 --restart=always csc842/binhop
```
Then browse to [http://localhost:3050](http://localhost:3050) and upload a blob.
### Manually
To use this script, you need Python 3 and a functioning and "recent" version of `binwalk` installed on your system. In practice, this means you're *probably* going to need to be on an x86/x86_64 Linux, but maybe you have better karma than I do. To use this script, you need Python 3 and a functioning and "recent" version of `binwalk` installed on your system. In practice, this means you're *probably* going to need to be on an x86/x86_64 Linux, but maybe you have better karma than I do.
You'll probably also want to install optional `binwalk` dependencies such as `sasquatch`, `jefferson`, and others, depending on the binaries you want to submit. You can learn how to do that in [binwalk's INSTALL.md](https://github.com/ReFirmLabs/binwalk/blob/master/INSTALL.md). `binhop` only "requires" `binwalk`, but it'll fail on binaries for which `binwalk` is dependent on optional modules. You'll probably also want to install optional `binwalk` dependencies such as `sasquatch`, `jefferson`, and others, depending on the binaries you want to submit. You can learn how to do that in [binwalk's INSTALL.md](https://github.com/ReFirmLabs/binwalk/blob/master/INSTALL.md). `binhop` only "requires" `binwalk`, but it'll fail on binaries for which `binwalk` is dependent on optional modules.

View file

@ -134,7 +134,7 @@ async def serve_static(request: web.Request) -> Union[web.FileResponse, web.HTTP
async def main() -> None: async def main() -> None:
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
parser.add_argument("--port", "-p", type=int, default=8080, help="Port to serve on") parser.add_argument("--port", "-p", type=int, default=8080, 77help="Port to serve on")
args = parser.parse_args() args = parser.parse_args()
app = web.Application() app = web.Application()