[comp.sources.misc] Submission for comp-sources-misc

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*