Skip to content

Commit 4c77106

Browse files
authored
Add other libs (#25)
* Adapt API to other libc + Add Musl * Adapt regex to extract symbols (thank's @blukat29) Regex from @blukat29 (blukat29@287ca62#diff-6f1488814a51063192c9aabb59112ef1R11) * Add Alpine * Add DietLibc * Fix symbols extracting regex
1 parent 92d5c36 commit 4c77106

File tree

3 files changed

+145
-26
lines changed

3 files changed

+145
-26
lines changed

README.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,16 @@ In addition of RPM-Based requirements, you will need:
136136
* tar
137137

138138

139+
### APK Based
140+
141+
* mktemp
142+
* perl
143+
* wget
144+
* tar
145+
* gzip
146+
* grep
147+
148+
139149
### Install everything
140150

141151
To install everything on Debian 10, run these commands:

common/libc.sh

Lines changed: 79 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ die() {
88
}
99

1010
dump_symbols() {
11-
readelf -Ws $1 | perl -n -e '/: (\w*).*?(\w+)@@GLIBC_/ && print "$2 $1\n"'
11+
readelf -Ws $1 | perl -n -e '/: (\w+)\s+\w+\s+(?:FUNC|OBJECT)\s+(?:\w+\s+){3}(\w+)\b(?:@@GLIBC)?/ && print "$2 $1\n"' | sort -u
1212
}
1313

1414
extract_label() {
@@ -96,10 +96,11 @@ requirements_general() {
9696
get_debian() {
9797
local url="$1"
9898
local info="$2"
99+
local pkgname="$3"
99100
local tmp=`mktemp -d`
100101
echo "Getting $info"
101102
echo " -> Location: $url"
102-
local id=`echo $url | perl -n -e '/(libc6[^\/]*)\./ && print $1'`
103+
local id=`echo $url | perl -n -e '/('"$pkgname"'[^\/]*)\./ && print $1'`
103104
echo " -> ID: $id"
104105
check_id $id || return
105106
echo " -> Downloading package"
@@ -116,8 +117,9 @@ get_debian() {
116117
get_all_debian() {
117118
local info=$1
118119
local url=$2
119-
for f in `wget $url/ -O - 2>/dev/null | grep -Eoh 'libc6(-i386|-amd64)?_[^"]*(amd64|i386)\.deb' |grep -v "</a>"`; do
120-
get_debian $url/$f $1
120+
local pkgname=$3
121+
for f in `wget $url/ -O - 2>/dev/null | grep -Eoh "$pkgname"'(-i386|-amd64|-x32)?_[^"]*(amd64|i386)\.deb' |grep -v "</a>"`; do
122+
get_debian "$url/$f" "$info" "$pkgname"
121123
done
122124
return 0
123125
}
@@ -137,10 +139,11 @@ requirements_debian() {
137139
get_rpm() {
138140
local url="$1"
139141
local info="$2"
142+
local pkgname="$3"
140143
local tmp="$(mktemp -d)"
141144
echo "Getting $info"
142145
echo " -> Location: $url"
143-
local id=$(echo "$url" | perl -n -e '/(libc[^\/]*)\./ && print $1')
146+
local id=$(echo "$url" | perl -n -e '/('"$pkgname"'[^\/]*)\./ && print $1')
144147
echo " -> ID: $id"
145148
check_id "$id" || return
146149
echo " -> Downloading package"
@@ -157,22 +160,23 @@ get_rpm() {
157160
get_all_rpm() {
158161
local info=$1
159162
local pkg=$2
160-
local arch=$3
163+
local pkgname=$3
164+
local arch=$4
161165
local website="http://rpmfind.net"
162166
local searchurl="$website/linux/rpm2html/search.php?query=$pkg"
163167
echo "Getting package $pkg locations"
164168
local url=""
165169
for i in $(seq 1 3); do
166170
urls=$(wget "$searchurl" -O - 2>/dev/null \
167-
| grep -oh "/[^']*libc[^']*\.$arch\.rpm")
171+
| grep -oh "/[^']*${pkgname}[^']*\.$arch\.rpm")
168172
[[ -z "$urls" ]] || break
169173
echo "Retrying..."
170174
sleep 1
171175
done
172176
[[ -n "$urls" ]] || die "Failed to get package version"
173177
for url in $urls
174178
do
175-
get_rpm "$website$url" "$info"
179+
get_rpm "$website$url" "$info" "$pkgname"
176180
sleep .1
177181
done
178182
}
@@ -208,7 +212,7 @@ get_from_filelistgz() {
208212
[[ -n "$urls" ]] || die "Failed to get package version"
209213
for url in $urls
210214
do
211-
get_rpm "$website/$url" "$info"
215+
get_rpm "$website/$url" "$info" "$pkg"
212216
sleep .1
213217
done
214218
}
@@ -227,10 +231,11 @@ requirements_centos() {
227231
get_pkg() {
228232
local url="$1"
229233
local info="$2"
234+
local pkgname="$3"
230235
local tmp="$(mktemp -d)"
231236
echo "Getting $info"
232237
echo " -> Location: $url"
233-
local id=$(echo "$url" | perl -n -e '/(libc[^\/]*)\.pkg\.tar\.(xz|zst)/ && print $1' | ( (echo "$url" | grep -q 'lib32') && sed 's/x86_64/x86/g' || cat))
238+
local id=$(echo "$url" | perl -n -e '/('"$pkgname"'[^\/]*)\.pkg\.tar\.(xz|zst)/ && print $1' | ( (echo "$url" | grep -q 'lib32') && sed 's/x86_64/x86/g' || cat))
234239
echo " -> ID: $id"
235240
check_id $id || return
236241
echo " -> Downloading package"
@@ -256,11 +261,12 @@ get_pkg() {
256261
get_all_pkg() {
257262
local info=$1
258263
local directory=$2
264+
local pkgname=$3
259265
echo "Getting package $info locations"
260266
local url=""
261267
for i in $(seq 1 3); do
262268
urls=$(wget "$directory" -O - 2>/dev/null \
263-
| grep -oh '[^"]*libc[^"]*\.pkg[^"]*' \
269+
| grep -oh '[^"]*'"$pkgname"'[^"]*\.pkg[^"]*' \
264270
| grep -v '.sig' \
265271
| grep -v '>')
266272
[[ -z "$urls" ]] || break
@@ -270,7 +276,7 @@ get_all_pkg() {
270276
[[ -n "$urls" ]] || die "Failed to get package version"
271277
for url in $urls
272278
do
273-
get_pkg "$directory/$url" "$info"
279+
get_pkg "$directory/$url" "$info" "$pkgname"
274280
sleep .1
275281
done
276282
}
@@ -288,6 +294,67 @@ requirements_pkg() {
288294
return 0
289295
}
290296

297+
298+
# ===== Alpine ===== #
299+
300+
get_apk() {
301+
local url="$1"
302+
local info="$2"229
303+
local pkgname="$3"
304+
local tmp=$(mktemp -d)
305+
echo "Getting $info"
306+
echo " -> Location: $url"
307+
local id=$(echo "$url" | perl -n -e '/('"$pkgname"'[^\/]*)\.apk/ && print $1')
308+
echo " -> ID: $id"
309+
check_id $id || return
310+
echo " -> Downloading package"
311+
wget "$url" 2>/dev/null -O "$tmp/pkg.tar.gz" || die "Failed to download package from $url"
312+
echo " -> Extracting package"
313+
pushd $tmp 1>/dev/null
314+
tar xzf pkg.tar.gz --warning=none
315+
popd 1>/dev/null
316+
index_libc "$tmp" "$id" "$info" "$url"
317+
rm -rf $tmp
318+
}
319+
320+
get_all_apk() {
321+
local info=$1
322+
local repo=$2
323+
local version=$3
324+
local component=$4
325+
local arch=$5
326+
local pkgname=$6
327+
local directory="$repo/$version/$component/$arch/"
328+
echo "Getting package $info locations"
329+
local url=""
330+
for i in $(seq 1 3); do
331+
urls=$(wget "$directory" -O - 2>/dev/null \
332+
| grep -oh '[^"]*'"$pkgname"'-[0-9][^"]*\.apk' \
333+
| grep -v '.sig' \
334+
| grep -v '>')
335+
[[ -z "$urls" ]] || break
336+
echo "Retrying..."
337+
sleep 1
338+
done
339+
[[ -n "$urls" ]] || die "Failed to get package version"
340+
for url in $urls
341+
do
342+
get_apk "$directory$url" "$info" "$pkgname"
343+
sleep .1
344+
done
345+
}
346+
347+
requirements_apk() {
348+
which mktemp 1>/dev/null 2>&1 || return
349+
which perl 1>/dev/null 2>&1 || return
350+
which wget 1>/dev/null 2>&1 || return
351+
which tar 1>/dev/null 2>&1 || return
352+
which gzip 1>/dev/null 2>&1 || return
353+
which grep 1>/dev/null 2>&1 || return
354+
return 0
355+
}
356+
357+
291358
# ===== Local ===== #
292359

293360
add_local() {

get

Lines changed: 56 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,28 +10,39 @@ categories[cntr_category]="ubuntu"
1010
requirements["ubuntu"]="requirements_debian"
1111
cntr_category=$((cntr_category + 1))
1212
ubuntu() {
13-
get_all_debian ubuntu-eglibc http://archive.ubuntu.com/ubuntu/pool/main/e/eglibc/
14-
get_all_debian ubuntu-glibc http://archive.ubuntu.com/ubuntu/pool/main/g/glibc/
15-
get_all_debian ubuntu-security-eglibc http://security.ubuntu.com/ubuntu/pool/main/e/eglibc/
16-
get_all_debian ubuntu-security-glibc http://security.ubuntu.com/ubuntu/pool/main/g/glibc/
17-
get_all_debian ubuntu-old-eglibc http://old-releases.ubuntu.com/ubuntu/pool/main/e/eglibc/
18-
get_all_debian ubuntu-old-glibc http://old-releases.ubuntu.com/ubuntu/pool/main/g/glibc/
13+
get_all_debian ubuntu-eglibc http://archive.ubuntu.com/ubuntu/pool/main/e/eglibc/ libc6
14+
get_all_debian ubuntu-glibc http://archive.ubuntu.com/ubuntu/pool/main/g/glibc/ libc6
15+
get_all_debian ubuntu-musl http://archive.ubuntu.com/ubuntu/pool/universe/m/musl/ musl
16+
get_all_debian ubuntu-dietlibc http://archive.ubuntu.com/ubuntu/pool/universe/d/dietlibc/ dietlibc
17+
get_all_debian ubuntu-security-eglibc http://security.ubuntu.com/ubuntu/pool/main/e/eglibc/ libc6
18+
get_all_debian ubuntu-security-glibc http://security.ubuntu.com/ubuntu/pool/main/g/glibc/ libc6
19+
get_all_debian ubuntu-security-musl http://security.ubuntu.com/ubuntu/pool/universe/m/musl/ musl
20+
get_all_debian ubuntu-security-dietlibc http://security.ubuntu.com/ubuntu/pool/universe/d/dietlibc/ dietlibc
21+
get_all_debian ubuntu-old-eglibc http://old-releases.ubuntu.com/ubuntu/pool/main/e/eglibc/ libc6
22+
get_all_debian ubuntu-old-glibc http://old-releases.ubuntu.com/ubuntu/pool/main/g/glibc/ libc6
23+
get_all_debian ubuntu-old-musl http://old-releases.ubuntu.com/ubuntu/pool/universe/m/musl/ musl
24+
get_all_debian ubuntu-old-dietlibc http://old-releases.ubuntu.com/ubuntu/pool/universe/d/dietlibc/ dietlibc
1925
}
2026

2127
categories[cntr_category]="debian"
2228
requirements["debian"]="requirements_debian"
2329
cntr_category=$((cntr_category + 1))
2430
debian() {
25-
get_all_debian debian-glibc https://deb.debian.org/debian/pool/main/g/glibc
31+
get_all_debian debian-glibc https://deb.debian.org/debian/pool/main/g/glibc/ libc6
32+
get_all_debian debian-musl https://deb.debian.org/debian/pool/main/m/musl/ musl
33+
get_all_debian debian-dietlibc https://deb.debian.org/debian/pool/main/d/dietlibc/ dietlibc
2634
}
2735

2836
categories[cntr_category]="rpm"
2937
requirements["rpm"]="requirements_rpm"
3038
cntr_category=$((cntr_category + 1))
3139
rpm() {
32-
get_all_rpm rpm glibc x86_64
33-
get_all_rpm rpm glibc i586
34-
get_all_rpm rpm glibc i686
40+
get_all_rpm rpm glibc libc x86_64
41+
get_all_rpm rpm glibc libc i586
42+
get_all_rpm rpm glibc libc i686
43+
get_all_rpm rpm musl musl x86_64
44+
get_all_rpm rpm musl musl i586
45+
get_all_rpm rpm musl musl i686
3546
}
3647

3748
categories[cntr_category]="centos"
@@ -46,21 +57,52 @@ categories[cntr_category]="arch"
4657
requirements["arch"]="requirements_pkg"
4758
cntr_category=$((cntr_category + 1))
4859
arch() {
49-
get_all_pkg arch-glibc https://archive.archlinux.org/packages/g/glibc/
50-
get_all_pkg arch-lib32-glibc https://archive.archlinux.org/packages/l/lib32-glibc/
60+
get_all_pkg arch-glibc https://archive.archlinux.org/packages/g/glibc/ libc
61+
get_all_pkg arch-lib32-glibc https://archive.archlinux.org/packages/l/lib32-glibc/ libc
62+
get_all_pkg arch-musl https://archive.archlinux.org/packages/m/musl/ musl
63+
}
64+
65+
categories[cntr_category]="alpine"
66+
requirements["alpine"]="requirements_apk"
67+
cntr_category=$((cntr_category + 1))
68+
alpine() {
69+
alpine_versions=(
70+
latest-stable
71+
edge
72+
v3.0
73+
v3.1
74+
v3.2
75+
v3.3
76+
v3.4
77+
v3.5
78+
v3.6
79+
v3.7
80+
v3.8
81+
v3.9
82+
v3.10
83+
v3.11
84+
v3.12
85+
)
86+
87+
for version in "${alpine_versions[@]}"; do
88+
get_all_apk alpine-musl http://dl-cdn.alpinelinux.org/alpine/ "$version" main x86_64 musl
89+
get_all_apk alpine-musl http://dl-cdn.alpinelinux.org/alpine/ "$version" main x86 musl
90+
done
5191
}
5292

5393
categories[cntr_category]="kali"
5494
requirements["kali"]="requirements_debian"
5595
cntr_category=$((cntr_category + 1))
5696
kali() {
57-
get_all_debian kali-glibc https://http.kali.org/pool/main/g/glibc/
97+
get_all_debian kali-glibc https://http.kali.org/pool/main/g/glibc/ libc6
98+
get_all_debian kali-musl https://http.kali.org/pool/main/m/musl/ musl
5899
}
59100
categories[cntr_category]="parrotsec"
60101
requirements["parrotsec"]="requirements_debian"
61102
cntr_category=$((cntr_category + 1))
62103
parrotsec() {
63-
get_all_debian parrotsec-glibc https://download.parrot.sh/parrot/pool/main/g/glibc/
104+
get_all_debian parrotsec-glibc https://download.parrot.sh/parrot/pool/main/g/glibc/ libc6
105+
get_all_debian parrotsec-musl https://download.parrot.sh/parrot/pool/main/m/musl/ musl
64106
}
65107

66108

0 commit comments

Comments
 (0)