#include #include #include #include #include "base64.c" #define BUFSIZE 32768 #define STRSIZE 128 char buf[BUFSIZE+2+STRSIZE]; char buf2[BUFSIZE+2+STRSIZE]; char subject[STRSIZE+2]; char from[STRSIZE+2]; char to[STRSIZE+2]; char ctype[STRSIZE+2]; //#define DEFAULTHEADER "X-Shad-WormBounceID" char resultheader[STRSIZE+2]="X-Shad-WormBounceID"; char nospamheader[STRSIZE+2]="X-Shad-Nospam"; /* this function found somewhere on the Net, don't ask me where */ char *strcasestr(char *hailstack, char *needle) { register int lneed = strlen(needle); register int lhail = strlen(hailstack); register int i; for (i = 0; i < lhail; i++) if (!strncasecmp(hailstack + i, needle, lneed)) return hailstack + i; return NULL; } void strzero(char*s){bzero(s,STRSIZE+2);} void transtab(){int t;for(t=0;t254){snprintf(retmsg,255,"ZIPfile-overly-long-file-name:%i%s",namelen,txtbuf);return retmsg;} if(namelen<2)return "ZIPfile-suspiciously-short-file-name"; snprintf(fname,namelen+1,binbuf+0x1e); binfile=binbuf + 0x1e + namelen; // if(!strncmp(binfile,"MZ",2))return "ZIPfile-uncompressed-exefile"; // if(strstr(fname," ."))return "ZIPfile-filename-masking-attempt"; sp=strrchr(fname,'.');if(sp) {if(!strcmp(sp,".exe")){snprintf(retmsg,255,"ZIPfile-exefile-exe:%s%s",fname,txtbuf);return retmsg;} if(!strcmp(sp,".scr")){snprintf(retmsg,255,"ZIPfile-exefile-scr:%s%s",fname,txtbuf);return retmsg;} if(!strcmp(sp,".pif")){snprintf(retmsg,255,"ZIPfile-exefile-pif:%s%s",fname,txtbuf);return retmsg;} } if(sp=strstr(fname," .")){sp1=strstr(fname," ");if(sp1)sp1[1]=0; snprintf(retmsg,255,"ZIPfile-filename-masking-attempt:%s[...]%s%s",fname,sp+2,txtbuf);return retmsg;} if(!strncmp(binfile,"MZ",2)){snprintf(retmsg,255,"ZIPfile-uncompressed-exefile:%s%s",fname,txtbuf);return retmsg;} return signature; /* // DEBUG printf("Magic: %02x%02x%02x%02x\n",binbuf[0],binbuf[1],binbuf[2],binbuf[3]); printf("MadeBy: %02x\n",binbuf[4]); printf("Host OS: %02x\n",binbuf[5]); printf("Minver: %02x\n",binbuf[6]); printf("Tgt OS: %02x\n",binbuf[7]); printf("NameLen: %i %02x-%02x\n",namelen,binbuf[0x1a],binbuf[0x1b]); printf("Name: %s\n",fname); printf("File: %s\n",binfile); for(t=0;t<512;t++){printf("%c",binbuf[t]);} printf("\n"); exit(0);*/ } char*isMyDoom() { char*sp,*sp1,*sp2; /* UEsDBAoAAAAAA.....DKJx+eAFgAAABYAA */ // UEsDBBQAAAAIANSBCTE3Aq1SCQIAAD4EAAAKAAAAcHJpY2UuaHRtbI1U34+aQBB+v+T+hzke sp=isinbody("\n\nUEsDBAoAA");if(!sp) {sp=isinbody("\n\nUEsDBBQAA");if(!sp)return 0;} sp+=2; {sp1=strchr(sp+3,'\n');if(sp1)if(sp1-sp<20)return "suspiciously-short-first-MIME-line";} // if(!strncmp(sp+18,"",16))return "someotherworm"; // if(!strncmp(sp+18,"",16))return "someotherworm"; // if(!strncmp(sp+18,"",16))return "someotherworm"; // if(!strncmp(sp+18,"",16))return "someotherworm"; // if(!strncmp(sp+18,"",16))return "someotherworm"; // if(!strncmp(sp+18,"",16))return "someotherworm"; // if(!strncmp(sp+18,"",16))return "someotherworm"; // if(!strncmp(sp+18,"",16))return "someotherworm"; //if(!strncmp(sp+18,"cADhaG0AAGhtAABw",16))return "someotherworm-auto-040331-0235"; // UEsDBAoAAAAAAA8Afz B+cADhaG0AAGhtAA BwAAAAZGF0YS5lbWwgICAgICAgICAgICAgICAg // UEsDBAoAAAAAAONGdz CjiB3egHMAAIBzAA BTAAAAZG9jdW1lbnQudHh0ICAgICAgICAgICAg // UEsDBAoAAQAAAABWZD CIBRn3pVUAAJlVAA AJAAAAaXJkc3AuZXhlxNha4wnhlpMp4atcyjOw // UEsDBAoAAQAAAMCiYj Cf4kJRDDAAAAAwAA ALAAAAd2VvYnFtaS5leGVIPkHL8LzqeKqX5MeE // UEsDBAoAAQAAAKANYj AEzD82yFIAALxSAA AMAAAAcXhreXNibHQuc2NyVpqaD2qe7C5n+Fdc // UEsDBAoAAQAAAAB1Yj AqGFhwj1UAAINVAA AKAAAAcWRoc2NlLnNjcmb+UbdN3DI9/xY+2KH2 // UEsDBAoAAQAAACBfYj DuLGTOw1EAALdRAA AJAAAAb21nY2guZXhl0ZUFPnqYANPZq8K+eQ7m // UEsDBAoAAAAAAKBVYT Ad5PsPtUMAALVDAA AMAAAAZG9keXJlaWguZXhlTVqQAAMAAAAEAAAA // UEsDBAoAAAAAAIBOYT AaxVJJAD4AAAA+AA AMAAAAcWh2bnN3dG4uZXhlTVqQAAMAAAAEAAAA // UEsDBAoAAAAAAABPYT Au8/9kfEcAAHxHAA AMAAAAdmppd2pzZ3guZXhlTVqQAAMAAAAEAAAA // UEsDBAoAAAAAAMBWXD BKH8ydAD4AAAA+AA AMAAAAbWN4eWFscXAuZXhlTVqQAAMAAAAEAAAA // UEsDBAoAAAAAAG9XWz Be0x3W7YcAAO2HAA B6AAAAcGF5cGFsLnBuZyAgICAgICAgICAgICAgICAg // UEsDBAoAAAAAAKghWz CudsW6AF4AAABeAA ARAAAAbW9vbmxpZ2h0LnR4dC5leGVNWpAAAwAA // UEsDBAoAAAAAAOM7Wj BiZMYWCWMAAAljAA ANAAAAeW91cnMudHh0LmNvbU1akAADAAAABAAA // UEsDBAoAAAAAAAUDWj CA/rWy04sAANOLAA CfAAAAbGlzdC50eHQgICAgICAgICAgICAgICAgICAg // UEsDBAoAAAAAAHh/WD DhHKqS7YcAAO2HAA BwAAAAb2JqZWN0LnR4dCAgICAgICAgICAgICAgICAg // UEsDBAoAAAAAAJh6+C 7KJx+eAFgAAABYAA BWAAAAZG9jdW1lbnQudHh0ICAgICAgICAgICAgICAg // UEsDBAoAAAAAAJd2Uj BdbrAiAFYAAABWAA AKAAAAZGlubmVyLmV4ZU1akAADAAAABAAAAP// // if(isinbody("\n\nUEsDBAoAAAAAABN7SD ACQHPJRl8AAEZfAA AHAAAAZG9jLmJhdE1akAADAAAABAAAAP//AAC4AAAA // if(isinbody("\n\nUEsDBAoAAAAAABo6Qj AE2y2pAVgAAAFYAA BVAAAAbWVzc2FnZS5kb2MgICAgICAgICAgICAgICAg // if(isinbody("\n\nUEsDBAoAAAAAANqFPT DnPgKfcHgAAHB4AA BRAAAAZG9jLmh0bSAgICAgICAgICAgICAgICAgICAg"))return "MyDoom.B"; // if(isinbody("\n\nUEsDBAoAAAAAADcQQT DKJx+eAFgAAABYAA BSAAAAYm9keS5odG0gICAgICAgICAgICAgICAgICAg"))return "MyDoom.B"; // if(isinbody("\n\nUEsDBAoAAAAAANAKQT DIfsFoAGQAAABkAA AKAAAAcmVhZG1lLnBpZk1akAADAAAABAAAAP//AAC4"))return "MyDoom.B"; // UEsDBAoAAAAIAMBRRD QjK0N+9U0AANpKAA ALAAAAemhuaHBvdC5leGUALgDR/01aAAABAAAA sp2=isinbody("filename=\"");if(sp2) {int w=0; sp1=strchr(sp2,'\n');if(sp1){ sp1[0]=0; if(strchr(sp2,'@'))if(strstr(sp2,".zip\""))w=1; sp1[0]='\n'; if(w)return "MyDoom.M"; }} #include "signatures-auto.c" return 0; } int isExe() { if(isinbody("\n\nTVoAAAEAA"))return 1; if(isinbody("\n\nTVoAAAAAA"))return 1; if(isinbody("\n\nTVoAAAQAA"))return 1; if(isinbody("\n\nTVoAACQAA"))return 1; if(isinbody("\n\nTVoAAD8AA"))return 1; if(isinbody("\n\nTVoFAQUAA"))return 1; if(isinbody("\n\nTVoIARMAA"))return 1; if(isinbody("\n\nTVouARsAA"))return 1; if(isinbody("\n\nTVpAALQAc"))return 1; if(isinbody("\n\nTVpQAAIAA"))return 1; if(isinbody("\n\nTVpyAXkAX"))return 1; if(isinbody("\n\nTVqQAAMAA"))return 1; if(isinbody("\n\nTVqTAAEAA"))return 1; if(isinbody("\n\nTVrmAU4AA"))return 1; if(isinbody("\n\nTVrhARwAk"))return 1; if(isinbody("\n\nTVqQAAMAA"))return 1; if(isinbody("\n\nTVqQAAMAA"))return 1; if(isinbody("\n\n183GmgAA"))return 1; // Windows Metafile file //TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA //TVoAACQAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA //TVoAAAEAAAACAAAA//8AAEAAAAAAAAAAQAAAAAAAAAC0TM0hAAAAAAAAAAAAAAAAAAAAAAAA return 0; } char*isWorm() { char*sp; sp=isZipBasedWorm();if(sp)return sp; if(strcmpp(from,"james@mauriceward.c"))return "james@-worm"; if(strcmpp(from,"admin@mauriceward.c"))return "admin@-worm"; if(strcmpp(from,"big@boss.com"))return "big@boss.com-worm"; if(isinbody("Archive password: \nFebruary price"))return "price.worm1"; if(strcmpp(subject,"\nFebruary price"))return "price.worm2"; // if(strcmpp(subject,""))return "Sober.Q [Bspam26"; // if(strcmpp(subject,""))return "Sober.Q spam27"; // if(strcmpp(subject,""))return "Sober.Q spam28"; // if(strcmpp(subject,""))return "Sober.Q spam29"; // if(strcmpp(subject,""))return "Sober.Q spam30"; // if(strcmpp(subject,"MDaemon Warning - Virus Found"))if(isinbody("\nX-MDaemon-Deliver-To:"))return "MDaemon"; if(isinbody("This message has been scanned by MDaemon AntiVirus and was found to"))if(isinbody("\nX-MDaemon-Deliver-To:"))return "MDaemon"; if(strcmpp(subject,"VIRUS IN YOUR MAIL"))if(isinbody("\nX-Virus-Scanned:"))return "AMaViS"; if(strcmpp(subject,"VIRUS ALERT:"))if(isinbody("\nX-Mailer: OdeiaVir"))return "VirusWall"; if(strcmpp(from,"\"MailScanner\" \n\n // --=_de403dd1f6ebf8d405aa509eed73067b\nContent-Type: image/gif if(sp=isinbody("Content-Type: text/html; charset=\"ISO-8859-1\"\n" "Content-Transfer-Encoding: quoted-printable\n\n" "Zip password: Zip password: Password - Password -- sets header to add if match\n" ); } int main(int argc,char*argv[]) { FILE*f; char*sp; char result[STRSIZE+2]=""; char nospam[STRSIZE+2]=""; int readsize=0; int o_passthru=1; // act as filter, pipe the message through - default int o_classify=0; // classify the message, output only int o_resultcode=0; // use return code 1 to indicate worm int o_syslog=0; // log match to syslog f=stdin; // {int t; char s[256]; for(t=1;t