Linux webserver 6.8.0-49-generic #49~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Nov 6 17:42:15 UTC 2 x86_64
Apache/2.4.52 (Ubuntu)
Server IP : 192.168.1.1 & Your IP : 18.224.64.24
Domains :
Cant Read [ /etc/named.conf ]
User : www-data
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
usr /
bin /
Delete
Unzip
Name
Size
Permission
Date
Action
GET
15.82
KB
-rwxr-xr-x
2022-01-28 18:57
HEAD
15.82
KB
-rwxr-xr-x
2022-01-28 18:57
NF
963
B
-rwxr-xr-x
2020-02-17 14:11
POST
15.82
KB
-rwxr-xr-x
2022-01-28 18:57
VGAuthService
126.54
KB
-rwxr-xr-x
2023-12-05 21:18
[
50.44
KB
-rwxr-xr-x
2024-02-08 03:46
aa-enabled
34.52
KB
-rwxr-xr-x
2024-03-06 18:35
aa-exec
34.52
KB
-rwxr-xr-x
2024-03-06 18:35
aa-features-abi
30.52
KB
-rwxr-xr-x
2024-03-06 18:35
ab
58.43
KB
-rwxr-xr-x
2025-04-03 09:05
acpidbg
1.58
KB
-rwxr-xr-x
2025-04-11 20:45
add-apt-repository
14.14
KB
-rwxr-xr-x
2023-10-24 13:07
addpart
14.38
KB
-rwxr-xr-x
2024-04-09 15:32
addr2line
26.7
KB
-rwxr-xr-x
2025-03-17 19:24
apport-bug
2.51
KB
-rwxr-xr-x
2024-07-10 11:56
apport-cli
13.05
KB
-rwxr-xr-x
2024-07-10 14:48
apport-collect
2.51
KB
-rwxr-xr-x
2024-07-10 11:56
apport-unpack
2.02
KB
-rwxr-xr-x
2024-07-10 14:48
apropos
47.28
KB
-rwxr-xr-x
2022-03-17 19:03
apt
18.38
KB
-rwxr-xr-x
2024-09-05 14:43
apt-add-repository
14.14
KB
-rwxr-xr-x
2023-10-24 13:07
apt-cache
82.47
KB
-rwxr-xr-x
2024-09-05 14:43
apt-cdrom
26.47
KB
-rwxr-xr-x
2024-09-05 14:43
apt-config
26.39
KB
-rwxr-xr-x
2024-09-05 14:43
apt-extracttemplates
22.47
KB
-rwxr-xr-x
2024-09-05 14:43
apt-ftparchive
230.48
KB
-rwxr-xr-x
2024-09-05 14:43
apt-get
50.47
KB
-rwxr-xr-x
2024-09-05 14:43
apt-key
27.51
KB
-rwxr-xr-x
2024-09-05 14:43
apt-mark
50.47
KB
-rwxr-xr-x
2024-09-05 14:43
apt-sortpkgs
38.4
KB
-rwxr-xr-x
2024-09-05 14:43
ar
54.48
KB
-rwxr-xr-x
2025-03-17 19:24
arch
30.51
KB
-rwxr-xr-x
2024-02-08 03:46
as
456.4
KB
-rwxr-xr-x
2025-03-17 19:24
automat-visualize3
405
B
-rwxr-xr-x
2020-08-02 12:53
awk
688.46
KB
-rwxr-xr-x
2023-08-17 10:24
b2sum
50.52
KB
-rwxr-xr-x
2024-02-08 03:46
base32
34.51
KB
-rwxr-xr-x
2024-02-08 03:46
base64
34.51
KB
-rwxr-xr-x
2024-02-08 03:46
basename
34.51
KB
-rwxr-xr-x
2024-02-08 03:46
basenc
46.51
KB
-rwxr-xr-x
2024-02-08 03:46
bash
1.33
MB
-rwxr-xr-x
2024-03-14 11:31
bashbug
6.66
KB
-rwxr-xr-x
2024-03-14 11:31
bc
90.82
KB
-rwxr-xr-x
2022-03-23 09:42
boltctl
122.98
KB
-rwxr-xr-x
2022-02-07 11:31
bootctl
70.49
KB
-rwxr-xr-x
2023-11-21 20:57
btrfs
844.13
KB
-rwxr-xr-x
2022-02-24 17:39
btrfs-convert
483.25
KB
-rwxr-xr-x
2022-02-24 17:39
btrfs-find-root
439.33
KB
-rwxr-xr-x
2022-02-24 17:39
btrfs-image
467.25
KB
-rwxr-xr-x
2022-02-24 17:39
btrfs-map-logical
439.25
KB
-rwxr-xr-x
2022-02-24 17:39
btrfs-select-super
439.25
KB
-rwxr-xr-x
2022-02-24 17:39
btrfsck
844.13
KB
-rwxr-xr-x
2022-02-24 17:39
btrfstune
443.26
KB
-rwxr-xr-x
2022-02-24 17:39
bunzip2
38.38
KB
-rwxr-xr-x
2022-03-23 09:45
busctl
90.49
KB
-rwxr-xr-x
2023-11-21 20:57
busybox
2.09
MB
-rwxr-xr-x
2024-08-13 13:39
byobu
8.17
KB
-rwxr-xr-x
2020-02-17 14:11
byobu-config
996
B
-rwxr-xr-x
2020-02-17 14:11
byobu-ctrl-a
4.66
KB
-rwxr-xr-x
2020-02-17 14:11
byobu-disable
1.26
KB
-rwxr-xr-x
2020-02-17 14:11
byobu-disable-prompt
1.31
KB
-rwxr-xr-x
2020-02-17 14:11
byobu-enable
1.15
KB
-rwxr-xr-x
2020-02-17 14:11
byobu-enable-prompt
1.42
KB
-rwxr-xr-x
2020-02-17 14:11
byobu-export
1.32
KB
-rwxr-xr-x
2020-02-17 14:11
byobu-janitor
6.29
KB
-rwxr-xr-x
2020-02-17 14:11
byobu-keybindings
1.47
KB
-rwxr-xr-x
2020-02-17 14:11
byobu-launch
3.25
KB
-rwxr-xr-x
2020-02-17 14:11
byobu-launcher
1.87
KB
-rwxr-xr-x
2020-02-17 14:11
byobu-launcher-install
2.4
KB
-rwxr-xr-x
2020-02-17 14:11
byobu-launcher-uninstall
1.52
KB
-rwxr-xr-x
2020-02-17 14:11
byobu-layout
3.27
KB
-rwxr-xr-x
2020-02-17 14:11
byobu-prompt
1.13
KB
-rwxr-xr-x
2020-02-17 14:11
byobu-quiet
1.38
KB
-rwxr-xr-x
2020-02-17 14:11
byobu-reconnect-sockets
3.22
KB
-rwxr-xr-x
2020-02-17 14:11
byobu-screen
8.17
KB
-rwxr-xr-x
2020-02-17 14:11
byobu-select-backend
1.42
KB
-rwxr-xr-x
2020-02-17 14:11
byobu-select-profile
5
KB
-rwxr-xr-x
2020-02-17 14:11
byobu-select-session
1012
B
-rwxr-xr-x
2020-02-17 14:11
byobu-shell
1.56
KB
-rwxr-xr-x
2020-02-17 14:11
byobu-silent
1.28
KB
-rwxr-xr-x
2020-02-17 14:11
byobu-status
5.87
KB
-rwxr-xr-x
2020-02-17 14:11
byobu-status-detail
1.18
KB
-rwxr-xr-x
2020-02-17 14:11
byobu-tmux
8.17
KB
-rwxr-xr-x
2020-02-17 14:11
byobu-ugraph
4.56
KB
-rwxr-xr-x
2020-02-17 14:11
byobu-ulevel
11.71
KB
-rwxr-xr-x
2020-02-17 14:11
bzcat
38.38
KB
-rwxr-xr-x
2022-03-23 09:45
bzcmp
2.17
KB
-rwxr-xr-x
2022-03-23 09:45
bzdiff
2.17
KB
-rwxr-xr-x
2022-03-23 09:45
bzegrep
3.69
KB
-rwxr-xr-x
2022-03-23 09:45
bzexe
4.78
KB
-rwxr-xr-x
2021-11-27 12:25
bzfgrep
3.69
KB
-rwxr-xr-x
2022-03-23 09:45
bzgrep
3.69
KB
-rwxr-xr-x
2022-03-23 09:45
bzip2
38.38
KB
-rwxr-xr-x
2022-03-23 09:45
bzip2recover
14.3
KB
-rwxr-xr-x
2022-03-23 09:45
bzless
1.27
KB
-rwxr-xr-x
2022-03-23 09:45
bzmore
1.27
KB
-rwxr-xr-x
2022-03-23 09:45
c++filt
22.27
KB
-rwxr-xr-x
2025-03-17 19:24
c_rehash
6.8
KB
-rwxr-xr-x
2025-02-05 13:19
captoinfo
86.41
KB
-rwxr-xr-x
2023-05-16 18:45
cat
34.46
KB
-rwxr-xr-x
2024-02-08 03:46
catman
34.76
KB
-rwxr-xr-x
2022-03-17 19:03
cautious-launcher
853
B
-rwxr-xr-x
2021-12-10 23:14
certbot
16.3
MB
-rwxr-xr-x
2024-07-26 02:57
cftp3
956
B
-rwxr-xr-x
2024-11-22 17:49
cgi-fcgi
18.15
KB
-rwxr-xr-x
2025-04-30 08:57
chage
70.49
KB
-rwxr-sr-x
2024-02-06 12:54
chardet
965
B
-rwxr-xr-x
2020-12-30 16:42
chardetect
965
B
-rwxr-xr-x
2020-12-30 16:42
chattr
14.31
KB
-rwxr-xr-x
2023-10-09 01:50
chcon
58.51
KB
-rwxr-xr-x
2024-02-08 03:46
checkgid
14.3
KB
-rwxr-xr-x
2025-04-03 09:05
chfn
71.01
KB
-rwsr-xr-x
2024-02-06 12:54
chgrp
54.51
KB
-rwxr-xr-x
2024-02-08 03:46
chmod
54.51
KB
-rwxr-xr-x
2024-02-08 03:46
choom
22.38
KB
-rwxr-xr-x
2024-04-09 15:32
chown
58.51
KB
-rwxr-xr-x
2024-02-08 03:46
chrt
26.38
KB
-rwxr-xr-x
2024-04-09 15:32
chsh
43.76
KB
-rwsr-xr-x
2024-02-06 12:54
chvt
14.23
KB
-rwxr-xr-x
2022-12-16 14:14
ckbcomp
146.31
KB
-rwxr-xr-x
2021-11-22 16:39
ckeygen3
962
B
-rwxr-xr-x
2024-11-22 17:49
cksum
34.41
KB
-rwxr-xr-x
2024-02-08 03:46
clear
14.31
KB
-rwxr-xr-x
2023-05-16 18:45
clear_console
14.23
KB
-rwxr-xr-x
2024-03-14 11:31
cloud-id
966
B
-rwxr-xr-x
2024-07-11 21:27
cloud-init
970
B
-rwxr-xr-x
2024-07-11 21:27
cloud-init-per
2.06
KB
-rwxr-xr-x
2024-07-03 01:59
cmp
42.39
KB
-rwxr-xr-x
2022-03-23 13:50
codepage
14.15
KB
-rwxr-xr-x
2022-12-16 14:14
col
22.38
KB
-rwxr-xr-x
2024-04-09 15:32
col1
963
B
-rwxr-xr-x
2020-02-17 14:11
col2
963
B
-rwxr-xr-x
2020-02-17 14:11
col3
963
B
-rwxr-xr-x
2020-02-17 14:11
col4
963
B
-rwxr-xr-x
2020-02-17 14:11
col5
963
B
-rwxr-xr-x
2020-02-17 14:11
col6
963
B
-rwxr-xr-x
2020-02-17 14:11
col7
963
B
-rwxr-xr-x
2020-02-17 14:11
col8
963
B
-rwxr-xr-x
2020-02-17 14:11
col9
963
B
-rwxr-xr-x
2020-02-17 14:11
colcrt
14.38
KB
-rwxr-xr-x
2024-04-09 15:32
colrm
14.38
KB
-rwxr-xr-x
2024-04-09 15:32
column
34.38
KB
-rwxr-xr-x
2024-04-09 15:32
comm
34.52
KB
-rwxr-xr-x
2024-02-08 03:46
compose
18.06
KB
-rwxr-xr-x
2021-12-10 23:14
conch3
958
B
-rwxr-xr-x
2024-11-22 17:49
corelist
15.01
KB
-rwxr-xr-x
2025-04-08 13:21
cp
138.51
KB
-rwxr-xr-x
2024-02-08 03:46
cpan
8.16
KB
-rwxr-xr-x
2025-04-08 13:21
cpan5.34-x86_64-linux-gnu
8.18
KB
-rwxr-xr-x
2025-04-08 13:21
cpio
141.64
KB
-rwxr-xr-x
2024-04-28 12:30
cpupower
1.58
KB
-rwxr-xr-x
2025-04-11 20:45
crontab
38.64
KB
-rwxr-sr-x
2022-03-23 13:49
csplit
106.51
KB
-rwxr-xr-x
2024-02-08 03:46
ctail
960
B
-rwxr-xr-x
2020-02-17 14:11
ctstat
22.66
KB
-rwxr-xr-x
2022-03-24 11:56
curl
254.23
KB
-rwxr-xr-x
2024-12-11 17:26
cut
38.51
KB
-rwxr-xr-x
2024-02-08 03:46
cvtsudoers
296.4
KB
-rwxr-xr-x
2023-04-03 18:00
dash
122.74
KB
-rwxr-xr-x
2022-03-23 13:49
date
102.51
KB
-rwxr-xr-x
2024-02-08 03:46
dbus-cleanup-sockets
14.29
KB
-rwxr-xr-x
2022-10-25 13:15
dbus-daemon
227.32
KB
-rwxr-xr-x
2022-10-25 13:15
dbus-monitor
26.29
KB
-rwxr-xr-x
2022-10-25 13:15
dbus-run-session
14.29
KB
-rwxr-xr-x
2022-10-25 13:15
dbus-send
26.29
KB
-rwxr-xr-x
2022-10-25 13:15
dbus-update-activation-environment
14.29
KB
-rwxr-xr-x
2022-10-25 13:15
dbus-uuidgen
14.29
KB
-rwxr-xr-x
2022-10-25 13:15
dbxtool
26.3
KB
-rwxr-xr-x
2023-05-17 05:35
dd
66.52
KB
-rwxr-xr-x
2024-02-08 03:46
deallocvt
14.23
KB
-rwxr-xr-x
2022-12-16 14:14
deb-systemd-helper
20.89
KB
-rwxr-xr-x
2021-12-07 21:55
deb-systemd-invoke
6.01
KB
-rwxr-xr-x
2022-02-15 22:31
debconf
2.79
KB
-rwxr-xr-x
2022-02-20 14:42
debconf-apt-progress
11.27
KB
-rwxr-xr-x
2022-02-20 14:42
debconf-communicate
608
B
-rwxr-xr-x
2022-02-20 14:42
debconf-copydb
1.68
KB
-rwxr-xr-x
2022-02-20 14:42
debconf-escape
647
B
-rwxr-xr-x
2022-02-20 14:42
debconf-set-selections
2.92
KB
-rwxr-xr-x
2022-02-20 14:42
debconf-show
1.78
KB
-rwxr-xr-x
2022-02-20 14:42
debian-distro-info
22.95
KB
-rwxr-xr-x
2023-11-28 12:18
delpart
14.38
KB
-rwxr-xr-x
2024-04-09 15:32
delv
44.82
KB
-rwxr-xr-x
2025-01-28 14:30
df
83.08
KB
-rwxr-xr-x
2024-02-08 03:46
dfu-tool
110.3
KB
-rwxr-xr-x
2023-05-17 05:35
dh_bash-completion
4.31
KB
-rwxr-xr-x
2021-11-11 15:41
dh_perl_openssl
1.5
KB
-rwxr-xr-x
2020-05-16 09:46
diff
130.55
KB
-rwxr-xr-x
2022-03-23 13:50
diff3
54.52
KB
-rwxr-xr-x
2022-03-23 13:50
dig
146.83
KB
-rwxr-xr-x
2025-01-28 14:30
dir
134.98
KB
-rwxr-xr-x
2024-02-08 03:46
dircolors
38.52
KB
-rwxr-xr-x
2024-02-08 03:46
dirmngr
433.02
KB
-rwxr-xr-x
2025-03-28 17:39
dirmngr-client
54.92
KB
-rwxr-xr-x
2025-03-28 17:39
dirname
30.38
KB
-rwxr-xr-x
2024-02-08 03:46
distro-info
22.89
KB
-rwxr-xr-x
2023-11-28 12:18
dmesg
70.61
KB
-rwxr-xr-x
2024-04-09 15:32
dnsdomainname
22.23
KB
-rwxr-xr-x
2022-03-23 13:57
do-release-upgrade
10.42
KB
-rwxr-xr-x
2024-09-10 12:28
domainname
22.23
KB
-rwxr-xr-x
2022-03-23 13:57
dpkg
310.69
KB
-rwxr-xr-x
2024-02-23 14:53
dpkg-deb
134.49
KB
-rwxr-xr-x
2024-02-23 14:53
dpkg-divert
118.49
KB
-rwxr-xr-x
2024-02-23 14:53
dpkg-maintscript-helper
20.71
KB
-rwxr-xr-x
2024-02-23 14:53
dpkg-query
138.52
KB
-rwxr-xr-x
2024-02-23 14:53
dpkg-realpath
4.09
KB
-rwxr-xr-x
2024-02-23 14:53
dpkg-split
98.51
KB
-rwxr-xr-x
2024-02-23 14:53
dpkg-statoverride
46.26
KB
-rwxr-xr-x
2024-02-23 14:53
dpkg-trigger
42.41
KB
-rwxr-xr-x
2024-02-23 14:53
du
146.51
KB
-rwxr-xr-x
2024-02-08 03:46
dumpkeys
158.71
KB
-rwxr-xr-x
2022-12-16 14:14
dwp
1.82
MB
-rwxr-xr-x
2025-03-17 19:24
eatmydata
2.74
KB
-rwxr-xr-x
2021-04-17 11:51
ec2metadata
8.38
KB
-rwxr-xr-x
2021-08-05 09:58
echo
34.3
KB
-rwxr-xr-x
2024-02-08 03:46
ed
54.49
KB
-rwxr-xr-x
2022-02-13 11:08
edit
18.06
KB
-rwxr-xr-x
2021-12-10 23:14
editor
276.52
KB
-rwxr-xr-x
2024-10-10 13:39
efibootdump
22.15
KB
-rwxr-xr-x
2021-08-03 12:08
efibootmgr
43.27
KB
-rwxr-xr-x
2021-08-03 12:08
egrep
28
B
-rwxr-xr-x
2022-03-23 13:56
eject
42.23
KB
-rwxr-xr-x
2024-04-09 15:32
elfedit
34.72
KB
-rwxr-xr-x
2025-03-17 19:24
enc2xs
40.84
KB
-rwxr-xr-x
2025-04-08 13:21
encguess
3.01
KB
-rwxr-xr-x
2025-04-08 13:21
env
42.95
KB
-rwxr-xr-x
2024-02-08 03:46
envsubst
34.38
KB
-rwxr-xr-x
2022-03-25 10:31
eqn
188.45
KB
-rwxr-xr-x
2022-03-23 13:56
ex
3.61
MB
-rwxr-xr-x
2025-04-02 12:39
expand
34.53
KB
-rwxr-xr-x
2024-02-08 03:46
expiry
22.59
KB
-rwxr-sr-x
2024-02-06 12:54
expr
102.41
KB
-rwxr-xr-x
2024-02-08 03:46
factor
70.51
KB
-rwxr-xr-x
2024-02-08 03:46
faillog
22.59
KB
-rwxr-xr-x
2024-02-06 12:54
fallocate
22.38
KB
-rwxr-xr-x
2024-04-09 15:32
false
26.3
KB
-rwxr-xr-x
2024-02-08 03:46
fcgistarter
14.3
KB
-rwxr-xr-x
2025-04-03 09:05
fgconsole
14.23
KB
-rwxr-xr-x
2022-12-16 14:14
fgrep
28
B
-rwxr-xr-x
2022-03-23 13:56
file
26.56
KB
-rwxr-xr-x
2023-09-11 17:59
finalrd
2.06
KB
-rwxr-xr-x
2022-02-16 16:56
fincore
22.42
KB
-rwxr-xr-x
2024-04-09 15:32
find
275.48
KB
-rwxr-xr-x
2022-03-23 13:52
findmnt
63.61
KB
-rwxr-xr-x
2024-04-09 15:32
flock
22.48
KB
-rwxr-xr-x
2024-04-09 15:32
fmt
38.51
KB
-rwxr-xr-x
2024-02-08 03:46
fold
34.51
KB
-rwxr-xr-x
2024-02-08 03:46
free
26.23
KB
-rwxr-xr-x
2023-10-31 11:36
ftp
178.9
KB
-rwxr-xr-x
2022-03-25 10:01
funzip
22.3
KB
-rwxr-xr-x
2024-02-01 15:52
fuser
39.31
KB
-rwxr-xr-x
2022-03-24 16:29
fusermount
34.38
KB
-rwsr-xr-x
2022-03-23 13:53
fusermount3
34.38
KB
-rwsr-xr-x
2022-03-23 13:53
fwupdagent
190.3
KB
-rwxr-xr-x
2023-05-17 05:35
fwupdate
82.3
KB
-rwxr-xr-x
2023-05-17 05:35
fwupdmgr
190.3
KB
-rwxr-xr-x
2023-05-17 05:35
fwupdtool
394.92
KB
-rwxr-xr-x
2023-05-17 05:35
gapplication
22.38
KB
-rwxr-xr-x
2024-11-13 17:54
gawk
688.46
KB
-rwxr-xr-x
2023-08-17 10:24
gdbus
50.38
KB
-rwxr-xr-x
2024-11-13 17:54
geqn
188.45
KB
-rwxr-xr-x
2022-03-23 13:56
getconf
34.29
KB
-rwxr-xr-x
2025-01-28 20:25
getent
38.65
KB
-rwxr-xr-x
2025-01-28 20:25
getkeycodes
14.23
KB
-rwxr-xr-x
2022-12-16 14:14
getopt
22.38
KB
-rwxr-xr-x
2024-04-09 15:32
gettext
34.38
KB
-rwxr-xr-x
2022-03-25 10:31
gettext.sh
5.07
KB
-rwxr-xr-x
2022-03-25 10:31
ginstall-info
103.23
KB
-rwxr-xr-x
2022-02-06 12:48
gio
90.4
KB
-rwxr-xr-x
2024-11-13 17:54
gio-querymodules
14.3
KB
-rwxr-xr-x
2024-11-13 17:54
git
3.54
MB
-rwxr-xr-x
2025-01-13 20:13
git-receive-pack
3.54
MB
-rwxr-xr-x
2025-01-13 20:13
git-shell
552.58
KB
-rwxr-xr-x
2025-01-13 20:13
git-upload-archive
3.54
MB
-rwxr-xr-x
2025-01-13 20:13
git-upload-pack
3.54
MB
-rwxr-xr-x
2025-01-13 20:13
glib-compile-schemas
50.3
KB
-rwxr-xr-x
2024-11-13 17:54
gold
3.04
MB
-rwxr-xr-x
2025-03-17 19:24
gpasswd
70.38
KB
-rwsr-xr-x
2024-02-06 12:54
gpg
1
MB
-rwxr-xr-x
2025-03-28 17:39
gpg-agent
312.96
KB
-rwxr-xr-x
2025-03-28 17:39
gpg-connect-agent
82.99
KB
-rwxr-xr-x
2025-03-28 17:39
gpg-wks-server
115.05
KB
-rwxr-xr-x
2025-03-28 17:39
gpg-zip
3.43
KB
-rwxr-xr-x
2025-03-28 17:39
gpgcompose
496.48
KB
-rwxr-xr-x
2025-03-28 17:39
gpgconf
126.73
KB
-rwxr-xr-x
2025-03-28 17:39
gpgparsemail
34.38
KB
-rwxr-xr-x
2025-03-28 17:39
gpgsm
418.9
KB
-rwxr-xr-x
2025-03-28 17:39
gpgsplit
26.55
KB
-rwxr-xr-x
2025-03-28 17:39
gpgtar
63.39
KB
-rwxr-xr-x
2025-03-28 17:39
gpgv
271.04
KB
-rwxr-xr-x
2025-03-28 17:39
gpic
200.04
KB
-rwxr-xr-x
2022-03-23 13:56
gprof
111.79
KB
-rwxr-xr-x
2025-03-17 19:24
gpu-manager
78.82
KB
-rwxr-xr-x
2024-10-07 14:57
grep
178.45
KB
-rwxr-xr-x
2022-03-23 13:56
gresource
22.3
KB
-rwxr-xr-x
2024-11-13 17:54
groff
94.5
KB
-rwxr-xr-x
2022-03-23 13:56
grog
2.71
KB
-rwxr-xr-x
2022-03-23 13:56
grops
162.55
KB
-rwxr-xr-x
2022-03-23 13:56
grotty
118.52
KB
-rwxr-xr-x
2022-03-23 13:56
groups
34.51
KB
-rwxr-xr-x
2024-02-08 03:46
growpart
26.22
KB
-rwxr-xr-x
2021-08-05 09:58
grub-editenv
376.95
KB
-rwxr-xr-x
2022-12-18 21:21
grub-file
816.45
KB
-rwxr-xr-x
2022-12-18 21:21
grub-fstest
937.92
KB
-rwxr-xr-x
2022-12-18 21:21
grub-glue-efi
247.86
KB
-rwxr-xr-x
2022-12-18 21:21
grub-kbdcomp
1.64
KB
-rwxr-xr-x
2022-12-18 21:21
grub-menulst2cfg
228.13
KB
-rwxr-xr-x
2022-12-18 21:21
grub-mkfont
272.42
KB
-rwxr-xr-x
2022-12-18 21:21
grub-mkimage
361.05
KB
-rwxr-xr-x
2022-12-18 21:21
grub-mklayout
252.17
KB
-rwxr-xr-x
2022-12-18 21:21
grub-mknetdir
417.66
KB
-rwxr-xr-x
2022-12-18 21:21
grub-mkpasswd-pbkdf2
256.2
KB
-rwxr-xr-x
2022-12-18 21:21
grub-mkrelpath
247.58
KB
-rwxr-xr-x
2022-12-18 21:21
grub-mkrescue
998.47
KB
-rwxr-xr-x
2022-12-18 21:21
grub-mkstandalone
493.95
KB
-rwxr-xr-x
2022-12-18 21:21
grub-mount
760.84
KB
-rwxr-xr-x
2022-12-18 21:21
grub-render-label
828.83
KB
-rwxr-xr-x
2022-12-18 21:21
grub-script-check
275.7
KB
-rwxr-xr-x
2022-12-18 21:21
grub-syslinux2cfg
781.34
KB
-rwxr-xr-x
2022-12-18 21:21
gsettings
30.3
KB
-rwxr-xr-x
2024-11-13 17:54
gtbl
126.48
KB
-rwxr-xr-x
2022-03-23 13:56
gunzip
2.29
KB
-rwxr-xr-x
2022-09-05 13:33
gzexe
6.3
KB
-rwxr-xr-x
2022-09-05 13:33
gzip
91.23
KB
-rwxr-xr-x
2022-09-05 13:33
h2ph
28.54
KB
-rwxr-xr-x
2025-04-08 13:21
h2xs
59.51
KB
-rwxr-xr-x
2025-04-08 13:21
hardlink
34.43
KB
-rwxr-xr-x
2024-04-09 15:32
hd
50.39
KB
-rwxr-xr-x
2024-04-09 15:32
head
42.51
KB
-rwxr-xr-x
2024-02-08 03:46
helpztags
2.46
KB
-rwxr-xr-x
2024-08-27 05:29
hexdump
50.39
KB
-rwxr-xr-x
2024-04-09 15:32
host
118.82
KB
-rwxr-xr-x
2025-01-28 14:30
hostid
30.51
KB
-rwxr-xr-x
2024-02-08 03:46
hostname
22.23
KB
-rwxr-xr-x
2022-03-23 13:57
hostnamectl
30.38
KB
-rwxr-xr-x
2023-11-21 20:57
htcacheclean
38.31
KB
-rwxr-xr-x
2025-04-03 09:05
htdbm
26.3
KB
-rwxr-xr-x
2025-04-03 09:05
htdigest
14.3
KB
-rwxr-xr-x
2025-04-03 09:05
htop
277.19
KB
-rwxr-xr-x
2022-03-23 13:58
htpasswd
26.3
KB
-rwxr-xr-x
2025-04-03 09:05
hwe-support-status
10.58
KB
-rwxr-xr-x
2024-06-26 09:01
i386
26.65
KB
-rwxr-xr-x
2024-04-09 15:32
ibd2sdi
294.74
KB
-rwxr-xr-x
2025-04-25 17:19
iconv
66.41
KB
-rwxr-xr-x
2025-01-28 20:25
id
38.51
KB
-rwxr-xr-x
2024-02-08 03:46
info
301.74
KB
-rwxr-xr-x
2022-02-06 12:48
infobrowser
301.74
KB
-rwxr-xr-x
2022-02-06 12:48
infocmp
62.38
KB
-rwxr-xr-x
2023-05-16 18:45
infotocap
86.41
KB
-rwxr-xr-x
2023-05-16 18:45
innochecksum
199.39
KB
-rwxr-xr-x
2025-04-25 17:19
install
142.52
KB
-rwxr-xr-x
2024-02-08 03:46
install-info
103.23
KB
-rwxr-xr-x
2022-02-06 12:48
instmodsh
4.27
KB
-rwxr-xr-x
2025-04-08 13:21
ionice
18.38
KB
-rwxr-xr-x
2024-04-09 15:32
ip
702.05
KB
-rwxr-xr-x
2022-03-24 11:56
ipcmk
22.45
KB
-rwxr-xr-x
2024-04-09 15:32
ipcrm
18.38
KB
-rwxr-xr-x
2024-04-09 15:32
ipcs
38.38
KB
-rwxr-xr-x
2024-04-09 15:32
iptables-xml
96.95
KB
-rwxr-xr-x
2024-01-16 21:14
ischroot
14.2
KB
-rwxr-xr-x
2022-03-23 13:49
iscsiadm
398.46
KB
-rwxr-xr-x
2022-01-19 11:38
join
46.55
KB
-rwxr-xr-x
2024-02-08 03:46
journalctl
78.39
KB
-rwxr-xr-x
2023-11-21 20:57
json-patch-jsondiff
1004
B
-rwxr-xr-x
2021-09-29 10:31
json_pp
4.88
KB
-rwxr-xr-x
2025-04-08 13:21
jsondiff
1004
B
-rwxr-xr-x
2021-09-29 10:31
jsonpatch
3.77
KB
-rwxr-xr-x
2021-09-29 10:31
jsonpointer
1.79
KB
-rwxr-xr-x
2020-01-24 03:25
jsonschema
397
B
-rwxr-xr-x
2020-01-23 18:44
kbd_mode
14.52
KB
-rwxr-xr-x
2022-12-16 14:14
kbdinfo
18.23
KB
-rwxr-xr-x
2022-12-16 14:14
kbxutil
62.83
KB
-rwxr-xr-x
2025-03-28 17:39
keep-one-running
3.51
KB
-rwxr-xr-x
2014-01-15 22:24
kernel-install
4.79
KB
-rwxr-xr-x
2022-03-11 12:48
keyring
961
B
-rwxr-xr-x
2022-01-02 14:55
kill
30.23
KB
-rwxr-xr-x
2023-10-31 11:36
killall
31.34
KB
-rwxr-xr-x
2022-03-24 16:29
kmod
166.36
KB
-rwxr-xr-x
2021-08-17 09:19
kmodsign
18.45
KB
-rwxr-xr-x
2021-11-05 17:32
landscape-sysinfo
624
B
-rwxr-xr-x
2024-05-28 19:19
last
34.38
KB
-rwxr-xr-x
2024-04-09 15:32
lastb
34.38
KB
-rwxr-xr-x
2024-04-09 15:32
lastlog
27.63
KB
-rwxr-xr-x
2024-02-06 12:54
lcf
7.6
KB
-rwxr-xr-x
2020-06-16 05:37
ld
1.66
MB
-rwxr-xr-x
2025-03-17 19:24
ld.bfd
1.66
MB
-rwxr-xr-x
2025-03-17 19:24
ld.gold
3.04
MB
-rwxr-xr-x
2025-03-17 19:24
ldd
5.32
KB
-rwxr-xr-x
2025-01-28 20:25
less
194.38
KB
-rwxr-xr-x
2024-04-27 20:32
lessecho
14.31
KB
-rwxr-xr-x
2024-04-27 20:32
lessfile
8.83
KB
-rwxr-xr-x
2021-12-28 19:39
lesskey
23.7
KB
-rwxr-xr-x
2024-04-27 20:32
lesspipe
8.83
KB
-rwxr-xr-x
2021-12-28 19:39
lexgrog
99.75
KB
-rwxr-xr-x
2022-03-17 19:03
libnetcfg
15.41
KB
-rwxr-xr-x
2025-04-08 13:21
link
30.51
KB
-rwxr-xr-x
2024-02-08 03:46
linux-boot-prober
1.54
KB
-rwxr-xr-x
2021-07-11 02:43
linux-check-removal
3.99
KB
-rwxr-xr-x
2020-06-25 17:23
linux-update-symlinks
6.17
KB
-rwxr-xr-x
2020-06-25 17:23
linux-version
2.63
KB
-rwxr-xr-x
2021-05-03 16:16
linux32
26.65
KB
-rwxr-xr-x
2024-04-09 15:32
linux64
26.65
KB
-rwxr-xr-x
2024-04-09 15:32
ln
58.51
KB
-rwxr-xr-x
2024-02-08 03:46
lnstat
22.66
KB
-rwxr-xr-x
2022-03-24 11:56
loadkeys
198.76
KB
-rwxr-xr-x
2022-12-16 14:14
loadunimap
30.32
KB
-rwxr-xr-x
2022-12-16 14:14
locale
57.56
KB
-rwxr-xr-x
2025-01-28 20:25
locale-check
14.15
KB
-rwxr-xr-x
2024-09-10 11:18
localectl
26.37
KB
-rwxr-xr-x
2023-11-21 20:57
localedef
326.96
KB
-rwxr-xr-x
2025-01-28 20:25
logger
34.97
KB
-rwxr-xr-x
2024-04-09 15:32
login
51.73
KB
-rwxr-xr-x
2024-02-06 12:54
loginctl
58.48
KB
-rwxr-xr-x
2023-11-21 20:57
logname
30.51
KB
-rwxr-xr-x
2024-02-08 03:46
logresolve
14.31
KB
-rwxr-xr-x
2025-04-03 09:05
look
18.38
KB
-rwxr-xr-x
2024-04-09 15:32
lowntfs-3g
114.98
KB
-rwxr-xr-x
2022-11-01 11:56
ls
134.98
KB
-rwxr-xr-x
2024-02-08 03:46
lsattr
14.31
KB
-rwxr-xr-x
2023-10-09 01:50
lsb_release
3.55
KB
-rwxr-xr-x
2019-08-25 21:11
lsblk
122.38
KB
-rwxr-xr-x
2024-04-09 15:32
lscpu
98.38
KB
-rwxr-xr-x
2024-04-09 15:32
lshw
901.2
KB
-rwxr-xr-x
2022-03-24 16:22
lsinitramfs
706
B
-rwxr-xr-x
2023-07-25 09:54
lsipc
50.38
KB
-rwxr-xr-x
2024-04-09 15:32
lslocks
30.7
KB
-rwxr-xr-x
2024-04-09 15:32
lslogins
50.38
KB
-rwxr-xr-x
2024-04-09 15:32
lsmem
34.38
KB
-rwxr-xr-x
2024-04-09 15:32
lsmod
166.36
KB
-rwxr-xr-x
2021-08-17 09:19
lsns
38.38
KB
-rwxr-xr-x
2024-04-09 15:32
lsof
163.62
KB
-rwxr-xr-x
2022-03-24 16:16
lspci
92.08
KB
-rwxr-xr-x
2021-08-30 02:45
lspgpot
1.06
KB
-rwxr-xr-x
2017-08-28 10:22
lsusb
246.52
KB
-rwxr-xr-x
2022-03-25 09:53
lwp-download
10.05
KB
-rwxr-xr-x
2022-01-28 18:57
lwp-dump
2.65
KB
-rwxr-xr-x
2022-01-28 18:57
lwp-mirror
2.36
KB
-rwxr-xr-x
2022-01-28 18:57
lwp-request
15.82
KB
-rwxr-xr-x
2022-01-28 18:57
lzcat
82.52
KB
-rwxr-xr-x
2022-04-08 12:51
lzcmp
6.86
KB
-rwxr-xr-x
2022-04-08 12:51
lzdiff
6.86
KB
-rwxr-xr-x
2022-04-08 12:51
lzegrep
5.87
KB
-rwxr-xr-x
2022-04-08 12:51
lzfgrep
5.87
KB
-rwxr-xr-x
2022-04-08 12:51
lzgrep
5.87
KB
-rwxr-xr-x
2022-04-08 12:51
lzless
1.76
KB
-rwxr-xr-x
2022-04-08 12:51
lzma
82.52
KB
-rwxr-xr-x
2022-04-08 12:51
lzmainfo
14.23
KB
-rwxr-xr-x
2022-04-08 12:51
lzmore
2.11
KB
-rwxr-xr-x
2022-04-08 12:51
mailmail3
964
B
-rwxr-xr-x
2024-11-22 17:49
man
117.68
KB
-rwxr-xr-x
2022-03-17 19:03
man-recode
35.68
KB
-rwxr-xr-x
2022-03-17 19:03
mandb
139.94
KB
-rwxr-xr-x
2022-03-17 19:03
manifest
1.9
KB
-rwxr-xr-x
2020-02-17 14:11
manpath
30.78
KB
-rwxr-xr-x
2022-03-17 19:03
mapscrn
30.32
KB
-rwxr-xr-x
2022-12-16 14:14
mawk
154.79
KB
-rwxr-xr-x
2022-01-23 21:57
mcookie
26.45
KB
-rwxr-xr-x
2024-04-09 15:32
md5sum
42.41
KB
-rwxr-xr-x
2024-02-08 03:46
md5sum.textutils
42.41
KB
-rwxr-xr-x
2024-02-08 03:46
mdig
50.4
KB
-rwxr-xr-x
2025-01-28 14:30
mesg
14.38
KB
-rwxr-xr-x
2024-04-09 15:32
migrate-pubring-from-classic-gpg
2.99
KB
-rwxr-xr-x
2021-12-18 21:45
mk_modmap
15.78
KB
-rwxr-xr-x
2022-12-16 14:14
mkdir
66.51
KB
-rwxr-xr-x
2024-02-08 03:46
mkfifo
38.51
KB
-rwxr-xr-x
2024-02-08 03:46
mknod
42.51
KB
-rwxr-xr-x
2024-02-08 03:46
mksquashfs
254.68
KB
-rwxr-xr-x
2022-03-25 09:58
mktemp
38.51
KB
-rwxr-xr-x
2024-02-08 03:46
mmcli
273.84
KB
-rwxr-xr-x
2023-12-20 05:35
mokutil
59.48
KB
-rwxr-xr-x
2023-08-24 21:14
more
42.38
KB
-rwxr-xr-x
2024-04-09 15:32
mount
46.38
KB
-rwsr-xr-x
2024-04-09 15:32
mountpoint
18.38
KB
-rwxr-xr-x
2024-04-09 15:32
mt
66.73
KB
-rwxr-xr-x
2024-04-28 12:30
mt-gnu
66.73
KB
-rwxr-xr-x
2024-04-28 12:30
mtr
72.25
KB
-rwxr-xr-x
2022-01-11 12:46
mtr-packet
38.3
KB
-rwxr-xr-x
2022-01-11 12:46
mv
134.52
KB
-rwxr-xr-x
2024-02-08 03:46
my_print_defaults
171.24
KB
-rwxr-xr-x
2025-04-25 17:19
myisam_ftdump
6.35
MB
-rwxr-xr-x
2025-04-25 17:19
myisamchk
6.55
MB
-rwxr-xr-x
2025-04-25 17:19
myisamlog
6.38
MB
-rwxr-xr-x
2025-04-25 17:19
myisampack
6.41
MB
-rwxr-xr-x
2025-04-25 17:19
mysql
6.65
MB
-rwxr-xr-x
2025-04-25 17:19
mysql_config_editor
157.03
KB
-rwxr-xr-x
2025-04-25 17:19
mysql_migrate_keyring
6.53
MB
-rwxr-xr-x
2025-04-25 17:19
mysql_secure_installation
6.47
MB
-rwxr-xr-x
2025-04-25 17:19
mysql_ssl_rsa_setup
194.9
KB
-rwxr-xr-x
2025-04-25 17:19
mysql_tzinfo_to_sql
74.91
KB
-rwxr-xr-x
2025-04-25 17:19
mysql_upgrade
6.55
MB
-rwxr-xr-x
2025-04-25 17:19
mysqladmin
6.49
MB
-rwxr-xr-x
2025-04-25 17:19
mysqlanalyze
6.49
MB
-rwxr-xr-x
2025-04-25 17:19
mysqlbinlog
6.8
MB
-rwxr-xr-x
2025-04-25 17:19
mysqlcheck
6.49
MB
-rwxr-xr-x
2025-04-25 17:19
mysqld_multi
26.73
KB
-rwxr-xr-x
2025-04-25 17:19
mysqld_safe
28.45
KB
-rwxr-xr-x
2025-04-25 17:19
mysqldump
6.57
MB
-rwxr-xr-x
2025-04-25 17:19
mysqldumpslow
7.54
KB
-rwxr-xr-x
2025-04-25 17:19
mysqlimport
6.48
MB
-rwxr-xr-x
2025-04-25 17:19
mysqloptimize
6.49
MB
-rwxr-xr-x
2025-04-25 17:19
mysqlpump
6.85
MB
-rwxr-xr-x
2025-04-25 17:19
mysqlrepair
6.49
MB
-rwxr-xr-x
2025-04-25 17:19
mysqlreport
38.1
KB
-rwxr-xr-x
2023-06-14 19:23
mysqlshow
6.49
MB
-rwxr-xr-x
2025-04-25 17:19
mysqlslap
6.5
MB
-rwxr-xr-x
2025-04-25 17:19
namei
22.38
KB
-rwxr-xr-x
2024-04-09 15:32
nano
276.52
KB
-rwxr-xr-x
2024-10-10 13:39
nawk
688.46
KB
-rwxr-xr-x
2023-08-17 10:24
nc
38.63
KB
-rwxr-xr-x
2022-02-23 11:09
nc.openbsd
38.63
KB
-rwxr-xr-x
2022-02-23 11:09
neqn
913
B
-rwxr-xr-x
2022-03-23 13:56
netcat
38.63
KB
-rwxr-xr-x
2022-02-23 11:09
netstat
154.59
KB
-rwxr-xr-x
2022-03-24 16:20
networkctl
102.38
KB
-rwxr-xr-x
2023-11-21 20:57
networkd-dispatcher
19.71
KB
-rwxr-xr-x
2022-05-04 13:29
newgrp
39.55
KB
-rwsr-xr-x
2024-02-06 12:54
ngettext
34.38
KB
-rwxr-xr-x
2022-03-25 10:31
nice
34.51
KB
-rwxr-xr-x
2024-02-08 03:46
nisdomainname
22.23
KB
-rwxr-xr-x
2022-03-23 13:57
nl
98.57
KB
-rwxr-xr-x
2024-02-08 03:46
nm
43.63
KB
-rwxr-xr-x
2025-03-17 19:24
nm-online
22.38
KB
-rwxr-xr-x
2022-06-09 09:27
nmcli
926.77
KB
-rwxr-xr-x
2022-06-09 09:27
nmtui
734.35
KB
-rwxr-xr-x
2022-06-09 09:27
nmtui-connect
734.35
KB
-rwxr-xr-x
2022-06-09 09:27
nmtui-edit
734.35
KB
-rwxr-xr-x
2022-06-09 09:27
nmtui-hostname
734.35
KB
-rwxr-xr-x
2022-06-09 09:27
nohup
34.41
KB
-rwxr-xr-x
2024-02-08 03:46
nproc
34.51
KB
-rwxr-xr-x
2024-02-08 03:46
nroff
3.22
KB
-rwxr-xr-x
2022-03-23 13:56
nsenter
26.6
KB
-rwxr-xr-x
2024-04-09 15:32
nslookup
122.82
KB
-rwxr-xr-x
2025-01-28 14:30
nstat
30.38
KB
-rwxr-xr-x
2022-03-24 11:56
nsupdate
74.55
KB
-rwxr-xr-x
2025-01-28 14:30
ntfs-3g
159.01
KB
-rwxr-xr-x
2022-11-01 11:56
ntfs-3g.probe
14.38
KB
-rwxr-xr-x
2022-11-01 11:56
ntfscat
26.38
KB
-rwxr-xr-x
2022-11-01 11:56
ntfscluster
38.38
KB
-rwxr-xr-x
2022-11-01 11:56
ntfscmp
30.38
KB
-rwxr-xr-x
2022-11-01 11:56
ntfsdecrypt
42.38
KB
-rwxr-xr-x
2022-11-01 11:56
ntfsfallocate
26.38
KB
-rwxr-xr-x
2022-11-01 11:56
ntfsfix
34.38
KB
-rwxr-xr-x
2022-11-01 11:56
ntfsinfo
54.38
KB
-rwxr-xr-x
2022-11-01 11:56
ntfsls
27.45
KB
-rwxr-xr-x
2022-11-01 11:56
ntfsmove
30.38
KB
-rwxr-xr-x
2022-11-01 11:56
ntfsrecover
106.38
KB
-rwxr-xr-x
2022-11-01 11:56
ntfssecaudit
78.86
KB
-rwxr-xr-x
2022-11-01 11:56
ntfstruncate
26.3
KB
-rwxr-xr-x
2022-11-01 11:56
ntfsusermap
18.3
KB
-rwxr-xr-x
2022-11-01 11:56
ntfswipe
42.91
KB
-rwxr-xr-x
2022-11-01 11:56
numfmt
54.54
KB
-rwxr-xr-x
2024-02-08 03:46
nvidia-detector
270
B
-rwxr-xr-x
2024-10-07 14:57
objcopy
162.54
KB
-rwxr-xr-x
2025-03-17 19:24
objdump
369.13
KB
-rwxr-xr-x
2025-03-17 19:24
od
66.51
KB
-rwxr-xr-x
2024-02-08 03:46
oem-getlogs
8.59
KB
-rwxr-xr-x
2024-07-10 14:48
on_ac_power
2.18
KB
-rwxr-xr-x
2019-07-20 15:43
open
18.06
KB
-rwxr-xr-x
2021-12-10 23:14
openssl
977.8
KB
-rwxr-xr-x
2025-02-05 13:19
openvt
22.59
KB
-rwxr-xr-x
2022-12-16 14:14
os-prober
4.44
KB
-rwxr-xr-x
2021-07-11 02:43
pager
194.38
KB
-rwxr-xr-x
2024-04-27 20:32
partx
58.38
KB
-rwxr-xr-x
2024-04-09 15:32
passwd
58.57
KB
-rwsr-xr-x
2024-02-06 12:54
paste
34.41
KB
-rwxr-xr-x
2024-02-08 03:46
pastebinit
16.12
KB
-rwxr-xr-x
2021-11-24 02:53
patch
186.52
KB
-rwxr-xr-x
2022-03-24 16:22
pathchk
34.51
KB
-rwxr-xr-x
2024-02-08 03:46
pbget
2.51
KB
-rwxr-xr-x
2019-08-03 05:35
pbput
2.51
KB
-rwxr-xr-x
2019-08-03 05:35
pbputs
2.51
KB
-rwxr-xr-x
2019-08-03 05:35
pdb3
61.74
KB
-rwxr-xr-x
2025-02-04 14:57
pdb3.10
61.74
KB
-rwxr-xr-x
2025-02-04 14:57
peekfd
14.3
KB
-rwxr-xr-x
2022-03-24 16:29
perf
1.58
KB
-rwxr-xr-x
2025-04-11 20:45
perl
3.63
MB
-rwxr-xr-x
2025-04-08 13:21
perl5.34-x86_64-linux-gnu
14.3
KB
-rwxr-xr-x
2025-04-08 13:21
perl5.34.0
3.63
MB
-rwxr-xr-x
2025-04-08 13:21
perlbug
44.12
KB
-rwxr-xr-x
2025-04-08 13:21
perldoc
125
B
-rwxr-xr-x
2021-08-25 18:11
perlivp
10.61
KB
-rwxr-xr-x
2025-04-08 13:21
perlthanks
44.12
KB
-rwxr-xr-x
2025-04-08 13:21
perror
1.46
MB
-rwxr-xr-x
2025-04-25 17:19
pgrep
30.24
KB
-rwxr-xr-x
2023-10-31 11:36
phar
14.89
KB
-rwxr-xr-x
2025-03-24 19:04
phar.phar
14.89
KB
-rwxr-xr-x
2025-03-24 19:04
phar.phar8.1
14.89
KB
-rwxr-xr-x
2025-03-24 19:04
phar8.1
14.89
KB
-rwxr-xr-x
2025-03-24 19:04
phar8.1.phar
14.89
KB
-rwxr-xr-x
2025-03-24 19:04
php
5.28
MB
-rwxr-xr-x
2025-03-24 19:04
php8.1
5.28
MB
-rwxr-xr-x
2025-03-24 19:04
pic
200.04
KB
-rwxr-xr-x
2022-03-23 13:56
pico
276.52
KB
-rwxr-xr-x
2024-10-10 13:39
piconv
8.16
KB
-rwxr-xr-x
2025-04-08 13:21
pidof
30.38
KB
-rwxr-xr-x
2021-12-14 21:17
pidwait
30.24
KB
-rwxr-xr-x
2023-10-31 11:36
pinentry
58.65
KB
-rwxr-xr-x
2022-03-24 16:31
pinentry-curses
58.65
KB
-rwxr-xr-x
2022-03-24 16:31
ping
74.88
KB
-rwxr-xr-x
2022-02-05 04:37
ping4
74.88
KB
-rwxr-xr-x
2022-02-05 04:37
ping6
74.88
KB
-rwxr-xr-x
2022-02-05 04:37
pinky
34.41
KB
-rwxr-xr-x
2024-02-08 03:46
pkaction
18.3
KB
-rwxr-xr-x
2022-02-26 11:11
pkcheck
22.3
KB
-rwxr-xr-x
2022-02-26 11:11
pkcon
58.3
KB
-rwxr-xr-x
2022-03-14 19:11
pkexec
30.15
KB
-rwsr-xr-x
2022-02-26 11:11
pkill
30.24
KB
-rwxr-xr-x
2023-10-31 11:36
pkmon
22.3
KB
-rwxr-xr-x
2022-03-14 19:11
pkttyagent
18.3
KB
-rwxr-xr-x
2022-02-26 11:11
pl2pm
4.43
KB
-rwxr-xr-x
2025-04-08 13:21
pldd
22.37
KB
-rwxr-xr-x
2025-01-28 20:25
plog
146
B
-rwxr-xr-x
2022-02-23 15:12
plymouth
46.3
KB
-rwxr-xr-x
2022-03-18 10:45
pmap
34.24
KB
-rwxr-xr-x
2023-10-31 11:36
pod2html
4.04
KB
-rwxr-xr-x
2025-04-08 13:21
pod2man
14.68
KB
-rwxr-xr-x
2025-04-08 13:21
pod2text
10.55
KB
-rwxr-xr-x
2025-04-08 13:21
pod2usage
4.01
KB
-rwxr-xr-x
2025-04-08 13:21
podchecker
3.57
KB
-rwxr-xr-x
2025-04-08 13:21
poff
2.77
KB
-rwxr-xr-x
2022-02-23 15:12
pollinate
8.54
KB
-rwxr-xr-x
2018-05-29 20:13
pon
1.33
KB
-rwxr-xr-x
2022-02-23 15:12
pr
66.58
KB
-rwxr-xr-x
2024-02-08 03:46
preconv
54.48
KB
-rwxr-xr-x
2022-03-23 13:56
print
18.06
KB
-rwxr-xr-x
2021-12-10 23:14
printenv
30.38
KB
-rwxr-xr-x
2024-02-08 03:46
printf
50.44
KB
-rwxr-xr-x
2024-02-08 03:46
prlimit
26.89
KB
-rwxr-xr-x
2024-04-09 15:32
pro
1003
B
-rwxr-xr-x
2024-07-18 15:20
prove
13.34
KB
-rwxr-xr-x
2025-04-08 13:21
prtstat
22.38
KB
-rwxr-xr-x
2022-03-24 16:29
ps
138.45
KB
-rwxr-xr-x
2023-10-31 11:36
psfaddtable
26.23
KB
-rwxr-xr-x
2022-12-16 14:14
psfgettable
26.23
KB
-rwxr-xr-x
2022-12-16 14:14
psfstriptable
26.23
KB
-rwxr-xr-x
2022-12-16 14:14
psfxtable
26.23
KB
-rwxr-xr-x
2022-12-16 14:14
pslog
14.3
KB
-rwxr-xr-x
2022-03-24 16:29
pstree
35.32
KB
-rwxr-xr-x
2022-03-24 16:29
pstree.x11
35.32
KB
-rwxr-xr-x
2022-03-24 16:29
ptar
3.48
KB
-rwxr-xr-x
2025-04-08 13:21
ptardiff
2.58
KB
-rwxr-xr-x
2025-04-08 13:21
ptargrep
4.29
KB
-rwxr-xr-x
2025-04-08 13:21
ptx
126.55
KB
-rwxr-xr-x
2024-02-08 03:46
purge-old-kernels
1.12
KB
-rwxr-xr-x
2020-02-17 14:11
pwd
34.51
KB
-rwxr-xr-x
2024-02-08 03:46
pwdx
14.23
KB
-rwxr-xr-x
2023-10-31 11:36
py3clean
7.63
KB
-rwxr-xr-x
2024-08-08 12:28
py3compile
12.88
KB
-rwxr-xr-x
2024-08-08 12:28
py3versions
11.63
KB
-rwxr-xr-x
2024-08-08 12:28
pybabel
953
B
-rwxr-xr-x
2021-05-01 15:13
pybabel-python3
953
B
-rwxr-xr-x
2021-05-01 15:13
pydoc3
79
B
-rwxr-xr-x
2025-02-04 14:57
pydoc3.10
79
B
-rwxr-xr-x
2025-02-04 14:57
pygettext3
23.67
KB
-rwxr-xr-x
2023-06-06 22:30
pygettext3.10
23.67
KB
-rwxr-xr-x
2023-06-06 22:30
pyhtmlizer3
968
B
-rwxr-xr-x
2024-11-22 17:49
pyserial-miniterm
975
B
-rwxr-xr-x
2022-04-03 09:33
pyserial-ports
969
B
-rwxr-xr-x
2022-04-03 09:33
python3
5.66
MB
-rwxr-xr-x
2025-02-04 14:57
python3.10
5.66
MB
-rwxr-xr-x
2025-02-04 14:57
pzstd
702.47
KB
-rwxr-xr-x
2022-03-24 16:15
quirks-handler
2.4
KB
-rwxr-xr-x
2024-10-07 14:57
ranlib
54.48
KB
-rwxr-xr-x
2025-03-17 19:24
rbash
1.33
MB
-rwxr-xr-x
2024-03-14 11:31
rcp
130.59
KB
-rwxr-xr-x
2025-04-11 12:05
rdma
98.52
KB
-rwxr-xr-x
2022-03-24 11:56
readelf
758.44
KB
-rwxr-xr-x
2025-03-17 19:24
readlink
38.41
KB
-rwxr-xr-x
2024-02-08 03:46
realpath
38.41
KB
-rwxr-xr-x
2024-02-08 03:46
red
89
B
-rwxr-xr-x
2022-02-13 11:08
renice
14.38
KB
-rwxr-xr-x
2024-04-09 15:32
rescan-scsi-bus.sh
38.05
KB
-rwxr-xr-x
2023-03-22 14:57
reset
26.31
KB
-rwxr-xr-x
2023-05-16 18:45
resizecons
26.32
KB
-rwxr-xr-x
2022-12-16 14:14
resizepart
22.38
KB
-rwxr-xr-x
2024-04-09 15:32
resolvectl
130.52
KB
-rwxr-xr-x
2023-11-21 20:57
rev
14.38
KB
-rwxr-xr-x
2024-04-09 15:32
rgrep
30
B
-rwxr-xr-x
2020-01-29 12:09
rlogin
827.04
KB
-rwxr-xr-x
2025-04-11 12:05
rm
58.51
KB
-rwxr-xr-x
2024-02-08 03:46
rmdir
42.41
KB
-rwxr-xr-x
2024-02-08 03:46
rnano
276.52
KB
-rwxr-xr-x
2024-10-10 13:39
rotatelogs
26.38
KB
-rwxr-xr-x
2025-04-03 09:05
routef
208
B
-rwxr-xr-x
2022-03-24 11:56
routel
1.62
KB
-rwxr-xr-x
2022-03-24 11:56
rrsync
12.34
KB
-rwxr-xr-x
2025-01-16 09:55
rsh
827.04
KB
-rwxr-xr-x
2025-04-11 12:05
rsync
506.13
KB
-rwxr-xr-x
2025-01-16 09:55
rsync-ssl
5.02
KB
-rwxr-xr-x
2025-01-16 09:55
rtstat
22.66
KB
-rwxr-xr-x
2022-03-24 11:56
run-mailcap
18.06
KB
-rwxr-xr-x
2021-12-10 23:14
run-one
3.51
KB
-rwxr-xr-x
2014-01-15 22:24
run-one-constantly
3.51
KB
-rwxr-xr-x
2014-01-15 22:24
run-one-until-failure
3.51
KB
-rwxr-xr-x
2014-01-15 22:24
run-one-until-success
3.51
KB
-rwxr-xr-x
2014-01-15 22:24
run-parts
26.54
KB
-rwxr-xr-x
2022-03-23 13:49
run-this-one
3.51
KB
-rwxr-xr-x
2014-01-15 22:24
runcon
34.51
KB
-rwxr-xr-x
2024-02-08 03:46
rview
3.61
MB
-rwxr-xr-x
2025-04-02 12:39
rvim
3.61
MB
-rwxr-xr-x
2025-04-02 12:39
savelog
10.24
KB
-rwxr-xr-x
2022-03-23 13:49
sbattach
26.54
KB
-rwxr-xr-x
2021-11-05 17:32
sbkeysync
34.74
KB
-rwxr-xr-x
2021-11-05 17:32
sbsiglist
14.6
KB
-rwxr-xr-x
2021-11-05 17:32
sbsign
34.7
KB
-rwxr-xr-x
2021-11-05 17:32
sbvarsign
22.73
KB
-rwxr-xr-x
2021-11-05 17:32
sbverify
34.61
KB
-rwxr-xr-x
2021-11-05 17:32
scandeps
6.45
KB
-rwxr-xr-x
2024-11-18 17:31
scp
130.59
KB
-rwxr-xr-x
2025-04-11 12:05
screen
470.23
KB
-rwxr-xr-x
2022-02-02 03:38
screendump
14.15
KB
-rwxr-xr-x
2022-12-16 14:14
script
50.38
KB
-rwxr-xr-x
2024-04-09 15:32
scriptlive
42.38
KB
-rwxr-xr-x
2024-04-09 15:32
scriptreplay
34.38
KB
-rwxr-xr-x
2024-04-09 15:32
scsi_logging_level
8.38
KB
-rwxr-xr-x
2023-03-22 14:57
scsi_mandat
3.52
KB
-rwxr-xr-x
2023-03-22 14:57
scsi_readcap
1.3
KB
-rwxr-xr-x
2023-03-22 14:57
scsi_ready
1.09
KB
-rwxr-xr-x
2023-03-22 14:57
scsi_satl
3.74
KB
-rwxr-xr-x
2023-03-22 14:57
scsi_start
1.25
KB
-rwxr-xr-x
2023-03-22 14:57
scsi_stop
1.44
KB
-rwxr-xr-x
2023-03-22 14:57
scsi_temperature
936
B
-rwxr-xr-x
2023-03-22 14:57
sdiff
46.39
KB
-rwxr-xr-x
2022-03-23 13:50
sed
110.57
KB
-rwxr-xr-x
2022-03-25 09:51
see
18.06
KB
-rwxr-xr-x
2021-12-10 23:14
select-editor
2.39
KB
-rwxr-xr-x
2021-08-29 17:44
sensible-browser
1.26
KB
-rwxr-xr-x
2021-08-29 17:44
sensible-editor
1.24
KB
-rwxr-xr-x
2021-08-29 17:44
sensible-pager
565
B
-rwxr-xr-x
2021-08-29 17:44
seq
46.51
KB
-rwxr-xr-x
2024-02-08 03:46
setarch
26.65
KB
-rwxr-xr-x
2024-04-09 15:32
setfont
50.32
KB
-rwxr-xr-x
2022-12-16 14:14
setkeycodes
14.23
KB
-rwxr-xr-x
2022-12-16 14:14
setleds
18.21
KB
-rwxr-xr-x
2022-12-16 14:14
setlogcons
14.23
KB
-rwxr-xr-x
2022-12-16 14:14
setmetamode
14.26
KB
-rwxr-xr-x
2022-12-16 14:14
setpci
30.38
KB
-rwxr-xr-x
2021-08-30 02:45
setpriv
38.38
KB
-rwxr-xr-x
2024-04-09 15:32
setsid
14.38
KB
-rwxr-xr-x
2024-04-09 15:32
setterm
34.38
KB
-rwxr-xr-x
2024-04-09 15:32
setupcon
38.31
KB
-rwxr-xr-x
2021-11-22 16:39
sftp
142.66
KB
-rwxr-xr-x
2025-04-11 12:05
sg
39.55
KB
-rwsr-xr-x
2024-02-06 12:54
sg_bg_ctl
14.51
KB
-rwxr-xr-x
2023-03-22 14:57
sg_compare_and_write
26.91
KB
-rwxr-xr-x
2023-03-22 14:57
sg_copy_results
23.3
KB
-rwxr-xr-x
2023-03-22 14:57
sg_dd
54.33
KB
-rwxr-xr-x
2023-03-22 14:57
sg_decode_sense
14.76
KB
-rwxr-xr-x
2023-03-22 14:57
sg_emc_trespass
14.3
KB
-rwxr-xr-x
2023-03-22 14:57
sg_format
39.35
KB
-rwxr-xr-x
2023-03-22 14:57
sg_get_config
35.39
KB
-rwxr-xr-x
2023-03-22 14:57
sg_get_elem_status
26.79
KB
-rwxr-xr-x
2023-03-22 14:57
sg_get_lba_status
22.95
KB
-rwxr-xr-x
2023-03-22 14:57
sg_ident
14.6
KB
-rwxr-xr-x
2023-03-22 14:57
sg_inq
119.61
KB
-rwxr-xr-x
2023-03-22 14:57
sg_logs
150.93
KB
-rwxr-xr-x
2023-03-22 14:57
sg_luns
22.79
KB
-rwxr-xr-x
2023-03-22 14:57
sg_map
18.3
KB
-rwxr-xr-x
2023-03-22 14:57
sg_map26
26.7
KB
-rwxr-xr-x
2023-03-22 14:57
sg_modes
46.08
KB
-rwxr-xr-x
2023-03-22 14:57
sg_opcodes
35.01
KB
-rwxr-xr-x
2023-03-22 14:57
sg_persist
36.08
KB
-rwxr-xr-x
2023-03-22 14:57
sg_prevent
14.51
KB
-rwxr-xr-x
2023-03-22 14:57
sg_raw
26.91
KB
-rwxr-xr-x
2023-03-22 14:57
sg_rbuf
22.73
KB
-rwxr-xr-x
2023-03-22 14:57
sg_rdac
14.3
KB
-rwxr-xr-x
2023-03-22 14:57
sg_read
26.31
KB
-rwxr-xr-x
2023-03-22 14:57
sg_read_attr
36.65
KB
-rwxr-xr-x
2023-03-22 14:57
sg_read_block_limits
14.54
KB
-rwxr-xr-x
2023-03-22 14:57
sg_read_buffer
27.56
KB
-rwxr-xr-x
2023-03-22 14:57
sg_read_long
14.7
KB
-rwxr-xr-x
2023-03-22 14:57
sg_readcap
22.79
KB
-rwxr-xr-x
2023-03-22 14:57
sg_reassign
14.66
KB
-rwxr-xr-x
2023-03-22 14:57
sg_referrals
14.66
KB
-rwxr-xr-x
2023-03-22 14:57
sg_rep_pip
14.57
KB
-rwxr-xr-x
2023-03-22 14:57
sg_rep_zones
26.8
KB
-rwxr-xr-x
2023-03-22 14:57
sg_requests
22.76
KB
-rwxr-xr-x
2023-03-22 14:57
sg_reset
14.66
KB
-rwxr-xr-x
2023-03-22 14:57
sg_reset_wp
14.6
KB
-rwxr-xr-x
2023-03-22 14:57
sg_rmsn
14.51
KB
-rwxr-xr-x
2023-03-22 14:57
sg_rtpg
14.6
KB
-rwxr-xr-x
2023-03-22 14:57
sg_safte
22.7
KB
-rwxr-xr-x
2023-03-22 14:57
sg_sanitize
27.01
KB
-rwxr-xr-x
2023-03-22 14:57
sg_sat_identify
18.73
KB
-rwxr-xr-x
2023-03-22 14:57
sg_sat_phy_event
19.01
KB
-rwxr-xr-x
2023-03-22 14:57
sg_sat_read_gplog
18.73
KB
-rwxr-xr-x
2023-03-22 14:57
sg_sat_set_features
18.7
KB
-rwxr-xr-x
2023-03-22 14:57
sg_scan
18.3
KB
-rwxr-xr-x
2023-03-22 14:57
sg_seek
18.88
KB
-rwxr-xr-x
2023-03-22 14:57
sg_senddiag
27.2
KB
-rwxr-xr-x
2023-03-22 14:57
sg_ses
119.97
KB
-rwxr-xr-x
2023-03-22 14:57
sg_ses_microcode
27.36
KB
-rwxr-xr-x
2023-03-22 14:57
sg_start
18.85
KB
-rwxr-xr-x
2023-03-22 14:57
sg_stpg
22.73
KB
-rwxr-xr-x
2023-03-22 14:57
sg_stream_ctl
18.7
KB
-rwxr-xr-x
2023-03-22 14:57
sg_sync
14.66
KB
-rwxr-xr-x
2023-03-22 14:57
sg_test_rwbuf
18.6
KB
-rwxr-xr-x
2023-03-22 14:57
sg_timestamp
18.83
KB
-rwxr-xr-x
2023-03-22 14:57
sg_turs
26.7
KB
-rwxr-xr-x
2023-03-22 14:57
sg_unmap
22.76
KB
-rwxr-xr-x
2023-03-22 14:57
sg_verify
18.91
KB
-rwxr-xr-x
2023-03-22 14:57
sg_vpd
114.42
KB
-rwxr-xr-x
2023-03-22 14:57
sg_wr_mode
22.73
KB
-rwxr-xr-x
2023-03-22 14:57
sg_write_buffer
27.23
KB
-rwxr-xr-x
2023-03-22 14:57
sg_write_long
14.76
KB
-rwxr-xr-x
2023-03-22 14:57
sg_write_same
26.95
KB
-rwxr-xr-x
2023-03-22 14:57
sg_write_verify
26.79
KB
-rwxr-xr-x
2023-03-22 14:57
sg_write_x
55.6
KB
-rwxr-xr-x
2023-03-22 14:57
sg_xcopy
42.32
KB
-rwxr-xr-x
2023-03-22 14:57
sg_zone
14.86
KB
-rwxr-xr-x
2023-03-22 14:57
sginfo
72.01
KB
-rwxr-xr-x
2023-03-22 14:57
sgm_dd
38.31
KB
-rwxr-xr-x
2023-03-22 14:57
sgp_dd
46.31
KB
-rwxr-xr-x
2023-03-22 14:57
sh
122.74
KB
-rwxr-xr-x
2022-03-23 13:49
sha1sum
42.41
KB
-rwxr-xr-x
2024-02-08 03:46
sha224sum
50.41
KB
-rwxr-xr-x
2024-02-08 03:46
sha256sum
50.41
KB
-rwxr-xr-x
2024-02-08 03:46
sha384sum
58.41
KB
-rwxr-xr-x
2024-02-08 03:46
sha512sum
58.41
KB
-rwxr-xr-x
2024-02-08 03:46
shasum
9.75
KB
-rwxr-xr-x
2025-04-08 13:21
showconsolefont
18.23
KB
-rwxr-xr-x
2022-12-16 14:14
showkey
18.23
KB
-rwxr-xr-x
2022-12-16 14:14
shred
50.51
KB
-rwxr-xr-x
2024-02-08 03:46
shuf
46.51
KB
-rwxr-xr-x
2024-02-08 03:46
size
30.45
KB
-rwxr-xr-x
2025-03-17 19:24
skill
30.23
KB
-rwxr-xr-x
2023-10-31 11:36
slabtop
22.23
KB
-rwxr-xr-x
2023-10-31 11:36
sleep
34.51
KB
-rwxr-xr-x
2024-02-08 03:46
slogin
827.04
KB
-rwxr-xr-x
2025-04-11 12:05
snap
16.3
MB
-rwxr-xr-x
2024-07-26 02:57
snapctl
6.26
MB
-rwxr-xr-x
2024-07-26 02:57
snapfuse
38.23
KB
-rwxr-xr-x
2024-07-26 02:57
snice
30.23
KB
-rwxr-xr-x
2023-10-31 11:36
soelim
30.48
KB
-rwxr-xr-x
2022-03-23 13:56
sort
98.8
KB
-rwxr-xr-x
2024-02-08 03:46
sos
612
B
-rwxr-xr-x
2023-10-04 03:35
sos-collector
1.04
KB
-rwxr-xr-x
2023-10-04 03:35
sosreport
1.03
KB
-rwxr-xr-x
2023-10-04 03:35
splain
18.96
KB
-rwxr-xr-x
2025-04-08 13:21
split
50.97
KB
-rwxr-xr-x
2024-02-08 03:46
splitfont
14.15
KB
-rwxr-xr-x
2022-12-16 14:14
sqfscat
131.9
KB
-rwxr-xr-x
2022-03-25 09:58
sqfstar
254.68
KB
-rwxr-xr-x
2022-03-25 09:58
ss
125.07
KB
-rwxr-xr-x
2022-03-24 11:56
ssh
827.04
KB
-rwxr-xr-x
2025-04-11 12:05
ssh-add
166.42
KB
-rwxr-xr-x
2025-04-11 12:05
ssh-agent
286.43
KB
-rwxr-sr-x
2025-04-11 12:05
ssh-argv0
1.42
KB
-rwxr-xr-x
2024-07-10 10:17
ssh-copy-id
12.38
KB
-rwxr-xr-x
2022-02-23 11:31
ssh-import-id
985
B
-rwxr-xr-x
2021-02-11 15:34
ssh-import-id-gh
785
B
-rwxr-xr-x
2020-12-07 19:19
ssh-import-id-lp
785
B
-rwxr-xr-x
2020-12-07 19:19
ssh-keygen
446.44
KB
-rwxr-xr-x
2025-04-11 12:05
ssh-keyscan
190.44
KB
-rwxr-xr-x
2025-04-11 12:05
stat
78.52
KB
-rwxr-xr-x
2024-02-08 03:46
static-sh
2.09
MB
-rwxr-xr-x
2024-08-13 13:39
stdbuf
42.51
KB
-rwxr-xr-x
2024-02-08 03:46
strace
1.88
MB
-rwxr-xr-x
2022-02-16 09:37
strace-log-merge
1.78
KB
-rwxr-xr-x
2021-02-16 08:00
streamzip
7.75
KB
-rwxr-xr-x
2025-04-08 13:21
strings
30.61
KB
-rwxr-xr-x
2025-03-17 19:24
strip
162.57
KB
-rwxr-xr-x
2025-03-17 19:24
stty
74.51
KB
-rwxr-xr-x
2024-02-08 03:46
su
54.38
KB
-rwsr-xr-x
2024-04-09 15:32
sudo
226.97
KB
-rwsr-xr-x
2023-04-03 18:00
sudoedit
226.97
KB
-rwsr-xr-x
2023-04-03 18:00
sudoreplay
87.64
KB
-rwxr-xr-x
2023-04-03 18:00
sum
34.41
KB
-rwxr-xr-x
2024-02-08 03:46
sync
34.41
KB
-rwxr-xr-x
2024-02-08 03:46
systemctl
1.06
MB
-rwxr-xr-x
2023-11-21 20:57
systemd
1.76
MB
-rwxr-xr-x
2023-11-21 20:57
systemd-analyze
1.73
MB
-rwxr-xr-x
2023-11-21 20:57
systemd-ask-password
18.48
KB
-rwxr-xr-x
2023-11-21 20:57
systemd-cat
18.38
KB
-rwxr-xr-x
2023-11-21 20:57
systemd-cgls
22.48
KB
-rwxr-xr-x
2023-11-21 20:57
systemd-cgtop
38.39
KB
-rwxr-xr-x
2023-11-21 20:57
systemd-cryptenroll
50.53
KB
-rwxr-xr-x
2023-11-21 20:57
systemd-delta
26.37
KB
-rwxr-xr-x
2023-11-21 20:57
systemd-detect-virt
18.37
KB
-rwxr-xr-x
2023-11-21 20:57
systemd-escape
22.37
KB
-rwxr-xr-x
2023-11-21 20:57
systemd-hwdb
118.66
KB
-rwxr-xr-x
2023-11-21 20:57
systemd-id128
26.37
KB
-rwxr-xr-x
2023-11-21 20:57
systemd-inhibit
22.39
KB
-rwxr-xr-x
2023-11-21 20:57
systemd-machine-id-setup
18.48
KB
-rwxr-xr-x
2023-11-21 20:57
systemd-mount
50.59
KB
-rwxr-xr-x
2023-11-21 20:57
systemd-notify
22.38
KB
-rwxr-xr-x
2023-11-21 20:57
systemd-path
18.37
KB
-rwxr-xr-x
2023-11-21 20:57
systemd-run
62.57
KB
-rwxr-xr-x
2023-11-21 20:57
systemd-socket-activate
26.37
KB
-rwxr-xr-x
2023-11-21 20:57
systemd-stdio-bridge
22.38
KB
-rwxr-xr-x
2023-11-21 20:57
systemd-sysext
46.49
KB
-rwxr-xr-x
2023-11-21 20:57
systemd-sysusers
62.68
KB
-rwxr-xr-x
2023-11-21 20:57
systemd-tmpfiles
98.57
KB
-rwxr-xr-x
2023-11-21 20:57
systemd-tty-ask-password-agent
34.37
KB
-rwxr-xr-x
2023-11-21 20:57
systemd-umount
50.59
KB
-rwxr-xr-x
2023-11-21 20:57
tabs
18.3
KB
-rwxr-xr-x
2023-05-16 18:45
tac
98.41
KB
-rwxr-xr-x
2024-02-08 03:46
tail
66.52
KB
-rwxr-xr-x
2024-02-08 03:46
tar
505.81
KB
-rwxr-xr-x
2023-12-05 05:15
taskset
22.38
KB
-rwxr-xr-x
2024-04-09 15:32
tbl
126.48
KB
-rwxr-xr-x
2022-03-23 13:56
tclsh
14.15
KB
-rwxr-xr-x
2022-03-25 09:58
tclsh8.6
14.15
KB
-rwxr-xr-x
2022-03-25 09:58
tcpdump
1.27
MB
-rwxr-xr-x
2024-02-08 13:21
tee
34.51
KB
-rwxr-xr-x
2024-02-08 03:46
telnet
107.56
KB
-rwxr-xr-x
2022-03-24 16:20
telnet.netkit
107.56
KB
-rwxr-xr-x
2022-03-24 16:20
tempfile
14.02
KB
-rwxr-xr-x
2022-03-23 13:49
test
42.44
KB
-rwxr-xr-x
2024-02-08 03:46
tic
86.41
KB
-rwxr-xr-x
2023-05-16 18:45
time
26.52
KB
-rwxr-xr-x
2022-03-25 09:52
timedatectl
46.37
KB
-rwxr-xr-x
2023-11-21 20:57
timeout
38.95
KB
-rwxr-xr-x
2024-02-08 03:46
tkconch3
962
B
-rwxr-xr-x
2024-11-22 17:49
tload
18.24
KB
-rwxr-xr-x
2023-10-31 11:36
tmux
948.55
KB
-rwxr-xr-x
2023-01-31 13:27
tnftp
178.9
KB
-rwxr-xr-x
2022-03-25 10:01
toe
22.3
KB
-rwxr-xr-x
2023-05-16 18:45
top
130.06
KB
-rwxr-xr-x
2023-10-31 11:36
touch
90.51
KB
-rwxr-xr-x
2024-02-08 03:46
tput
26.34
KB
-rwxr-xr-x
2023-05-16 18:45
tr
46.51
KB
-rwxr-xr-x
2024-02-08 03:46
tracepath
22.14
KB
-rwxr-xr-x
2022-02-05 04:37
trial3
958
B
-rwxr-xr-x
2024-11-22 17:49
troff
718.61
KB
-rwxr-xr-x
2022-03-23 13:56
true
26.3
KB
-rwxr-xr-x
2024-02-08 03:46
truncate
34.51
KB
-rwxr-xr-x
2024-02-08 03:46
tset
26.31
KB
-rwxr-xr-x
2023-05-16 18:45
tsort
46.51
KB
-rwxr-xr-x
2024-02-08 03:46
tty
30.51
KB
-rwxr-xr-x
2024-02-08 03:46
turbostat
1.58
KB
-rwxr-xr-x
2025-04-11 20:45
twist3
958
B
-rwxr-xr-x
2024-11-22 17:49
twistd3
960
B
-rwxr-xr-x
2024-11-22 17:49
tzselect
15.02
KB
-rwxr-xr-x
2025-01-28 20:25
ua
1003
B
-rwxr-xr-x
2024-07-18 15:20
ubuntu-advantage
1003
B
-rwxr-xr-x
2024-07-18 15:20
ubuntu-bug
2.51
KB
-rwxr-xr-x
2024-07-10 11:56
ubuntu-core-launcher
147.2
KB
-rwsr-xr-x
2024-07-26 02:57
ubuntu-distro-info
22.89
KB
-rwxr-xr-x
2023-11-28 12:18
ubuntu-drivers
16.36
KB
-rwxr-xr-x
2024-10-07 14:57
ubuntu-security-status
22.25
KB
-rwxr-xr-x
2024-06-26 09:01
ucf
40.9
KB
-rwxr-xr-x
2020-06-16 05:37
ucfq
18.91
KB
-rwxr-xr-x
2020-06-16 05:37
ucfr
10.47
KB
-rwxr-xr-x
2020-06-16 05:37
uclampset
26.38
KB
-rwxr-xr-x
2024-04-09 15:32
udevadm
1.08
MB
-rwxr-xr-x
2023-11-21 20:57
udisksctl
58.38
KB
-rwxr-xr-x
2022-04-07 21:17
ul
22.38
KB
-rwxr-xr-x
2024-04-09 15:32
umount
34.38
KB
-rwsr-xr-x
2024-04-09 15:32
uname
34.51
KB
-rwxr-xr-x
2024-02-08 03:46
unattended-upgrade
97.21
KB
-rwxr-xr-x
2022-01-14 22:25
unattended-upgrades
97.21
KB
-rwxr-xr-x
2022-01-14 22:25
uncompress
2.29
KB
-rwxr-xr-x
2022-09-05 13:33
unexpand
34.53
KB
-rwxr-xr-x
2024-02-08 03:46
unicode_start
2.7
KB
-rwxr-xr-x
2022-12-16 14:14
unicode_stop
530
B
-rwxr-xr-x
2022-12-16 14:14
uniq
42.51
KB
-rwxr-xr-x
2024-02-08 03:46
unlink
30.51
KB
-rwxr-xr-x
2024-02-08 03:46
unlzma
82.52
KB
-rwxr-xr-x
2022-04-08 12:51
unmkinitramfs
3.69
KB
-rwxr-xr-x
2023-07-25 09:54
unshare
30.6
KB
-rwxr-xr-x
2024-04-09 15:32
unsquashfs
131.9
KB
-rwxr-xr-x
2022-03-25 09:58
unxz
82.52
KB
-rwxr-xr-x
2022-04-08 12:51
unzip
170.42
KB
-rwxr-xr-x
2024-02-01 15:52
unzipsfx
78.42
KB
-rwxr-xr-x
2024-02-01 15:52
unzstd
854.59
KB
-rwxr-xr-x
2022-03-24 16:15
update-alternatives
58.24
KB
-rwxr-xr-x
2024-02-23 14:53
update-mime-database
58.23
KB
-rwxr-xr-x
2022-01-14 09:18
upower
22.3
KB
-rwxr-xr-x
2022-03-09 18:59
uptime
14.23
KB
-rwxr-xr-x
2023-10-31 11:36
usb-devices
4.33
KB
-rwxr-xr-x
2022-03-25 09:53
usbhid-dump
30.38
KB
-rwxr-xr-x
2022-03-25 09:53
usbip
1.58
KB
-rwxr-xr-x
2025-04-11 20:45
usbipd
1.58
KB
-rwxr-xr-x
2025-04-11 20:45
usbreset
14.3
KB
-rwxr-xr-x
2022-03-25 09:53
users
34.51
KB
-rwxr-xr-x
2024-02-08 03:46
utmpdump
22.38
KB
-rwxr-xr-x
2024-04-09 15:32
uuidgen
18.38
KB
-rwxr-xr-x
2024-04-09 15:32
uuidparse
22.38
KB
-rwxr-xr-x
2024-04-09 15:32
vcs-run
6.75
KB
-rwxr-xr-x
2021-08-05 09:58
vdir
134.98
KB
-rwxr-xr-x
2024-02-08 03:46
vi
3.61
MB
-rwxr-xr-x
2025-04-02 12:39
view
3.61
MB
-rwxr-xr-x
2025-04-02 12:39
vigpg
2.58
KB
-rwxr-xr-x
2020-02-17 14:11
vim
3.61
MB
-rwxr-xr-x
2025-04-02 12:39
vim.basic
3.61
MB
-rwxr-xr-x
2025-04-02 12:39
vim.tiny
1.45
MB
-rwxr-xr-x
2025-04-02 12:39
vimdiff
3.61
MB
-rwxr-xr-x
2025-04-02 12:39
vimtutor
2.1
KB
-rwxr-xr-x
2025-04-02 12:39
vm-support
9.83
KB
-rwxr-xr-x
2023-12-05 21:18
vmhgfs-fuse
46.73
KB
-rwxr-xr-x
2023-12-05 21:18
vmstat
38.24
KB
-rwxr-xr-x
2023-10-31 11:36
vmtoolsd
74.56
KB
-rwxr-xr-x
2023-12-05 21:18
vmware-alias-import
42.52
KB
-rwxr-xr-x
2023-12-05 21:18
vmware-checkvm
14.38
KB
-rwxr-xr-x
2023-12-05 21:18
vmware-hgfsclient
14.38
KB
-rwxr-xr-x
2023-12-05 21:18
vmware-namespace-cmd
22.3
KB
-rwxr-xr-x
2023-12-05 21:18
vmware-rpctool
18.3
KB
-rwxr-xr-x
2023-12-05 21:18
vmware-toolbox-cmd
58.59
KB
-rwxr-xr-x
2023-12-05 21:18
vmware-vgauth-cmd
18.3
KB
-rwxr-xr-x
2023-12-05 21:18
vmware-vmblock-fuse
18.78
KB
-rwxr-xr-x
2023-12-05 21:18
vmware-xferlogs
32.33
KB
-rwxr-xr-x
2023-12-05 21:18
vsftpdwho
54
B
-rwxr-xr-x
2024-07-11 12:59
w
22.23
KB
-rwxr-xr-x
2023-10-31 11:36
wall
22.38
KB
-rwxr-xr-x
2024-04-09 15:32
watch
26.6
KB
-rwxr-xr-x
2023-10-31 11:36
watchgnupg
18.3
KB
-rwxr-xr-x
2025-03-28 17:39
wc
42.42
KB
-rwxr-xr-x
2024-02-08 03:46
wdctl
30.4
KB
-rwxr-xr-x
2024-04-09 15:32
wget
459.02
KB
-rwxr-xr-x
2024-06-19 12:15
whatis
47.28
KB
-rwxr-xr-x
2022-03-17 19:03
whereis
30.84
KB
-rwxr-xr-x
2024-04-09 15:32
which
946
B
-rwxr-xr-x
2022-03-23 13:49
which.debianutils
946
B
-rwxr-xr-x
2022-03-23 13:49
whiptail
30.16
KB
-rwxr-xr-x
2022-03-17 19:30
who
50.52
KB
-rwxr-xr-x
2024-02-08 03:46
whoami
30.51
KB
-rwxr-xr-x
2024-02-08 03:46
wifi-status
2.06
KB
-rwxr-xr-x
2020-02-17 14:11
wpa_passphrase
14.31
KB
-rwxr-xr-x
2025-02-24 19:39
write
22.38
KB
-rwxr-xr-x
2024-04-09 15:32
write.ul
22.38
KB
-rwxr-xr-x
2024-04-09 15:32
x86_64
26.65
KB
-rwxr-xr-x
2024-04-09 15:32
x86_64-linux-gnu-addr2line
26.7
KB
-rwxr-xr-x
2025-03-17 19:24
x86_64-linux-gnu-ar
54.48
KB
-rwxr-xr-x
2025-03-17 19:24
x86_64-linux-gnu-as
456.4
KB
-rwxr-xr-x
2025-03-17 19:24
x86_64-linux-gnu-c++filt
22.27
KB
-rwxr-xr-x
2025-03-17 19:24
x86_64-linux-gnu-dwp
1.82
MB
-rwxr-xr-x
2025-03-17 19:24
x86_64-linux-gnu-elfedit
34.72
KB
-rwxr-xr-x
2025-03-17 19:24
x86_64-linux-gnu-gold
3.04
MB
-rwxr-xr-x
2025-03-17 19:24
x86_64-linux-gnu-gprof
111.79
KB
-rwxr-xr-x
2025-03-17 19:24
x86_64-linux-gnu-ld
1.66
MB
-rwxr-xr-x
2025-03-17 19:24
x86_64-linux-gnu-ld.bfd
1.66
MB
-rwxr-xr-x
2025-03-17 19:24
x86_64-linux-gnu-ld.gold
3.04
MB
-rwxr-xr-x
2025-03-17 19:24
x86_64-linux-gnu-nm
43.63
KB
-rwxr-xr-x
2025-03-17 19:24
x86_64-linux-gnu-objcopy
162.54
KB
-rwxr-xr-x
2025-03-17 19:24
x86_64-linux-gnu-objdump
369.13
KB
-rwxr-xr-x
2025-03-17 19:24
x86_64-linux-gnu-ranlib
54.48
KB
-rwxr-xr-x
2025-03-17 19:24
x86_64-linux-gnu-readelf
758.44
KB
-rwxr-xr-x
2025-03-17 19:24
x86_64-linux-gnu-size
30.45
KB
-rwxr-xr-x
2025-03-17 19:24
x86_64-linux-gnu-strings
30.61
KB
-rwxr-xr-x
2025-03-17 19:24
x86_64-linux-gnu-strip
162.57
KB
-rwxr-xr-x
2025-03-17 19:24
x86_energy_perf_policy
1.58
KB
-rwxr-xr-x
2025-04-11 20:45
xargs
62.41
KB
-rwxr-xr-x
2022-03-23 13:52
xauth
54.96
KB
-rwxr-xr-x
2022-03-25 09:53
xdg-user-dir
234
B
-rwxr-xr-x
2022-03-25 09:54
xdg-user-dirs-update
26.23
KB
-rwxr-xr-x
2022-03-25 09:54
xsubpp
5.05
KB
-rwxr-xr-x
2025-04-08 13:21
xxd
18.28
KB
-rwxr-xr-x
2025-04-02 12:39
xz
82.52
KB
-rwxr-xr-x
2022-04-08 12:51
xzcat
82.52
KB
-rwxr-xr-x
2022-04-08 12:51
xzcmp
6.86
KB
-rwxr-xr-x
2022-04-08 12:51
xzdiff
6.86
KB
-rwxr-xr-x
2022-04-08 12:51
xzegrep
5.87
KB
-rwxr-xr-x
2022-04-08 12:51
xzfgrep
5.87
KB
-rwxr-xr-x
2022-04-08 12:51
xzgrep
5.87
KB
-rwxr-xr-x
2022-04-08 12:51
xzless
1.76
KB
-rwxr-xr-x
2022-04-08 12:51
xzmore
2.11
KB
-rwxr-xr-x
2022-04-08 12:51
yes
30.38
KB
-rwxr-xr-x
2024-02-08 03:46
ypdomainname
22.23
KB
-rwxr-xr-x
2022-03-23 13:57
zcat
1.94
KB
-rwxr-xr-x
2022-09-05 13:33
zcmp
1.64
KB
-rwxr-xr-x
2022-09-05 13:33
zdiff
5.76
KB
-rwxr-xr-x
2022-09-05 13:33
zdump
26.21
KB
-rwxr-xr-x
2025-01-28 20:25
zegrep
29
B
-rwxr-xr-x
2022-09-05 13:33
zfgrep
29
B
-rwxr-xr-x
2022-09-05 13:33
zforce
2.03
KB
-rwxr-xr-x
2022-09-05 13:33
zgrep
7.91
KB
-rwxr-xr-x
2022-09-05 13:33
zipdetails
58.66
KB
-rwxr-xr-x
2025-04-08 13:21
zipgrep
2.89
KB
-rwxr-xr-x
2024-02-01 15:52
zipinfo
170.42
KB
-rwxr-xr-x
2024-02-01 15:52
zless
2.15
KB
-rwxr-xr-x
2022-09-05 13:33
zmore
1.8
KB
-rwxr-xr-x
2022-09-05 13:33
znew
4.47
KB
-rwxr-xr-x
2022-09-05 13:33
zstd
854.59
KB
-rwxr-xr-x
2022-03-24 16:15
zstdcat
854.59
KB
-rwxr-xr-x
2022-03-24 16:15
zstdgrep
3.78
KB
-rwxr-xr-x
2022-03-24 16:15
zstdless
30
B
-rwxr-xr-x
2022-03-24 16:15
zstdmt
854.59
KB
-rwxr-xr-x
2022-03-24 16:15
Save
Rename
#!/usr/bin/perl eval 'exec /usr/bin/perl -S $0 ${1+"$@"}' if 0; # ^ Run only under a shell #!/usr/bin/perl # zipdetails # # Display info on the contents of a Zip file # BEGIN { pop @INC if $INC[-1] eq '.' } use strict; use warnings ; use IO::File; use Encode; use Getopt::Long; # Compression types use constant ZIP_CM_STORE => 0 ; use constant ZIP_CM_IMPLODE => 6 ; use constant ZIP_CM_DEFLATE => 8 ; use constant ZIP_CM_BZIP2 => 12 ; use constant ZIP_CM_LZMA => 14 ; use constant ZIP_CM_PPMD => 98 ; # General Purpose Flag use constant ZIP_GP_FLAG_ENCRYPTED_MASK => (1 << 0) ; use constant ZIP_GP_FLAG_STREAMING_MASK => (1 << 3) ; use constant ZIP_GP_FLAG_PATCHED_MASK => (1 << 5) ; use constant ZIP_GP_FLAG_STRONG_ENCRYPTED_MASK => (1 << 6) ; use constant ZIP_GP_FLAG_LZMA_EOS_PRESENT => (1 << 1) ; use constant ZIP_GP_FLAG_LANGUAGE_ENCODING => (1 << 11) ; # Internal File Attributes use constant ZIP_IFA_TEXT_MASK => 1; # Signatures for each of the headers use constant ZIP_LOCAL_HDR_SIG => 0x04034b50; use constant ZIP_DATA_HDR_SIG => 0x08074b50; use constant ZIP_CENTRAL_HDR_SIG => 0x02014b50; use constant ZIP_END_CENTRAL_HDR_SIG => 0x06054b50; use constant ZIP64_END_CENTRAL_REC_HDR_SIG => 0x06064b50; use constant ZIP64_END_CENTRAL_LOC_HDR_SIG => 0x07064b50; use constant ZIP_ARCHIVE_EXTRA_DATA_SIG => 0x08064b50; use constant ZIP_DIGITAL_SIGNATURE_SIG => 0x05054b50; use constant ZIP_ARCHIVE_EXTRA_DATA_RECORD_SIG => 0x08064b50; # Extra sizes use constant ZIP_EXTRA_HEADER_SIZE => 2 ; use constant ZIP_EXTRA_MAX_SIZE => 0xFFFF ; use constant ZIP_EXTRA_SUBFIELD_ID_SIZE => 2 ; use constant ZIP_EXTRA_SUBFIELD_LEN_SIZE => 2 ; use constant ZIP_EXTRA_SUBFIELD_HEADER_SIZE => ZIP_EXTRA_SUBFIELD_ID_SIZE + ZIP_EXTRA_SUBFIELD_LEN_SIZE; use constant ZIP_EXTRA_SUBFIELD_MAX_SIZE => ZIP_EXTRA_MAX_SIZE - ZIP_EXTRA_SUBFIELD_HEADER_SIZE; my %ZIP_CompressionMethods = ( 0 => 'Stored', 1 => 'Shrunk', 2 => 'Reduced compression factor 1', 3 => 'Reduced compression factor 2', 4 => 'Reduced compression factor 3', 5 => 'Reduced compression factor 4', 6 => 'Imploded', 7 => 'Reserved for Tokenizing compression algorithm', 8 => 'Deflated', 9 => 'Enhanced Deflating using Deflate64(tm)', 10 => 'PKWARE Data Compression Library Imploding', 11 => 'Reserved by PKWARE', 12 => 'BZIP2 ', 13 => 'Reserved by PKWARE', 14 => 'LZMA', 15 => 'Reserved by PKWARE', 16 => 'IBM z/OS CMPSC Compression', 17 => 'Reserved by PKWARE', 18 => 'File is compressed using IBM TERSE (new)', 19 => 'IBM LZ77 z Architecture (PFS)', 93 => 'Zstandard', 94 => 'MP3', 95 => 'XZ', 96 => 'WinZip JPEG Compression', 97 => 'WavPack compressed data', 98 => 'PPMd version I, Rev 1', 99 => 'AES Encryption', ); my %OS_Lookup = ( 0 => "MS-DOS", 1 => "Amiga", 2 => "OpenVMS", 3 => "Unix", 4 => "VM/CMS", 5 => "Atari ST", 6 => "HPFS (OS/2, NT 3.x)", 7 => "Macintosh", 8 => "Z-System", 9 => "CP/M", 10 => "Windoxs NTFS or TOPS-20", 11 => "MVS or NTFS", 12 => "VSE or SMS/QDOS", 13 => "Acorn RISC OS", 14 => "VFAT", 15 => "alternate MVS", 16 => "BeOS", 17 => "Tandem", 18 => "OS/400", 19 => "OS/X (Darwin)", 30 => "AtheOS/Syllable", ); my %Lookup = ( ZIP_LOCAL_HDR_SIG, \&LocalHeader, ZIP_DATA_HDR_SIG, \&DataHeader, ZIP_CENTRAL_HDR_SIG, \&CentralHeader, ZIP_END_CENTRAL_HDR_SIG, \&EndCentralHeader, ZIP64_END_CENTRAL_REC_HDR_SIG, \&Zip64EndCentralHeader, ZIP64_END_CENTRAL_LOC_HDR_SIG, \&Zip64EndCentralLocator, # TODO - Archive Encryption Headers & digital signature #ZIP_ARCHIVE_EXTRA_DATA_RECORD_SIG #ZIP_DIGITAL_SIGNATURE_SIG #ZIP_ARCHIVE_EXTRA_DATA_SIG ); my %Extras = ( 0x0001, ['ZIP64', \&decode_Zip64], 0x0007, ['AV Info', undef], 0x0008, ['Extended Language Encoding', undef], 0x0009, ['OS/2 extended attributes', undef], 0x000a, ['NTFS FileTimes', \&decode_NTFS_Filetimes], 0x000c, ['OpenVMS', undef], 0x000d, ['Unix', undef], 0x000e, ['Stream & Fork Descriptors', undef], 0x000f, ['Patch Descriptor', undef], 0x0014, ['PKCS#7 Store for X.509 Certificates', undef], 0x0015, ['X.509 Certificate ID and Signature for individual file', undef], 0x0016, ['X.509 Certificate ID for Central Directory', undef], 0x0017, ['Strong Encryption Header', undef], 0x0018, ['Record Management Controls', undef], 0x0019, ['PKCS#7 Encryption Recipient Certificate List', undef], 0x0020, ['Reserved for Timestamp record', undef], 0x0021, ['Policy Decryption Key Record', undef], 0x0022, ['Smartcrypt Key Provider Record', undef], 0x0023, ['Smartcrypt Policy Key Data Record', undef], # The Header ID mappings defined by Info-ZIP and third parties are: 0x0065, ['IBM S/390 attributes - uncompressed', \&decodeMVS], 0x0066, ['IBM S/390 attributes - compressed', undef], 0x07c8, ['Info-ZIP Macintosh (old, J. Lee)', undef], 0x2605, ['ZipIt Macintosh (first version)', undef], 0x2705, ['ZipIt Macintosh v 1.3.5 and newer (w/o full filename)', undef], 0x2805, ['ZipIt Macintosh v 1.3.5 and newer ', undef], 0x334d, ["Info-ZIP Macintosh (new, D. Haase's 'Mac3' field)", undef], 0x4154, ['Tandem NSK', undef], 0x4341, ['Acorn/SparkFS (David Pilling)', undef], 0x4453, ['Windows NT security descriptor', \&decode_NT_security], 0x4690, ['POSZIP 4690', undef], 0x4704, ['VM/CMS', undef], 0x470f, ['MVS', undef], 0x4854, ['Theos, old inofficial port', undef], 0x4b46, ['FWKCS MD5 (see below)', undef], 0x4c41, ['OS/2 access control list (text ACL)', undef], 0x4d49, ['Info-ZIP OpenVMS (obsolete)', undef], 0x4d63, ['Macintosh SmartZIP, by Macro Bambini', undef], 0x4f4c, ['Xceed original location extra field', undef], 0x5356, ['AOS/VS (binary ACL)', undef], 0x5455, ['Extended Timestamp', \&decode_UT], 0x554e, ['Xceed unicode extra field', \&decode_Xceed_unicode], 0x5855, ['Info-ZIP Unix (original; also OS/2, NT, etc.)', \&decode_UX], 0x5a4c, ['ZipArchive Unicode Filename', undef], 0x5a4d, ['ZipArchive Offsets Array', undef], 0x6375, ['Info-ZIP Unicode Comment', \&decode_up ], 0x6542, ['BeOS (BeBox, PowerMac, etc.)', undef], 0x6854, ['Theos', undef], 0x7075, ['Info-ZIP Unicode Path', \&decode_up ], 0x756e, ['ASi Unix', undef], 0x7441, ['AtheOS (AtheOS/Syllable attributes)', undef], 0x7855, ['Unix Extra type 2', \&decode_Ux], 0x7875, ['Unix Extra Type 3', \&decode_ux], 0x9901, ['AES Encryption', \&decode_AES], 0xa11e, ['Data Stream Alignment', undef], 0xA220, ['Open Packaging Growth Hint', \&decode_GrowthHint ], 0xCAFE, ['Java Executable', \&decode_Java_exe], 0xfb4a, ['SMS/QDOS', undef], ); my $VERSION = "2.02" ; my $FH; my $ZIP64 = 0 ; my $NIBBLES = 8; my $LocalHeaderCount = 0; my $CentralHeaderCount = 0; my $START; my $OFFSET = U64->new( 0 ); my $TRAILING = 0 ; my $PAYLOADLIMIT = 256; # U64->new( 256 ); my $ZERO = U64->new( 0 ); my $SEEN = Seen->new(); sub prOff { my $offset = shift; my $s = offset($OFFSET); $OFFSET->add($offset); return $s; } sub offset { my $v = shift ; if (ref $v eq 'U64') { my $hi = $v->getHigh(); my $lo = $v->getLow(); if ($hi) { my $hiNib = $NIBBLES - 8 ; sprintf("%0${hiNib}X", $hi) . sprintf("%08X", $lo); } else { sprintf("%0${NIBBLES}X", $lo); } } else { sprintf("%0${NIBBLES}X", $v); } } my ($OFF, $LENGTH, $CONTENT, $TEXT, $VALUE) ; my $FMT1 ; my $FMT2 ; sub setupFormat { my $wantVerbose = shift ; my $nibbles = shift; my $width = '@' . ('>' x ($nibbles -1)); my $space = " " x length($width); my $fmt ; if ($wantVerbose) { $FMT1 = " format STDOUT = $width $width ^<<<<<<<<<<<^<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \$OFF, \$LENGTH, \$CONTENT, \$TEXT, \$VALUE $space $space ^<<<<<<<<<<<^<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~~ \$CONTENT, \$TEXT, \$VALUE . "; $FMT2 = " format STDOUT = $width $width ^<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \$OFF, \$LENGTH, \$CONTENT, \$TEXT, \$VALUE $space $space ^<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~~ \$CONTENT, \$TEXT, \$VALUE . " ; } else { $FMT1 = " format STDOUT = $width ^<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \$OFF, \$TEXT, \$VALUE $space ^<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~~ \$TEXT, \$VALUE . "; $FMT2 = " format STDOUT = $width ^<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \$OFF, \$TEXT, \$VALUE $space ^<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~~ \$TEXT, \$VALUE . " ; } eval "$FMT1"; $| = 1; } sub mySpr { my $format = shift ; return "" if ! defined $format; return $format unless @_ ; return sprintf $format, @_ ; } sub out0 { my $size = shift; my $text = shift; my $format = shift; $OFF = prOff($size); $LENGTH = offset($size) ; $CONTENT = '...'; $TEXT = $text; $VALUE = mySpr $format, @_; write; skip($FH, $size); } sub xDump { my $input = shift; $input =~ tr/\0-\37\177-\377/./; return $input; } sub hexDump { my $input = shift; my $out = unpack('H*', $input) ; $out =~ s#(..)# $1#g ; $out =~ s/^ //; $out = uc $out; return $out; } sub out { my $data = shift; my $text = shift; my $format = shift; my $size = length($data) ; $OFF = prOff($size); $LENGTH = offset($size) ; $CONTENT = hexDump($data); $TEXT = $text; $VALUE = mySpr $format, @_; no warnings; write; } sub out1 { my $text = shift; my $format = shift; $OFF = ''; $LENGTH = '' ; $CONTENT = ''; $TEXT = $text; $VALUE = mySpr $format, @_; write; } sub out2 { my $data = shift ; my $text = shift ; my $format = shift; my $size = length($data) ; $OFF = prOff($size); $LENGTH = offset($size); $CONTENT = hexDump($data); $TEXT = $text; $VALUE = mySpr $format, @_; no warnings; eval "$FMT2"; write ; eval "$FMT1"; } sub Value { my $letter = shift; my @value = @_; if ($letter eq 'C') { return Value_C(@value) } elsif ($letter eq 'v') { return Value_v(@value) } elsif ($letter eq 'V') { return Value_V(@value) } elsif ($letter eq 'VV') { return Value_VV(@value) } } sub outer { my $name = shift ; my $unpack = shift ; my $size = shift ; my $cb1 = shift ; my $cb2 = shift ; myRead(my $buff, $size); my (@value) = unpack $unpack, $buff; my $hex = Value($unpack, @value); if (defined $cb1) { my $v ; if (ref $cb1 eq 'CODE') { $v = $cb1->(@value) ; } else { $v = $cb1 ; } $v = "'" . $v unless $v =~ /^'/; $v .= "'" unless $v =~ /'$/; $hex .= " $v" ; } out $buff, $name, $hex ; $cb2->(@value) if defined $cb2 ; return $value[0]; } sub out_C { my $name = shift ; my $cb1 = shift ; my $cb2 = shift ; outer($name, 'C', 1, $cb1, $cb2); } sub out_v { my $name = shift ; my $cb1 = shift ; my $cb2 = shift ; outer($name, 'v', 2, $cb1, $cb2); } sub out_V { my $name = shift ; my $cb1 = shift ; my $cb2 = shift ; outer($name, 'V', 4, $cb1, $cb2); } sub out_VV { my $name = shift ; my $cb1 = shift ; my $cb2 = shift ; outer($name, 'VV', 8, $cb1, $cb2); } # sub outSomeData # { # my $size = shift; # my $message = shift; # my $size64 = U64::mkU64($size); # if ($size64->gt($ZERO)) { # my $size32 = $size64->getLow(); # if ($size64->gt($PAYLOADLIMIT) ) { # out0 $size32, $message; # } else { # myRead(my $buffer, $size32 ); # out $buffer, $message, xDump $buffer ; # } # } # } sub outSomeData { my $size = shift; my $message = shift; if ($size > 0) { if ($size > $PAYLOADLIMIT) { my $before = $FH->tell(); out0 $size, $message; # printf "outSomeData %X %X $size %X\n", $before, $FH->tell(), $size; } else { myRead(my $buffer, $size ); out $buffer, $message, xDump $buffer ; } } } sub unpackValue_C { Value_v(unpack "C", $_[0]); } sub Value_C { sprintf "%02X", $_[0]; } sub unpackValue_v { Value_v(unpack "v", $_[0]); } sub Value_v { sprintf "%04X", $_[0]; } sub unpackValue_V { Value_V(unpack "V", $_[0]); } sub Value_V { my $v = defined $_[0] ? $_[0] : 0; sprintf "%08X", $v; } sub unpackValue_VV { my ($lo, $hi) = unpack ("V V", $_[0]); Value_VV($lo, $hi); } sub Value_U64 { my $u64 = shift ; Value_VV($u64->getLow(), $u64->getHigh()); } sub Value_VV { my $lo = defined $_[0] ? $_[0] : 0; my $hi = defined $_[1] ? $_[1] : 0; if ($hi == 0) { sprintf "%016X", $lo; } else { sprintf("%08X", $hi) . sprintf "%08X", $lo; } } sub Value_VV64 { my $buffer = shift; # This needs perl 5.10 # return unpack "Q<", $buffer; my ($lo, $hi) = unpack ("V V" , $buffer); no warnings 'uninitialized'; return $hi * (0xFFFFFFFF+1) + $lo; } sub read_U64 { my $b ; myRead($b, 8); my ($lo, $hi) = unpack ("V V" , $b); no warnings 'uninitialized'; return ($b, U64->new( $hi, $lo) ); } sub read_VV { my $b ; myRead($b, 8); my ($lo, $hi) = unpack ("V V" , $b); no warnings 'uninitialized'; return ($b, $hi * (0xFFFFFFFF+1) + $lo); } sub read_V { my $b ; myRead($b, 4); return ($b, unpack ("V", $b)); } sub read_v { my $b ; myRead($b, 2); return ($b, unpack "v", $b); } sub read_C { my $b ; myRead($b, 1); return ($b, unpack "C", $b); } sub seekTo { my $offset = shift ; my $loc = shift ; $loc = SEEK_SET if ! defined $loc ; $FH->seek($offset, $loc); $OFFSET = new U64($offset); } sub scanForSignature { my %sigs = map { $_ => 1 } map { substr $_, 2, 2 } # don't want the initial "PK" map { pack "V", $_ } ( ZIP_LOCAL_HDR_SIG , ZIP_DATA_HDR_SIG , ZIP_CENTRAL_HDR_SIG , ZIP_END_CENTRAL_HDR_SIG , ZIP64_END_CENTRAL_REC_HDR_SIG , ZIP64_END_CENTRAL_LOC_HDR_SIG , # ZIP_ARCHIVE_EXTRA_DATA_SIG , # ZIP_DIGITAL_SIGNATURE_SIG , # ZIP_ARCHIVE_EXTRA_DATA_RECORD_SIG , ); my $start = $FH->tell(); my $last = ''; my $buffer ; while ($FH->read($buffer, 1024 * 1000)) { my $combine = substr($last, -4) . $buffer ; $last = $buffer; my $ix = index($combine, "PK") ; next if $ix == -1; my $rest = substr($combine, $ix+2, 2); next unless length $rest == 2 && $sigs{$rest} ; my $v = unpack("v", $rest) ; # possible match my $here = $FH->tell(); seekTo($here - length($combine) + $ix); return 1; } return 0; } my $is64In32 = 0; my $opt_verbose = 0; my $opt_scan = 0; $Getopt::Long::bundling = 1 ; GetOptions("h" => \&Usage, "v" => \$opt_verbose, "scan" => \$opt_scan, "version" => sub { print "$VERSION\n"; exit }, ) or Usage("Invalid command line option\n"); Usage("No zipfile") unless @ARGV == 1; my $filename = shift @ARGV; die "$filename does not exist\n" unless -e $filename ; die "$filename not a standard file\n" unless -f $filename ; $FH = IO::File->new( "<$filename" ) or die "Cannot open $filename: $!\n"; my $FILELEN = -s $filename ; $TRAILING = -s $filename ; $NIBBLES = U64::nibbles(-s $filename) ; #$NIBBLES = int ($NIBBLES / 4) + ( ($NIBBLES % 4) ? 1 : 0 ); #$NIBBLES = 4 * $NIBBLES; # Minimum of 4 nibbles $NIBBLES = 4 if $NIBBLES < 4 ; die "$filename too short to be a zip file\n" if $FILELEN < 22 ; setupFormat($opt_verbose, $NIBBLES); if(0) { # Sanity check that this is a Zip file my ($buffer, $signature) = read_V(); warn "$filename doesn't look like a zip file\n" if $signature != ZIP_LOCAL_HDR_SIG ; $FH->seek(0, SEEK_SET) ; } my @Messages = (); if ($opt_scan) { while(scanForSignature()) { my $here = $FH->tell(); my ($buffer, $signature) = read_V(); my $handler = $Lookup{$signature}; $handler->($signature, $buffer); seekTo($here + 4) ; } dislayMessages(); exit; } our ($CdExists, $CdOffset, @CentralDirectory) = scanCentralDirectory($FH); die "No Central Directory records found\n" if ! $CdExists ; $OFFSET->reset(); $FH->seek(0, SEEK_SET) ; outSomeData($START, "PREFIX DATA") if defined $START && $START > 0 ; my $skippedFrom = 0 ; my $skippedContent = 0 ; while (1) { last if $FH->eof(); my $here = $FH->tell(); if ($here >= $TRAILING) { print "\n" ; outSomeData($FILELEN - $TRAILING, "TRAILING DATA"); last; } my ($buffer, $signature) = read_V(); my $handler = $Lookup{$signature}; if (!defined $handler) { if (@CentralDirectory) { # Should be at offset that central directory says my $locOffset = $CentralDirectory[0][0]; my $delta = $locOffset - $here ; if ($here + 4 == $locOffset ) { for (0 .. 3) { $FH->ungetc(ord(substr($buffer, $_, 1))) } outSomeData($delta, "UNEXPECTED PADDING"); next; } } if ($here < $CdOffset) { # next # if scanForSignature() ; $skippedFrom = $FH->tell() ; $skippedContent = $CdOffset - $skippedFrom ; print "\nWARNING!\nZip local header not found.\n"; printf "Skipping 0x%x bytes to Central Directory...\n", $skippedContent; push @Messages, sprintf("Expected Zip header not found at offset 0x%X, ", $skippedFrom) . sprintf("skipped 0x%X bytes\n", $skippedContent); seekTo($CdOffset); next; } else { printf "\n\nUnexpected END at offset %08X, value %s\n", $here, Value_V($signature); last; } } $ZIP64 = 0 if $signature != ZIP_DATA_HDR_SIG ; $handler->($signature, $buffer); } dislayMessages(); exit ; sub dislayMessages { if (@Messages) { my $count = scalar @Messages ; print "\nWARNINGS\n\n"; print "* $_\n" for @Messages ; } print "Done\n"; } sub compressionMethod { my $id = shift ; Value_v($id) . " '" . ($ZIP_CompressionMethods{$id} || "Unknown Method") . "'" ; } sub LocalHeader { my $signature = shift ; my $data = shift ; my $from_offset = $FH->tell() - 4; print "\n"; ++ $LocalHeaderCount; out $data, "LOCAL HEADER #" . sprintf("%X", $LocalHeaderCount) , Value_V($signature); my $buffer; my ($loc, $CDcompressedLength) ; ($loc, $CDcompressedLength) = @{ shift @CentralDirectory } if ! $opt_scan ; out_C "Extract Zip Spec", \&decodeZipVer; out_C "Extract OS", \&decodeOS; my ($bgp, $gpFlag) = read_v(); my ($bcm, $compressedMethod) = read_v(); out $bgp, "General Purpose Flag", Value_v($gpFlag) ; GeneralPurposeBits($compressedMethod, $gpFlag); out $bcm, "Compression Method", compressionMethod($compressedMethod) ; out_V "Last Mod Time", sub { scalar getTime(_dosToUnixTime($_[0])) }; my $crc = out_V "CRC"; my $compressedLength = out_V "Compressed Length"; my $uncompressedLength = out_V "Uncompressed Length"; my $filenameLength = out_v "Filename Length"; my $extraLength = out_v "Extra Length"; my $filename ; myRead($filename, $filenameLength); outputFilename($filename); my $cl64 = U64->new( $compressedLength ); my %ExtraContext = (); if ($extraLength) { my @z64 = ($uncompressedLength, $compressedLength, 1, 1); $ExtraContext{Zip64} = \@z64 ; $ExtraContext{InCentralDir} = 0; walkExtra($extraLength, \%ExtraContext); } my $size = 0; $size = printAes(\%ExtraContext) if $compressedMethod == 99 ; $size += printLzmaProperties() if $compressedMethod == ZIP_CM_LZMA ; $CDcompressedLength = $compressedLength if $opt_scan ; # $CDcompressedLength->subtract($size) # if $size ; $CDcompressedLength -= $size; # if ($CDcompressedLength->getHigh() || $CDcompressedLength->getLow()) { if ($CDcompressedLength) { outSomeData($CDcompressedLength, "PAYLOAD") ; } if ($compressedMethod == 99) { my $auth ; myRead($auth, 10); out $auth, "AES Auth", hexDump($auth); } # $SEEN->save("LOCAL HEADER #" . sprintf("%X", $LocalHeaderCount), $filename, $from_offset, $from_offset + $CDcompressedLength) } sub outputFilename { my $filename = shift; if (length $filename > 256) { my $f = substr($filename, 0, 256) ; out $f, "Filename", "'". $f . "' ..."; } else { out $filename, "Filename", "'". $filename . "'"; } } sub CentralHeader { my $signature = shift ; my $data = shift ; my $from_offset = $FH->tell() - 4; ++ $CentralHeaderCount; print "\n"; out $data, "CENTRAL HEADER #" . sprintf("%X", $CentralHeaderCount) . "", Value_V($signature); my $buffer; out_C "Created Zip Spec", \&decodeZipVer; out_C "Created OS", \&decodeOS; out_C "Extract Zip Spec", \&decodeZipVer; out_C "Extract OS", \&decodeOS; my ($bgp, $gpFlag) = read_v(); my ($bcm, $compressedMethod) = read_v(); out $bgp, "General Purpose Flag", Value_v($gpFlag) ; GeneralPurposeBits($compressedMethod, $gpFlag); out $bcm, "Compression Method", compressionMethod($compressedMethod) ; out_V "Last Mod Time", sub { scalar getTime(_dosToUnixTime($_[0])) }; my $crc = out_V "CRC"; my $compressedLength = out_V "Compressed Length"; my $uncompressedLength = out_V "Uncompressed Length"; my $filenameLength = out_v "Filename Length"; my $extraLength = out_v "Extra Length"; my $comment_length = out_v "Comment Length"; my $disk_start = out_v "Disk Start"; my $int_file_attrib = out_v "Int File Attributes"; out1 "[Bit 0]", $int_file_attrib & 1 ? "1 Text Data" : "0 'Binary Data'"; my $ext_file_attrib = out_V "Ext File Attributes"; out1 "[Bit 0]", "Read-Only" if $ext_file_attrib & 0x01 ; out1 "[Bit 1]", "Hidden" if $ext_file_attrib & 0x02 ; out1 "[Bit 2]", "System" if $ext_file_attrib & 0x04 ; out1 "[Bit 3]", "Label" if $ext_file_attrib & 0x08 ; out1 "[Bit 4]", "Directory" if $ext_file_attrib & 0x10 ; out1 "[Bit 5]", "Archive" if $ext_file_attrib & 0x20 ; my $lcl_hdr_offset = out_V "Local Header Offset"; my $filename ; myRead($filename, $filenameLength); outputFilename($filename); my %ExtraContext = (); if ($extraLength) { my @z64 = ($uncompressedLength, $compressedLength, $lcl_hdr_offset, $disk_start); $ExtraContext{Zip64} = \@z64 ; $ExtraContext{InCentralDir} = 1; walkExtra($extraLength, \%ExtraContext); } if ($comment_length) { my $comment ; myRead($comment, $comment_length); out $comment, "Comment", "'". $comment . "'"; } $SEEN->save("CENTRAL HEADER ref Local #" . sprintf("%X", $CentralHeaderCount), $filename, $lcl_hdr_offset, $lcl_hdr_offset + $compressedLength) ; # $SEEN->save("CENTRAL HEADER #" . sprintf("%X", $CentralHeaderCount), $filename, $from_offset, $FH-tell()); } sub decodeZipVer { my $ver = shift ; my $sHi = int($ver /10) ; my $sLo = $ver % 10 ; #out1 "Zip Spec", "$sHi.$sLo"; "$sHi.$sLo"; } sub decodeOS { my $ver = shift ; $OS_Lookup{$ver} || "Unknown" ; } sub Zip64EndCentralHeader { my $signature = shift ; my $data = shift ; print "\n"; out $data, "ZIP64 END CENTRAL DIR RECORD", Value_V($signature); my $buff; myRead($buff, 8); out $buff, "Size of record", unpackValue_VV($buff); my $size = Value_VV64($buff); out_C "Created Zip Spec", \&decodeZipVer; out_C "Created OS", \&decodeOS; out_C "Extract Zip Spec", \&decodeZipVer; out_C "Extract OS", \&decodeOS; out_V "Number of this disk"; out_V "Central Dir Disk no"; out_VV "Entries in this disk"; out_VV "Total Entries"; out_VV "Size of Central Dir"; out_VV "Offset to Central dir"; # TODO - if ($size != 44) { push @Messages, "Unsupported Size field in Zip64EndCentralHeader: should be 44, got $size\n" } } sub Zip64EndCentralLocator { my $signature = shift ; my $data = shift ; print "\n"; out $data, "ZIP64 END CENTRAL DIR LOCATOR", Value_V($signature); out_V "Central Dir Disk no"; out_VV "Offset to Central dir"; out_V "Total no of Disks"; } sub EndCentralHeader { my $signature = shift ; my $data = shift ; print "\n"; out $data, "END CENTRAL HEADER", Value_V($signature); out_v "Number of this disk"; out_v "Central Dir Disk no"; out_v "Entries in this disk"; out_v "Total Entries"; out_V "Size of Central Dir"; out_V "Offset to Central Dir"; my $comment_length = out_v "Comment Length"; if ($comment_length) { my $comment ; myRead($comment, $comment_length); out $comment, "Comment", "'$comment'"; } } sub DataHeader { my $signature = shift ; my $data = shift ; print "\n"; out $data, "STREAMING DATA HEADER", Value_V($signature); out_V "CRC"; if ($ZIP64) { out_VV "Compressed Length" ; out_VV "Uncompressed Length" ; } else { out_V "Compressed Length" ; out_V "Uncompressed Length" ; } } sub GeneralPurposeBits { my $method = shift; my $gp = shift; out1 "[Bit 0]", "1 'Encryption'" if $gp & ZIP_GP_FLAG_ENCRYPTED_MASK; my %lookup = ( 0 => "Normal Compression", 1 => "Maximum Compression", 2 => "Fast Compression", 3 => "Super Fast Compression"); if ($method == ZIP_CM_DEFLATE) { my $mid = ($gp >> 1) & 0x03 ; out1 "[Bits 1-2]", "$mid '$lookup{$mid}'"; } if ($method == ZIP_CM_LZMA) { if ($gp & ZIP_GP_FLAG_LZMA_EOS_PRESENT) { out1 "[Bit 1]", "1 'LZMA EOS Marker Present'" ; } else { out1 "[Bit 1]", "0 'LZMA EOS Marker Not Present'" ; } } if ($method == ZIP_CM_IMPLODE) # Imploding { out1 "[Bit 1]", ($gp & (1 << 1) ? "1 '8k" : "0 '4k") . " Sliding Dictionary'" ; out1 "[Bit 2]", ($gp & (2 << 1) ? "1 '3" : "0 '2" ) . " Shannon-Fano Trees'" ; } out1 "[Bit 3]", "1 'Streamed'" if $gp & ZIP_GP_FLAG_STREAMING_MASK; out1 "[Bit 4]", "1 'Enhanced Deflating'" if $gp & 1 << 4; out1 "[Bit 5]", "1 'Compressed Patched'" if $gp & 1 << 5 ; out1 "[Bit 6]", "1 'Strong Encryption'" if $gp & ZIP_GP_FLAG_STRONG_ENCRYPTED_MASK; out1 "[Bit 11]", "1 'Language Encoding'" if $gp & ZIP_GP_FLAG_LANGUAGE_ENCODING; out1 "[Bit 12]", "1 'Pkware Enhanced Compression'" if $gp & 1 <<12 ; out1 "[Bit 13]", "1 'Encrypted Central Dir'" if $gp & 1 <<13 ; return (); } sub seekSet { my $fh = $_[0] ; my $size = $_[1]; use Fcntl qw(SEEK_SET); if (ref $size eq 'U64') { seek($fh, $size->get64bit(), SEEK_SET); } else { seek($fh, $size, SEEK_SET); } } sub skip { my $fh = $_[0] ; my $size = $_[1]; use Fcntl qw(SEEK_CUR); if (ref $size eq 'U64') { seek($fh, $size->get64bit(), SEEK_CUR); } else { seek($fh, $size, SEEK_CUR); } } sub myRead { my $got = \$_[0] ; my $size = $_[1]; my $wantSize = $size; $$got = ''; if ($size == 0) { return ; } if ($size > 0) { my $buff ; my $status = $FH->read($buff, $size); return $status if $status < 0; $$got .= $buff ; } my $len = length $$got; die "Truncated file (got $len, wanted $wantSize): $!\n" if length $$got != $wantSize; } sub walkExtra { my $XLEN = shift; my $context = shift; my $buff ; my $offset = 0 ; my $id; my $subLen; my $payload ; my $count = 0 ; while ($offset < $XLEN) { ++ $count; # Detect if there is not enough data for an extra ID and length. # Android zipalign and zipflinger are prime candidates for these # non-standard extra sub-fields. my $remaining = $XLEN - $offset; if ($remaining < ZIP_EXTRA_SUBFIELD_HEADER_SIZE) { # There is not enough. Consume whatever is there and return so parsing # can continue. myRead($payload, $remaining); my $data = hexDump($payload); out $payload, "Malformed Extra Data", $data; return undef; } myRead($id, ZIP_EXTRA_SUBFIELD_ID_SIZE); $offset += ZIP_EXTRA_SUBFIELD_ID_SIZE; my $lookID = unpack "v", $id ; my ($who, $decoder) = @{ defined $Extras{$lookID} ? $Extras{$lookID} : ['', undef] }; #my ($who, $decoder) = @{ $Extras{unpack "v", $id} || ['', undef] }; $who = "$id: $who" if $id =~ /\w\w/ ; $who = "'$who'"; out $id, "Extra ID #" . Value_v($count), unpackValue_v($id) . " $who" ; myRead($buff, ZIP_EXTRA_SUBFIELD_LEN_SIZE); $offset += ZIP_EXTRA_SUBFIELD_LEN_SIZE; $subLen = unpack("v", $buff); out2 $buff, "Length", Value_v($subLen) ; return undef if $offset + $subLen > $XLEN ; if (! defined $decoder) { if ($subLen) { myRead($payload, $subLen); my $data = hexDump($payload); out2 $payload, "Extra Payload", $data; } } else { $decoder->($subLen, $context) ; } $offset += $subLen ; } return undef ; } sub full32 { return $_[0] == 0xFFFFFFFF ; } sub decode_Zip64 { my $len = shift; my $context = shift; my $z64Data = $context->{Zip64}; $ZIP64 = 1; if (full32 $z64Data->[0] ) { out_VV " Uncompressed Size"; } if (full32 $z64Data->[1] ) { out_VV " Compressed Size"; } if (full32 $z64Data->[2] ) { out_VV " Offset to Local Dir"; } if ($z64Data->[3] == 0xFFFF ) { out_V " Disk Number"; } } sub Ntfs2Unix { my $v = shift; my $u64 = shift; # NTFS offset is 19DB1DED53E8000 my $hex = Value_U64($u64) ; my $NTFS_OFFSET = U64->new( 0x19DB1DE, 0xD53E8000 ); $u64->subtract($NTFS_OFFSET); my $elapse = $u64->get64bit(); my $ns = ($elapse % 10000000) * 100; $elapse = int ($elapse/10000000); return "$hex '" . localtime($elapse) . " " . sprintf("%0dns'", $ns); } sub decode_NTFS_Filetimes { my $len = shift; my $context = shift; out_V " Reserved"; out_v " Tag1"; out_v " Size1" ; my ($m, $s1) = read_U64; out $m, " Mtime", Ntfs2Unix($m, $s1); my ($c, $s2) = read_U64; out $c, " Ctime", Ntfs2Unix($m, $s2); my ($a, $s3) = read_U64; out $m, " Atime", Ntfs2Unix($m, $s3); } sub getTime { my $time = shift ; return "'" . localtime($time) . "'" ; } sub decode_UT { my $len = shift; my $context = shift; my ($data, $flags) = read_C(); my $f = Value_C $flags; $f .= " mod" if $flags & 1; $f .= " access" if $flags & 2; $f .= " change" if $flags & 4; out $data, " Flags", "'$f'"; -- $len; if ($flags & 1) { my ($data, $time) = read_V(); out2 $data, "Mod Time", Value_V($time) . " " . getTime($time) ; $len -= 4 ; } if ($flags & 2 && $len > 0 ) { my ($data, $time) = read_V(); out2 $data, "Access Time", Value_V($time) . " " . getTime($time) ; $len -= 4 ; } if ($flags & 4 && $len > 0) { my ($data, $time) = read_V(); out2 $data, "Change Time", Value_V($time) . " " . getTime($time) ; } } sub decode_AES { my $len = shift; my $context = shift; return if $len == 0 ; my %lookup = ( 1 => "AE-1", 2 => "AE-2"); out_v " Vendor Version", sub { $lookup{$_[0]} || "Unknown" } ; my $id ; myRead($id, 2); out $id, " Vendor ID", unpackValue_v($id) . " '$id'"; my %strengths = (1 => "128-bit encryption key", 2 => "192-bit encryption key", 3 => "256-bit encryption key", ); my $strength = out_C " Encryption Strength", sub {$strengths{$_[0]} || "Unknown" } ; my ($bmethod, $method) = read_v(); out $bmethod, " Compression Method", compressionMethod($method) ; $context->{AesStrength} = $strength ; } sub decode_GrowthHint { my $len = shift; my $context = shift; my $inCentralHdr = $context->{InCentralDir} ; return if $len == 0 ; out_v " Signature" ; out_v " Initial Value"; my $padding; myRead($padding, $len - 4); my $data = hexDump($padding); out2 $padding, "Padding", $data; } sub decode_UX { my $len = shift; my $context = shift; my $inCentralHdr = $context->{InCentralDir} ; return if $len == 0 ; my ($data, $time) = read_V(); out2 $data, "Access Time", Value_V($time) . " " . getTime($time) ; ($data, $time) = read_V(); out2 $data, "Mod Time", Value_V($time) . " " . getTime($time) ; if (! $inCentralHdr ) { out_v " UID" ; out_v " GID"; } } sub decode_Ux { my $len = shift; my $context = shift; return if $len == 0 ; out_v " UID" ; out_v " GID"; } sub decodeLitteEndian { my $value = shift ; if (length $value == 4) { return Value_V unpack ("V", $value) } else { # TODO - fix this die "unsupported\n"; } my $got = 0 ; my $shift = 0; #hexDump #reverse #my @a =unpack "C*", $value; #@a = reverse @a; #hexDump(@a); for (reverse unpack "C*", $value) { $got = ($got << 8) + $_ ; } return $got ; } sub decode_ux { my $len = shift; my $context = shift; return if $len == 0 ; out_C " Version" ; my $uidSize = out_C " UID Size"; myRead(my $data, $uidSize); out2 $data, "UID", decodeLitteEndian($data); my $gidSize = out_C " GID Size"; myRead($data, $gidSize); out2 $data, "GID", decodeLitteEndian($data); } sub decode_Java_exe { my $len = shift; my $context = shift; } sub decode_up { my $len = shift; my $context = shift; out_C " Version"; out_V " NameCRC32"; myRead(my $data, $len - 5); out $data, " UnicodeName", $data; } sub decode_Xceed_unicode { my $len = shift; my $context = shift; my $data ; # guess the fields used for this one myRead($data, 4); out $data, " ID", $data; out_v " Length"; out_v " Null"; myRead($data, $len - 8); out $data, " UTF16LE Name", decode("UTF16LE", $data); } sub decode_NT_security { my $len = shift; my $context = shift; my $inCentralHdr = $context->{InCentralDir} ; out_V " Uncompressed Size" ; if (! $inCentralHdr) { out_C " Version" ; out_v " Type"; out_V " NameCRC32" ; my $plen = $len - 4 - 1 - 2 - 4; myRead(my $payload, $plen); out $plen, " Extra Payload", hexDump($payload); } } sub decodeMVS { my $len = shift; my $context = shift; # data in Big-Endian myRead(my $data, $len); my $ID = unpack("N", $data); if ($ID == 0xE9F3F9F0) { out($data, " ID", "'Z390'"); substr($data, 0, 4) = ''; } out($data, " Extra Payload", hexDump($data)); } sub printAes { my $context = shift ; my %saltSize = ( 1 => 8, 2 => 12, 3 => 16, ); myRead(my $salt, $saltSize{$context->{AesStrength} }); out $salt, "AES Salt", hexDump($salt); myRead(my $pwv, 2); out $pwv, "AES Pwd Ver", hexDump($pwv); return $saltSize{$context->{AesStrength}} + 2 + 10; } sub printLzmaProperties { my $len = 0; my $b1; my $b2; my $buffer; myRead($b1, 2); my ($verHi, $verLow) = unpack ("CC", $b1); out $b1, "LZMA Version", sprintf("%02X%02X", $verHi, $verLow) . " '$verHi.$verLow'"; my $LzmaPropertiesSize = out_v "LZMA Properties Size"; $len += 4; my $LzmaInfo = out_C "LZMA Info", sub { $_[0] == 93 ? "(Default)" : ""}; my $PosStateBits = 0; my $LiteralPosStateBits = 0; my $LiteralContextBits = 0; $PosStateBits = int($LzmaInfo / (9 * 5)); $LzmaInfo -= $PosStateBits * 9 * 5; $LiteralPosStateBits = int($LzmaInfo / 9); $LiteralContextBits = $LzmaInfo - $LiteralPosStateBits * 9; out1 " PosStateBits", $PosStateBits; out1 " LiteralPosStateBits", $LiteralPosStateBits; out1 " LiteralContextBits", $LiteralContextBits; out_V "LZMA Dictionary Size"; # TODO - assumption that this is 5 $len += $LzmaPropertiesSize; skip($FH, $LzmaPropertiesSize - 5) if $LzmaPropertiesSize != 5 ; return $len; } sub scanCentralDirectory { my $fh = shift; my $here = $fh->tell(); # Use cases # 1 32-bit CD # 2 64-bit CD my @CD = (); my $offset = findCentralDirectoryOffset($fh); return () if ! defined $offset; $fh->seek($offset, SEEK_SET) ; # Now walk the Central Directory Records my $buffer ; while ($fh->read($buffer, 46) == 46 && unpack("V", $buffer) == ZIP_CENTRAL_HDR_SIG) { my $compressedLength = unpack("V", substr($buffer, 20, 4)); my $uncompressedLength = unpack("V", substr($buffer, 24, 4)); my $filename_length = unpack("v", substr($buffer, 28, 2)); my $extra_length = unpack("v", substr($buffer, 30, 2)); my $comment_length = unpack("v", substr($buffer, 32, 2)); my $locHeaderOffset = unpack("V", substr($buffer, 42, 4)); skip($fh, $filename_length ) ; if ($extra_length) { $fh->read(my $extraField, $extra_length) ; # $self->smartReadExact(\$extraField, $extra_length); # Check for Zip64 # my $zip64Extended = findID("\x01\x00", $extraField); my $zip64Extended = findID(0x0001, $extraField); if ($zip64Extended) { if ($uncompressedLength == 0xFFFFFFFF) { $uncompressedLength = Value_VV64 substr($zip64Extended, 0, 8, ""); # $uncompressedLength = unpack "Q<", substr($zip64Extended, 0, 8, ""); } if ($compressedLength == 0xFFFFFFFF) { $compressedLength = Value_VV64 substr($zip64Extended, 0, 8, ""); # $compressedLength = unpack "Q<", substr($zip64Extended, 0, 8, ""); } if ($locHeaderOffset == 0xFFFFFFFF) { $locHeaderOffset = Value_VV64 substr($zip64Extended, 0, 8, ""); # $locHeaderOffset = unpack "Q<", substr($zip64Extended, 0, 8, ""); } } } my $got = [$locHeaderOffset, $compressedLength] ; # my $v64 = U64->new( $compressedLength ); # my $loc64 = U64->new( $locHeaderOffset ); # my $got = [$loc64, $v64] ; # if (full32 $compressedLength || full32 $locHeaderOffset) { # $fh->read($buffer, $extra_length) ; # # TODO - fix this # die "xxx $offset $comment_length $filename_length $extra_length" . length($buffer) # if length($buffer) != $extra_length; # $got = get64Extra($buffer, full32($uncompressedLength), # $v64, # $loc64); # # If not Zip64 extra field, assume size is 0xFFFFFFFF # #$v64 = $got if defined $got; # } # else { # skip($fh, $extra_length) ; # } skip($fh, $comment_length ) ; push @CD, $got ; } $fh->seek($here, SEEK_SET) ; # @CD = sort { $a->[0]->cmp($b->[0]) } @CD ; @CD = sort { $a->[0] <=> $b->[0] } @CD ; # Set the first Local File Header offset. $START = $CD[0]->[0] if @CD ; return (1, $offset, @CD); } sub offsetFromZip64 { my $fh = shift ; my $here = shift; $fh->seek($here - 20, SEEK_SET) # TODO - fix this or die "xx $!" ; my $buffer; my $got = 0; ($got = $fh->read($buffer, 20)) == 20 # TODO - fix this or die "xxx $here $got $!" ; if ( unpack("V", $buffer) == ZIP64_END_CENTRAL_LOC_HDR_SIG ) { my $cd64 = Value_VV64 substr($buffer, 8, 8); $fh->seek($cd64, SEEK_SET) ; $fh->read($buffer, 4) == 4 # TODO - fix this or die "xxx" ; if ( unpack("V", $buffer) == ZIP64_END_CENTRAL_REC_HDR_SIG ) { $fh->read($buffer, 8) == 8 # TODO - fix this or die "xxx" ; my $size = Value_VV64($buffer); $fh->read($buffer, $size) == $size # TODO - fix this or die "xxx" ; my $cd64 = Value_VV64 substr($buffer, 36, 8); return $cd64 ; } die "Cannot find 'Zip64 end of central directory record': 0x06054b50\nTry running with --scan option.\n" ; } die "Cannot find signature for 'Zip64 end of central directory locator': 0x07064b50 \nTry running with --scan option.\n" ; } use constant Pack_ZIP_END_CENTRAL_HDR_SIG => pack("V", ZIP_END_CENTRAL_HDR_SIG); sub findCentralDirectoryOffset { my $fh = shift ; # Most common use-case is where there is no comment, so # know exactly where the end of central directory record # should be. $fh->seek(-22, SEEK_END) ; my $here = $fh->tell(); my $is64bit = $here > 0xFFFFFFFF; my $over64bit = $here & (~ 0xFFFFFFFF); my $buffer; $fh->read($buffer, 22) == 22 # TODO - fix this or die "xxx" ; my $zip64 = 0; my $centralDirOffset ; if ( unpack("V", $buffer) == ZIP_END_CENTRAL_HDR_SIG ) { $centralDirOffset = unpack("V", substr($buffer, 16, 4)); } else { $fh->seek(0, SEEK_END) ; my $fileLen = $fh->tell(); my $want = 0 ; while(1) { $want += 1024 * 32; my $seekTo = $fileLen - $want; if ($seekTo < 0 ) { $seekTo = 0; $want = $fileLen ; } $fh->seek( $seekTo, SEEK_SET) # TODO - fix this or die "xxx $!" ; my $got; ($got = $fh->read($buffer, $want)) == $want # TODO - fix this or die "xxx $got $!" ; my $pos = rindex( $buffer, Pack_ZIP_END_CENTRAL_HDR_SIG); if ($pos >= 0 && $want - $pos > 22) { $here = $seekTo + $pos ; $centralDirOffset = unpack("V", substr($buffer, $pos + 16, 4)); my $commentLength = unpack("V", substr($buffer, $pos + 20, 2)); $commentLength = 0 if ! defined $commentLength ; my $expectedEof = $fileLen - $want + $pos + 22 + $commentLength ; # check for trailing data after end of zip if ($expectedEof < $fileLen ) { $TRAILING = $expectedEof ; } last ; } return undef if $want == $fileLen; } } if (full32 $centralDirOffset) { $centralDirOffset = offsetFromZip64($fh, $here) } elsif ($is64bit) { # use-case is where a 64-bit zip file doesn't use the 64-bit # extensions. print "EOCD not 64-bit $centralDirOffset ($here)\n" ; push @Messages, sprintf "Zip file > 4Gig. Expected 'Offset to Central Dir' to be 0xFFFFFFFF, got 0x%X\n", $centralDirOffset; $centralDirOffset += $over64bit; $is64In32 = 1; } return $centralDirOffset ; } sub findID { my $id_want = shift ; my $data = shift; my $XLEN = length $data ; my $offset = 0 ; while ($offset < $XLEN) { return undef if $offset + ZIP_EXTRA_SUBFIELD_HEADER_SIZE > $XLEN ; my $id = substr($data, $offset, ZIP_EXTRA_SUBFIELD_ID_SIZE); $id = unpack("v", $id); $offset += ZIP_EXTRA_SUBFIELD_ID_SIZE; my $subLen = unpack("v", substr($data, $offset, ZIP_EXTRA_SUBFIELD_LEN_SIZE)); $offset += ZIP_EXTRA_SUBFIELD_LEN_SIZE ; return undef if $offset + $subLen > $XLEN ; return substr($data, $offset, $subLen) if $id eq $id_want ; $offset += $subLen ; } return undef ; } sub _dosToUnixTime { my $dt = shift; my $year = ( ( $dt >> 25 ) & 0x7f ) + 80; my $mon = ( ( $dt >> 21 ) & 0x0f ) - 1; my $mday = ( ( $dt >> 16 ) & 0x1f ); my $hour = ( ( $dt >> 11 ) & 0x1f ); my $min = ( ( $dt >> 5 ) & 0x3f ); my $sec = ( ( $dt << 1 ) & 0x3e ); use POSIX 'mktime'; my $time_t = mktime( $sec, $min, $hour, $mday, $mon, $year, 0, 0, -1 ); return 0 if ! defined $time_t; return $time_t; } { package U64; use constant MAX32 => 0xFFFFFFFF ; use constant HI_1 => MAX32 + 1 ; use constant LOW => 0 ; use constant HIGH => 1; sub new { my $class = shift ; my $high = 0 ; my $low = 0 ; if (@_ == 2) { $high = shift ; $low = shift ; } elsif (@_ == 1) { my $value = shift ; if ($value > MAX32) { $high = $value >> 32 ; $low = $value & MAX32; } else { $low = $value ; } } bless [$low, $high], $class; } sub newUnpack_V64 { my $string = shift; my ($low, $hi) = unpack "V V", $string ; bless [ $low, $hi ], "U64"; } sub newUnpack_V32 { my $string = shift; my $low = unpack "V", $string ; bless [ $low, 0 ], "U64"; } sub reset { my $self = shift; $self->[HIGH] = $self->[LOW] = 0; } sub clone { my $self = shift; bless [ @$self ], ref $self ; } sub mkU64 { my $value = shift; return $value if ref $value eq 'U64'; bless [ $value, 0 ], "U64" ; } sub getHigh { my $self = shift; return $self->[HIGH]; } sub getLow { my $self = shift; return $self->[LOW]; } sub get32bit { my $self = shift; return $self->[LOW]; } sub get64bit { my $self = shift; # Not using << here because the result will still be # a 32-bit value on systems where int size is 32-bits return $self->[HIGH] * HI_1 + $self->[LOW]; } sub add { my $self = shift; my $value = shift; if (ref $value eq 'U64') { $self->[HIGH] += $value->[HIGH] ; $value = $value->[LOW]; } my $available = MAX32 - $self->[LOW] ; if ($value > $available) { ++ $self->[HIGH] ; $self->[LOW] = $value - $available - 1; } else { $self->[LOW] += $value ; } } sub subtract { my $self = shift; my $value = shift; if (ref $value eq 'U64') { if ($value->[HIGH]) { die "unsupport subtract option" if $self->[HIGH] == 0 || $value->[HIGH] > $self->[HIGH] ; $self->[HIGH] -= $value->[HIGH] ; } $value = $value->[LOW] ; } if ($value > $self->[LOW]) { -- $self->[HIGH] ; $self->[LOW] = MAX32 - $value + $self->[LOW] + 1; } else { $self->[LOW] -= $value; } } sub rshift { my $self = shift; my $count = shift; for (1 .. $count) { $self->[LOW] >>= 1; $self->[LOW] |= 0x80000000 if $self->[HIGH] & 1 ; $self->[HIGH] >>= 1; } } sub is64bit { my $self = shift; return $self->[HIGH] > 0 ; } sub getPacked_V64 { my $self = shift; return pack "V V", @$self ; } sub getPacked_V32 { my $self = shift; return pack "V", $self->[LOW] ; } sub pack_V64 { my $low = shift; return pack "V V", $low, 0; } sub max32 { my $self = shift; return $self->[HIGH] == 0 && $self->[LOW] == MAX32; } sub stringify { my $self = shift; return "High [$self->[HIGH]], Low [$self->[LOW]]"; } sub equal { my $self = shift; my $other = shift; return $self->[LOW] == $other->[LOW] && $self->[HIGH] == $other->[HIGH] ; } sub gt { my $self = shift; my $other = shift; return $self->cmp($other) > 0 ; } sub cmp { my $self = shift; my $other = shift ; if ($self->[LOW] == $other->[LOW]) { return $self->[HIGH] - $other->[HIGH] ; } else { return $self->[LOW] - $other->[LOW] ; } } sub nibbles { my @nibbles = ( [ 16 => HI_1 * 0x10000000 ], [ 15 => HI_1 * 0x1000000 ], [ 14 => HI_1 * 0x100000 ], [ 13 => HI_1 * 0x10000 ], [ 12 => HI_1 * 0x1000 ], [ 11 => HI_1 * 0x100 ], [ 10 => HI_1 * 0x10 ], [ 9 => HI_1 * 0x1 ], [ 8 => 0x10000000 ], [ 7 => 0x1000000 ], [ 6 => 0x100000 ], [ 5 => 0x10000 ], [ 4 => 0x1000 ], [ 3 => 0x100 ], [ 2 => 0x10 ], [ 1 => 0x1 ], ); my $value = shift ; for my $pair (@nibbles) { my ($count, $limit) = @{ $pair }; return $count if $value >= $limit ; } } } { package Seen; sub new { my $class = shift ; my %object = ( overlaps => [], detail => [], ) ; bless \%object, $class; } sub save { my $self = shift ; my $hdrId = shift; my $name = shift; my $from_offset = shift; my $to_offset = shift ; for my $entry ( @{ $self->{detail} } ) { if ( $from_offset == $entry->{from} && $to_offset == $entry->{to} ) { warn "$hdrId: '$name' matches with $entry->{str}\n" } elsif ( ($from_offset >= $entry->{from} && $from_offset <= $entry->{to} ) || ($to_offset >= $entry->{from} && $to_offset <= $entry->{to} ) ) { # die "overlap!" # push @{ $self->{overlap} }, die "$hdrId: '$name' overlaps with $entry->{str}\n" } } warn "ADD $from_offset $to_offset $hdrId: $name\n"; push @{ $self->{detail} }, { from => $from_offset, to => $to_offset, id => $hdrId, name => $name, str => "$hdrId: '$name'", } ; } sub summary { my $self = shift ; for my $outer ( sort { $a->{from} <=> $b->{from} } @{ $self->{detail} } ) { my $from_offset = $outer->{from}; my $to_offset = $outer->{to}; my $hdrId = $outer->{id}; my $name = $outer->{name}; for my $entry ( sort { $a->{from} <=> $b->{from} } @{ $self->{detail} } ) { # next if if ( ($from_offset >= $entry->{from} && $from_offset <= $entry->{to} ) || ($to_offset >= $entry->{from} && $to_offset <= $entry->{to} ) ) { # die "overlap!" die $entry->{str} . " overlaps with $hdrId: '$name'\n" } } } } } sub Usage { if (@_) { warn "$_\n" for @_ ; warn "\n"; } die <<EOM; zipdetails [OPTIONS] file Display details about the internal structure of a Zip file. This is zipdetails version $VERSION OPTIONS -h display help --scan enable scannng mode. Blindly scan the file looking for zip headers Expect false-positives. -v Verbose - output more stuff --version Print version number Copyright (c) 2011-2021 Paul Marquess. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. EOM } __END__ =head1 NAME zipdetails - display the internal structure of zip files =head1 SYNOPSIS zipdetails [-v][--scan] zipfile.zip zipdetails -h zipdetails --version =head1 DESCRIPTION Zipdetails displays information about the internal record structure of zip files. It is not concerned with displaying any details of the compressed data stored in the zip file. The program assumes prior understanding of the internal structure of a Zip file. You should have a copy of the Zip APPNOTE file at hand to help understand the output from this program (L<SEE ALSO> for details). =head2 Default Behaviour By default the program expects to be given a well-formed zip file. It will navigate the Zip file by first parsing the zip central directory at the end of the file. If that is found, it will then walk through the zip records starting at the beginning of the file. Any badly formed zip data structures encountered are likely to terminate the program. If the program finds any structural problems with the zip file it will print a summary at the end of the output report. The set of error cases reported is very much a work in progress, so don't rely on this feature to find all the possible errors in a zip file. If you have suggestions for use-cases where this could be enhanced please consider creating an enhancement request (see L<"SUPPORT">). =head2 Scan-Mode If you do have a potentially corrupt zip file, particulatly where the central directory at the end of the file is absent/incomplete, you can try usng the C<--scan> option to search for zip records that are still present. When Scan-mode is enabled, the program will walk the zip file from the start blindly looking for the 4-byte signatures that preceed each of the zip data structures. If it finds any of the recognised signatures it will attempt to dump the associated zip record. For very large zip files, this operation can take a long time to run. Note that the 4-byte signatures used in zip files can sometimes match with random data stored in the zip file, so care is needed interpreting the results. =head2 OPTIONS =over 5 =item -h Display help =item --scan Walk the zip file loking for possible zip records. Can be error-prone. See L<"Scan-Mode"> =item -v Enable Verbose mode. See L<"Verbose Output">. =item --version Display version number of the program and exit. =back =head2 Default Output By default zipdetails will output the details of the zip file in three columns. =over 5 =item Column 1 This contains the offset from the start of the file in hex. =item Column 2 This contains a textual description of the field. =item Column 3 If the field contains a numeric value it will be displayed in hex. Zip stores most numbers in little-endian format - the value displayed will have the little-endian encoding removed. Next, is an optional description of what the value means. =back =head2 Verbose Output If the C<-v> option is present, column 1 is expanded to include =over 5 =item * The offset from the start of the file in hex. =item * The length of the field in hex. =item * A hex dump of the bytes in field in the order they are stored in the zip file. =back =head1 LIMITATIONS The following zip file features are not supported by this program: =over 5 =item * Multi-part archives. =item * The strong encryption features defined in the "APPNOTE" document. =back =head1 TODO Error handling is a work in progress. If the program encounters a problem reading a zip file it is likely to terminate with an unhelpful error message. =head1 SUPPORT General feedback/questions/bug reports should be sent to L<https://github.com/pmqs/IO-Compress/issues> (preferred) or L<https://rt.cpan.org/Public/Dist/Display.html?Name=IO-Compress>. =head1 SEE ALSO The primary reference for Zip files is the "APPNOTE" document available at L<http://www.pkware.com/documents/casestudies/APPNOTE.TXT>. An alternative reference is the Info-Zip appnote. This is available from L<ftp://ftp.info-zip.org/pub/infozip/doc/> The C<zipinfo> program that comes with the info-zip distribution (L<http://www.info-zip.org/>) can also display details of the structure of a zip file. See also L<Archive::Zip::SimpleZip>, L<IO::Compress::Zip>, L<IO::Uncompress::Unzip>. =head1 AUTHOR Paul Marquess F<pmqs@cpan.org>. =head1 COPYRIGHT Copyright (c) 2011-2021 Paul Marquess. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.