forked from ReFirmLabs/binwalk
-
Notifications
You must be signed in to change notification settings - Fork 16
/
deps.sh
executable file
·179 lines (160 loc) · 4.48 KB
/
deps.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
#!/bin/bash
# Check for the --yes command line argument to skip yes/no prompts
if [ "$1" = "--yes" ]
then
YES=1
else
YES=0
fi
set -eu
set -o nounset
set -x
if ! which lsb_release > /dev/null
then
lsb_release() {
if [ -f /etc/os-release ]
then
[[ "$1" = "-i" ]] && cat /etc/os-release | grep ^"ID" | cut -d= -f 2
[[ "$1" = "-r" ]] && cat /etc/os-release | grep "VERSION_ID" | cut -d= -d'"' -f 2
elif [ -f /etc/lsb-release ]
then
[[ "$1" = "-i" ]] && cat /etc/lsb-release | grep "DISTRIB_ID" | cut -d= -f 2
[[ "$1" = "-r" ]] && cat /etc/lsb-release | grep "DISTRIB_RELEASE" | cut -d= -f 2
else
echo Unknown
fi
}
fi
if [ $YES -eq 0 ]
then
distro="${1:-$(lsb_release -i|cut -f 2)}"
distro_version="${1:-$(lsb_release -r|cut -f 2|cut -c1-2)}"
else
distro="${2:-$(lsb_release -i|cut -f 2)}"
distro_version="${2:-$(lsb_release -r|cut -f 2|cut -c1-2)}"
fi
APTCMD="apt"
APTGETCMD="apt-get"
APT_CANDIDATES="arj build-essential bzip2 cabextract cpio cramfsswap git gzip lhasa liblzma-dev liblzo2-dev locales lzop mtd-utils p7zip p7zip-full python3-distutils python3-setuptools python3-matplotlib python3-capstone python3-pycryptodome python3-gnupg python3-poetry pipx squashfs-tools sleuthkit srecord tar wget zlib1g-dev"
# Check for root privileges
if [ $UID -eq 0 ]
then
echo "UID is 0, sudo not required"
SUDO=""
else
SUDO="sudo -E"
fi
install_yaffshiv()
{
git clone --quiet --depth 1 --branch "master" https://github.com/devttys0/yaffshiv
(cd yaffshiv && pipx install .)
rm -rf yaffshiv
}
install_sasquatch()
{
git clone --quiet --depth 1 --branch "master" https://github.com/devttys0/sasquatch
(cd sasquatch &&
wget https://github.com/devttys0/sasquatch/pull/47.patch &&
patch -p1 < 47.patch &&
./build.sh)
rm -rf sasquatch
}
install_cramfstools()
{
# Downloads cramfs tools from sourceforge and installs them to $INSTALL_LOCATION
TIME=`date +%s`
INSTALL_LOCATION=/usr/local/bin
# https://github.com/torvalds/linux/blob/master/fs/cramfs/README#L106
git clone --quiet --depth 1 --branch "master" https://github.com/npitre/cramfs-tools
# There is no "make install"
(cd cramfs-tools \
&& make \
&& $SUDO install cramfsck $INSTALL_LOCATION)
rm -rf cramfs-tools
}
install_pip_package()
{
PACKAGE="$1"
pipx install $PACKAGE
}
find_path()
{
FILE_NAME="$1"
echo -ne "checking for $FILE_NAME..."
which $FILE_NAME > /dev/null
if [ $? -eq 0 ]
then
echo "yes"
return 0
else
echo "no"
return 1
fi
}
# Make sure the user really wants to do this
if [ $YES -eq 0 ]
then
echo ""
echo "WARNING: This script will download and install all required and optional dependencies for binwalk."
echo " This script has only been tested on, and is only intended for, Debian based systems."
echo " Some dependencies are downloaded via unsecure (HTTP) protocols."
echo " This script requires internet access."
echo " This script requires root privileges."
echo ""
if [ "$distro" != Unknown ]
then
echo " $distro $distro_version detected"
else
echo "WARNING: Distro not detected, using package-manager defaults"
fi
echo ""
echo -n "Continue [y/N]? "
read YN
if [ "$(echo "$YN" | grep -i -e 'y' -e 'yes')" == "" ]
then
echo "Quitting..."
exit 1
fi
elif [ "$distro" != Unknown ]
then
echo "$distro $distro_version detected"
else
echo "WARNING: Distro not detected, using package-manager defaults"
fi
# Check for supported package managers and set the PKG_* envars appropriately
find_path $APTCMD
if [ $? -eq 1 ]
then
find_path $APTGETCMD
if [ $? -ne 1 ]
then
PKGCMD="$APTGETCMD"
PKGCMD_OPTS="install -y"
PKG_CANDIDATES="$APT_CANDIDATES"
fi
else
if "$APTCMD" install -s -y dpkg > /dev/null
then
PKGCMD="$APTCMD"
PKGCMD_OPTS="install -y"
PKG_CANDIDATES="$APT_CANDIDATES"
else
PKGCMD="$APTGETCMD"
PKGCMD_OPTS="install -y"
PKG_CANDIDATES="$APT_CANDIDATES"
fi
fi
# Install system packages
$SUDO $PKGCMD $PKGCMD_OPTS $PKG_CANDIDATES
# Do the install(s)
cd /tmp
if [ $? -ne 0 ]
then
echo "Package installation failed: $PKG_CANDIDATES"
exit 1
fi
install_pip_package ubi_reader
install_pip_package jefferson
install_sasquatch
install_yaffshiv
install_cramfstools