allbery@ncoast.UUCP (05/21/87)
# "Watergate is a gnat compared to the Bell System." -- from the suicide note of T. O. Gravitz, exec VP, pre-divestiture Southern Bell Mr. Fox's gem is herewith complete. Notes: (a) If this were a submission to JACM, it would be entitled "Functional Obfuscation in a Self-Decompressing Shell Archive." (b) On the part of the receiver, assumes access to nothing except 'cc', a simple 'sh', and 'cat'. Some non-Unix systems might even qualify. (c) Assumes the sender has a favorite 'shar' -- some pass binary, some do directories. Whatever. Also 'compress' and 'btoa' (better'n "uudecode") from mod.sources, volume 2. (d) Aside from some superfluous demonstration test files, the sharchive below contains 'shark', which is the main constructo-thing itself. If the name is already taken, call it 'sharp', or 'shard'. (e) Making it do "cc -O" may be counterproductive. (f) What we have here is not minimal. -- James A. Woods (ames!jaw) ------------------------------- cut here -------------------------------- #!/bin/sh echo "Cleverly he dialed from within." -- D. Van Vliet, "Trout Mask Replica" > /dev/null echo compiling decoders ... cat > atob.c <<'ZZ' #include <stdio.h> #define R register #define t85(x) ((((((x<<2)+x)<<2)+x)<<2)+x) FILE *tf;long CX,Cs,CR,w,B; F(){fprintf(stderr,"bad format or Cs to atob\n"); exit(1);} d(c)R c;{if(c=='z'){if(B){F();}else{b(0);b(0);b(0);b(0);}}else if (c>='!'&&(c<'!'+85)){if(!B){w=c-'!';++B;}else if(B<4){w=t85(w);w+=c-'!';++B;} else{w=t85(w)+c-'!';b((int)((w>>24)&255));b((int)((w>>16)&255));b((int) ((w>>8)&255));b((int)(w&255));w=B=0;}}else F();} b(c)R c;{CX^=c;Cs+=c;Cs+=1; if(CR&0x80000000){CR<<=1;CR+=1;}else{CR<<=1;}CR+=c;putc(c,tf);} main(gc,v)char **v;{R c;R long i;char tn[99],Q[99];long n1,n2,oX,os,oR; if(gc!=1){fprintf(stderr,"bad args to %s\n",v[0]);exit(2);}sprintf(tn, "/usr/tmp/atob.%x",getpid());tf=fopen(tn,"w+");if(tf==NULL)F();unlink(tn); for(;;){if(fgets(Q,99,stdin)==NULL)F();if(!strcmp(Q,"xbtoa Begin\n"))break;} while((c=getchar())!=EOF){if(c=='\n')continue;else if(c=='x')break;else d(c);} if(scanf("btoa End N %ld %lx E %lx S %lx R %lx\n",&n1,&n2,&oX,&os,&oR)!=5) {F();}if(n1!=n2||oX!=CX||os!=Cs||oR!=CR){F();} else{fseek(tf,0L,0);for(i=n1;--i>=0;)putchar(getc(tf));exit(0);}} ZZ cc -o atob atob.c cat > zcat.c <<'ZZ' #include <stdio.h> #define d define #d G getchar() #d I if #d H(n) ((C*)h)[n] #d C char #d U unsigned long #d u unsigned short #d R register C* #d B(n) (1<<(n)) #d V(a,b) (a&(B(b)-1)) #d E {fprintf(stderr,"Bad COMPRESS file format\n");exit(1);} int i,q,b,n,k=16,e=128,j=0,O=0,S=0;u t[69001];long o,v,c,m,M=B(16),f=0;U h[ 69001];C D[16];long g(){R p=D;I(j>0||O>=S||f>m){I(f>m)m= ++n==k?M:B(n)-1;I(j>0) m=B(n=9)-1,j=0;S=fread(D,1,n,stdin);I(S<=0)return-1;O=0;S=(S<<3)-n+1;}q=O;b=n;p +=q>>3;q&=7;c=V(*p++>>q,8-q);q=8-q;b-=q;I(b>=8)c|=(*p++&255)<<q,q+=8,b-=8;c|=V( *p,b)<<q;O+=n;return c;}main(){I(G!=31||G!=157)E;k=G;e=k&128;k&=31;M=B(k);I(k> 16)E;z();exit(0);}z(){long w;R s;m=B(n=9)-1;for(w=255;w>=0;w--)t[w]=0,H(w)=(C)w ;f=e?257:256;i=o=g();I(o==-1)return;putchar((C)i);s=(C*)&H(B(16));while((w=g()) >-1){I(w==256&&e){for(w=255;w>=0;w--)t[w]=0;j=1;f=256;I((w=g())==-1)break;}v=w; I(w>=f)*s++=i,w=o;while((U)w>=(U)256)*s++=H(w),w=t[w];*s++=i=H(w);do putchar(* --s);while(s>&H(B(16)));I((w=f)<M)t[w]=(u)o,H(w)=i,f=w+1;o=v;}} ZZ cc -o zcat zcat.c ./atob > /tmp/j.Z <<'ZZ' xbtoa Begin +.\L)`h7SZ!Y:)&+P*bG;oVNL(Ln0'.74<XM)d6%@!V;%":-(V)*3EVJd7>M.U&W!ie0j\2eH6HD"q t.8sLb<?r6s&LBsJ78rP2R8*Gsk@FDYOO^\h@3D/P'5llb[$lU[s?;7]"O,0Q&QSs71FfJKDB=[_5O E+pUQSE-5[+SJG^juY"Jq+NSbo&NMg.8#Q&YhgU*e!PN$b/pQPAOO.F:#:mikL%_WlU#cKT\9(f$%P '_G3HRUs5\i(oL+G3HXnD&CTVHLbil<^d7!I"Gh[9_glEq1_!>@+9o,s'8Fd"0Oi2O8M^Rh6oT3+Nd 7QZJTpQ*`2$6DE;CM4+ND'n"1udI4<TjkFq5dQ$P6Cr]HK)/qtC6.Z$"N+E*:a.Ao23nQTtZkK[:]P ]XGgf'j['O7NHm[TnJK#1uMT'D(*FCRW15P#VV"s`X<@CF;I4j]Ej)p6S)c:*4[@s"peb8d2ZS,aRP !pGGIM0)G9Z,*!esfB16/M=M[HFdZGjX'ggJ;#7+%W0uk1T85TR2;iVHEDa&^@!Z>S%nU_^&Ye^NV1 5[3LH>UH[`ftrB(sm_Ca>!o*/efdeM[[mEk*B_96,spROCZcG>%homTi`lBQpjtFnO+*j'HmVc:e4I %'N:Bte/3#O_.H8[d*^km/th0U:*[!BRR:M8+@d;^U_.C8\E^*DNca2U!t':K!!3MS7Z3$n18M-@Zd `0:/J$B<Rt=C),f)k\+K-F5%a4N*";WNs1"m1:Y]'gT6L4](&PVS##$KSQ'e>boaMEH6@Y@U@)/mTI e<UDni%>:rK&A&Q>dtpY="`K@,RQ9)`?P_"UbM'N47&*L<+GRI_[1XZd+$/c#gj@#C6cWT7!j`@!Xr >ubju<.pUmh9IFpXo#Uep@Z4AI@E.SBCJ:*O/.k$n(b>X*;o,`,J@+,EWn$'Y9obMuIN\CjW!t@tIS a<Y+E-92.?FKq.$"B+SQ&B9rh8@tq`4a%>@I&k=<%1(ZLCZSi^pXP)e54'55XUI>if(oc6OJoJ::]> >.igV03,fr7j?arK?/g'MNqs5k$df%b?($*tc!?#.ZH29q]WN&Wn),hS,S/d"$p3YU1V>'MJ-QQ<6n ^^LHbaFFn\Rpb2tFDD;8![qEt9qo42@QO(a-.-Q!-3lV%a8LN5:)d.1#QL\LQ6/o#NnORdM%agO]=a !&6EK+U:$k!Xk`A^]^Ct490Ij$s;El)6i$.m!?Q_hB7O5@0(!1$c2A%Z7i0K$O-P;Pe[Q:0T!p1%"j ES;(<oEq/$-:?/S<m1e%]a<3%Nji0RD>5R06P5URb#5oo)1LDS;\:G8);Ue6/m)P05UH6NGi\0@1Z+ :J_h+efQ;0Xlu-!+oO'JJ5'!"=BoEGBIj,T@P,SN*u`qE^7GNG(;FaR,NpEQid\i^]FYEi*T)JJ]cQ r`]#[7N*2((*6+)<5n4;6@X+,VKE*R"d-tdZpf/0^YW",g!D*ZM<ltD&^b(GJ#Z!-@+&fVRMRcDDfM P6]b-1uCTabQ_3rpC-(<SCkZBo5$=NF)@ZT4Dp%9"F;-:(H22cR^%+=I70.\]XiOK4inQpN^a@$"6. PD1VBJHXG)_/s/5SYIn?#?)b^am!=H\Ea7@,UgM:npq;g']HY&WBl*\JY5mPW"`k;aL,ElQhm.A)<` I`(;PG,(?GlE&(^mim[s_88-@=SQNHd+Tp;])U)>Ag_i=Vr%hA!VVa<8@;OqP0Lr,&U.YXi_NM/BdO k?GI+B1ltUo0%^JYpkkLIFf",aGs*:,HMpM[1I37PM]h_M!Rf38k02&ChF\Pq$%@W`?7^!?u5hX(%? &=$*F<YoHXm&00XedV7gPY`L@H,QVUkW%/KWi!*g[CBuC\!?+k?"ZLOsY!Y`UK]Gt].Y&Y%F%F1d*) _q!e[5mRF[Kb"9,Ip\N"0tNeZXQ^/-7$(Y!O84@:N[Xg$Z8O<^8qf=<IgcL*:<:m;34lG2%n994($X Q`O.G0HmfB#Z#,c9i2&qeL[N-$!Z%0Hc\X8Z1!=t5oL-j^fq/O?k(/_!=R%h4;m(-"_sDF$_AKu.El Z7TV]OAClj;5`LmSLm*cp9`rc(EJH\d36#8EF!Z%0^^6V4*(3IE#rrP0c7+d+R!;sUdjD.^X+i4_PJ -%V'!!`IN!n4%9:G_d=%8A"NMdbCq*e7X7DG]")IaA3<`3unf*H?p3][n)%\-G#b_/S@[?i(&LQs(a :$RTOT6l&hE;rGLY;Xc1tYf@2=VD%?'Mh3MO?j95H_[<miLE8PYBH8[s:?WGu`m%lrEA0ZhDBQ_9jH _0'@iTc6d"45rV9O[R"415u"%ADU$qr2-)#2G['EEF_Y"O=;a;YAq]iPW$`dn+=SQhZSKX[E4JYJc% 2`L)rb?s[C+5A604coFE,+Lq-re]t$e_gW\.)HJ@H\>`!?k"H=JU<0SB3jsK_6I8J=%KuY>@E*!_Uc UL>M?u]C:bo8^-hq%Eteck(<K0<hF>,#3nTE+Fs'M1IdbVeq$o<#Po`7!m\#aa4LbeaLtiG]&31]"Y m542_&4:cie7&6\6P?FQcjTeaW<>DC#I,Rnsrkr%!KIVP8c!pTK%XD;("PX\?,k2Z@YHG$m\L`bM0_ ?qq`LQo<(%>iiDJg'O8^1?hi/N#4Z.DZO_6CJ[fhhigR&M"`kMb&(2RRKYq]gd&OssR>(dF(H_jtQh nB7m'\LmHO!uW>8hfAp)T6G+=:s%$?Q?t3J`&Y,bK]"4<?;=Km_T#?RZMS+E+U<)[1@T_19QiFU'FF br\J+ra;aiX(HLT;X!CI_s/\Vk*-uMeH/WkqU:'.UoB@U!UAogeBcI^"]69)8(@0!34qKc0$lq?U5C B3JUdkQ!!+1i1SgqYB2HLl,]d34qU'q%;bhuimWCaAfWSWVej4r[B;@6890`0(HGSm!%sob*i)#OZ: l$GkU:SFe6+?@s)KIV<3Rj`3@\?P+/qfUQS3d/HB7K^.+mB4U1%B`)&qK]]C2Ld)6%CeEJk,L]#4QV )"CVKmK,efR#O$.Q3ta&8+Xeti*C3MR-?t+jR"?ftJh5Q+/f4^:pjt7\K/E@T0j'&fR"I2>K0%Y;5' VZApk(o#K9Z[mfL8'NQ!)2e-$'V%EKV=W+U7EJ*Nq1&,DZL0+9YlXKj<8a?MK4^(kuKZL-j6-A9`iB R"f6eL2,@qDO?/ppkEfKLKtaPFEiRZW"Y:>/4\nXD"&@[@=]P?#@7Ic&jqJ#E.nTP"H:uhNqeEl(l= D8M3M,!6dQj>R#.9AM4'0VSG7r6\;?doMPO@3O#W#oR#7T9'1?5]&kE/nd0Ac2&P"#j*!cW3_(]ID1 "NT@R`-6%5m5%aN5ShW`d!H`R#K1tN'n59bkR.D(lcc'N7(gfed.8bG`CFeNPq3Dh"Zl[W"\7/LD!\ lEo7M615L1k+DX4ZkJ<'a'F"W4Ldb.$p3;YnR#h*RO8RXkr`B<ZnW*`3O9@"o!EkKiR?.PsO:'[&%Z -5Tq2c5gOPo,U%:]Nhi<Jd+#B^RrKL#f_0ST!>*"-a&MO7BlR?B&1Ot>:L0):YaR8r&TP;HF+2G')g H':;"P;\hm4Sb1+WKKF_PXNWW3cS6^fJ#fl"po?>effqmpa['k7f^Gbp3-^uGQ_3\Q!E"-?MTjo)4" _lQ:K:BA9jJSR?hK"Q>5*=DOHf,q3H%]QX(JqFEs3kW=qg1OT^=?jj>c#a"'ao*[:tGBM\q9fc<VfR #K^cNqo'()4?XJR?WO2MHQ@7R@0LHR?tIPT)"eBfpSKnR\\W(U03q`q3apsQ[V@-JVY*bq$%g0(kYD CUVn0TQit"2S%RFD^A486)4\Q(S4V'J`-IloR@M<3SBBNTcC(3Hq4,knS\5o3e9RV2W=qn>Re"i1oH B$OnciKb)`o6t_]^RQE1;``"ROg5meNID)5$I[TCc9Y9$eUPR@j>dTD=>9r:urb\tAs>TEJGkml@$F R\0\]'2--09Ah3[,)Cn3.$E)B?rA7?+u/9n#'bZf$*XOT)PSE:U*Np:-@2C7R\EI%*@fd;0)D:ob+^ RNUGVhA10UG4R\M*RUH7,(26%<`^m[s4Pj1dNF$PP%,+GDd,fh0jU7mB['W"\gV,UWp<dLTER\alN* Eq0n?M^L(b,&K,VI]P"@ToXBR\j#0VJ=h^AZ?D<^m\Qg.RcCS?=Fq!0I@4',nOR^`h\Db&?(1AW.\? QL3feSR])+t"Pp>]Nr#]9lDT[\WK^ScO?0A,R]2`JW0k/qSnb5cJPA^-5YfZQHZEDDfH]goM[]\7Bq U8W&?E)tX0c'2[X,!aR]F$b"Pp>`^A=nGlDqT:XMe;D^cJR:R]OY(X2qlRc>'FAnH>rh"B/bJ^(Nqj R3cKr#(pS7g^5?9E!L3PLegjMk'F2oR]bqeY3alFmeR(BnZMFDYOj<JnQN-kR]l@0YPQtVredlVqQB t$Y;u[fX9f((LFeEN-:%-W>>gsL!>sgrLeppQ(43;'S$<mDYoMN'*X`/-nZa9"Z6Us++^;6#S$F;dZ 7=V7/rQtcqm%uXZ8rR$X;M2RPY:3`Le[(;?imUOnLKJ6"[lS%7XML5S$Yf"ZqT5];:$=Y)mrR*[8@= ><-u#T41/+Y[9VIo8%Z08)n&nM';I=_@58Cs8UR7TItV7%_P%l7gDs0G[rbi`G'g]CS%!^U[sT\0En e'R)n:LS[spKLL3pF]>I]L$\;XY$MVGY&Hal*[:1cQk9*?Pm#Y%Vk+fedP7Uh)-JL[BU\tiQAVL,nQ S%>VX.\XJcY5>f7]=P*`]<keSY<0A)S%H6n]"#Aa^0A315m=>]"\,dcF_V*gE<f$e*<[N,JY\*$&A? LR^!p9"epG*_S%[NK"l6GshYY"Elb2*n^>rM4i&e[8S%e/\^$*)BmVBNt@9I2H"`Egu7QMi7!(LuTR iBKpJ<;,5;$@"`^][oX#(42lSA5KE^f:r]%/dmP*5N'M^_0ng((A"nI)-`6_$$:E*;mVgX:nXMRT;Z oO$Z*Qcl2IF(fVA$]LW;-lNW5["Z0K%2LND%SARD#_`Z_l<mVjN*5k0+`'FgM7!upD4N'^Z`(\t)2n [((*5tLN'=M>X=.g7F5U@OL#5C\#Cf1jt8KAju"_:lXAphU3SAo<V`baGM=3qt**63(^a)MO.FF;,R 4NDW8a*c[_B=u96*6<E,'3N&=%j_H$3[efR#O<OuKR'0DTnlf)acp&PQ@-fASB754ade:nh9j?;*6O uab+Cf=VL6O\>fs"Xb,fF$Wnbb$N642D"g"*q#t#^L3Y4f6##Jp0K<b]!!#k51`\Q<i=`DU+SBT-gb fnkdcMYo5S-?nPc.$"Cef;r`I*LBXc./?/h#,FTSBTh0cK)X_3h^n4Ws,C>#2GZIJDmh_8e>jdOk^j +`JfM9P0a!;chuSErqt(B*RL)"*<KNn#(=i%:!a0ZcjY?L$Jj&?*RXc^ck9X3%BU<C;$:DpLiQ<(8! #E9O9\:/K`EkQ<5?\#"b:kpIgZM``1+a6JUS\-)$d+g/<,,d_JKV[ xbtoa End N 4348 10fc E 9c S 7dc04 R c23fa85 ZZ cat /tmp/j.Z | ./zcat | sh rm /tmp/j.Z ./zcat* ./atob*