1#!/bin/bash
2
3REQUIRED_UTILS="wget tar python"
4APTCMD="apt-get"
5YUMCMD="yum"
6APT_CANDIDATES="git build-essential libqt4-opengl mtd-utils gzip bzip2 tar arj lhasa p7zip p7zip-full cabextract cramfsprogs cramfsswap squashfs-tools zlib1g-dev liblzma-dev liblzo2-dev sleuthkit"
7PYTHON2_APT_CANDIDATES="python-lzo python-lzma python-pip python-opengl python-qt4 python-qt4-gl python-numpy python-scipy"
8PYTHON3_APT_CANDIDATES="python3-pip python3-opengl python3-pyqt4 python3-pyqt4.qtopengl python3-numpy python3-scipy"
9PYTHON3_YUM_CANDIDATES=""
10YUM_CANDIDATES="git gcc gcc-c++ make openssl-devel qtwebkit-devel qt-devel gzip bzip2 tar arj p7zip p7zip-plugins cabextract squashfs-tools zlib zlib-devel lzo lzo-devel xz xz-compat-libs xz-libs xz-devel xz-lzma-compat python-backports-lzma lzip pyliblzma perl-Compress-Raw-Lzma"
11PYTHON2_YUM_CANDIDATES="python-pip python-opengl python-qt4 numpy python-numdisplay numpy-2f python-Bottleneck scipy"
12APT_CANDIDATES="$APT_CANDIDATES $PYTHON2_APT_CANDIDATES"
13YUM_CANDIDATES="$YUM_CANDIDATES $PYTHON2_YUM_CANDIDATES"
14PIP_COMMANDS="pip"
15
16# Check for root privileges
17if [ $UID -eq 0 ]
18then
19    SUDO=""
20else
21    SUDO="sudo"
22    REQUIRED_UTILS="sudo $REQUIRED_UTILS"
23fi
24
25function install_sasquatch
26{
27    git clone https://github.com/devttys0/sasquatch
28    (cd sasquatch && make && $SUDO make install)
29    $SUDO rm -rf sasquatch
30}
31
32function install_jefferson
33{
34    $SUDO pip install cstruct
35    git clone https://github.com/sviehb/jefferson
36    (cd jefferson && $SUDO python2 setup.py install)
37    $SUDO rm -rf jefferson
38}
39
40function install_unstuff
41{
42    mkdir -p /tmp/unstuff
43    cd /tmp/unstuff
44    wget -O - http://my.smithmicro.com/downloads/files/stuffit520.611linux-i386.tar.gz | tar -zxv
45    $SUDO cp bin/unstuff /usr/local/bin/
46    cd -
47    rm -rf /tmp/unstuff
48}
49
50function install_ubireader
51{
52    git clone https://github.com/jrspruitt/ubi_reader
53    (cd ubi_reader && $SUDO python setup.py install)
54    rm -rf ubi_reader
55}
56
57function install_pip_package
58{
59    PACKAGE="$1"
60
61    for PIP_COMMAND in $PIP_COMMANDS
62    do
63        $SUDO $PIP_COMMAND install $PACKAGE
64    done
65}
66
67function find_path
68{
69    FILE_NAME="$1"
70
71    echo -ne "checking for $FILE_NAME..."
72    which $FILE_NAME > /dev/null
73    if [ $? -eq 0 ]
74    then
75        echo "yes"
76        return 0
77    else
78        echo "no"
79        return 1
80    fi
81}
82
83# Make sure the user really wants to do this
84echo ""
85echo "WARNING: This script will download and install all required and optional dependencies for binwalk."
86echo "         This script has only been tested on, and is only intended for, Debian based systems."
87echo "         Some dependencies are downloaded via unsecure (HTTP) protocols."
88echo "         This script requires internet access."
89echo "         This script requires root privileges."
90echo ""
91echo -n "Continue [y/N]? "
92read YN
93if [ "$(echo "$YN" | grep -i -e 'y' -e 'yes')" == "" ]
94then
95    echo "Quitting..."
96    exit 1
97fi
98
99# Check to make sure we have all the required utilities installed
100NEEDED_UTILS=""
101for UTIL in $REQUIRED_UTILS
102do
103    find_path $UTIL
104    if [ $? -eq 1 ]
105    then
106        NEEDED_UTILS="$NEEDED_UTILS $UTIL"
107    fi
108done
109
110# Check for supported package managers and set the PKG_* envars appropriately
111find_path $APTCMD
112if [ $? -eq 1 ]
113then
114    find_path $YUMCMD
115    if [ $? -eq 1 ]
116    then
117        NEEDED_UTILS="$NEEDED_UTILS $APTCMD/$YUMCMD"
118    else
119        PKGCMD="$YUMCMD"
120        PKGCMD_OPTS="-y install"
121        PKG_CANDIDATES="$YUM_CANDIDATES"
122        PKG_PYTHON3_CANDIDATES="$PYTHON3_YUM_CANDIDATES"
123    fi
124else
125    PKGCMD="$APTCMD"
126    PKGCMD_OPTS="install -y"
127    PKG_CANDIDATES="$APT_CANDIDATES"
128    PKG_PYTHON3_CANDIDATES="$PYTHON3_APT_CANDIDATES"
129fi
130
131if [ "$NEEDED_UTILS" != "" ]
132then
133    echo "Please install the following required utilities: $NEEDED_UTILS"
134    exit 1
135fi
136
137# Check to see if we should install modules for python3 as well
138find_path python3
139if [ $? -eq 0 ]
140then
141     PKG_CANDIDATES="$PKG_CANDIDATES $PKG_PYTHON3_CANDIDATES"
142     PIP_COMMANDS="pip3 $PIP_COMMANDS"
143fi
144
145# Do the install(s)
146cd /tmp
147sudo $PKGCMD $PKGCMD_OPTS $PKG_CANDIDTES
148install_pip_package pyqtgraph
149install_pip_package capstone
150install_sasquatch
151install_jefferson
152install_unstuff
153install_ubireader
154
155