干掉“W32.Sobig.F@mm”病毒
唉,等我把程序做好,结果发现诺顿的网站说,9月9病毒就不搞事了。
我测试的邮件系统是qmail + vpopmail
我测试的操作系统是freebsd 4.8
要安装 http://www.inter7.com/eps/eps-1.2.tar.gz
tar zxf eps-1.2.tar.gz
cd eps-1.2
make && make install
我的程序代码
,也是参照eps的howto改的,我对C不熟,搞了快5个小时了,就这一点程序
哪位对C熟悉,改吧,我无所谓,对大家有帮助就行了
哦,还参考过一位网友的程序,
感谢‘zenz.hu 真兄’不知道是否还在卖‘小龙虾’(MSN语)
假设你把源码保存为test.c,这样编译
gcc -g -I/usr/include/eps -L/usr/lib -o test test.c -leps
编译成功后,假设你把病毒邮件的内容保存为 mail.msg,测试方法
cat mail.msg | ./test
echo $?
如果返回值是99,代表找到过滤内容,邮件系统将会删除此邮件。
应用的邮件系统中去
假设你的邮件目录放在
/usr/local/vpopmail/domains/demo.com/ 目录下
修改目录下的 .qmail-default 文件
在第一行增加内容,修改后的模样
[code:1:347a89cbeb]
| /usr/local/vpopmail/bin/check_vir
| /usr/local/vpopmail/bin/vdelivermail '' bounce-no-mailbox
[/code:1:347a89cbeb]
再把test程序拷到/usr/local/vpopmail/bin目录下,并设置为可执行
cp test /usr/local/vpopmail/bin/check_vir
chmod 755 /usr/local/vpopmail/bin/check_vir
应用后,经常运行一下 dmesg 看看 check_vir 程序有没有dump掉的信息
如果有,就是程序可能有问题了,自己改改看先!不行告诉我一下。
(我还不知道,如何把检查的邮件另存一份作为出错后的调试,高手帮忙啊)
如果你有改进请联系我哟,
MSN:wienne@msn.com
程序源码
[code:1:347a89cbeb]
#include
#include
#include
char *sub[]={
"Re: Movie",
"Re: Application",
"Your application",
"Your details",
"That movie",
"Thank you!",
"Re: Approved",
"Re: Wicked screensaver",
NULL
};
int main(int argc, char *argv[])
{
int i, fd = 0, ret = 0;
int counte = 0, max = 0;
unsigned char *l = NULL;
struct mime_t *m = NULL;
struct eps_t *eps = NULL;
struct header_t *h = NULL;
char *type[20],*var[20];
fd = 0;
eps = eps_begin(INTERFACE_STREAM, (int *)&fd);
本篇文章共3页,此页为首页 下一页
if (!eps)
return 1;
for (h = eps_next_header(eps); h; h = eps_next_header(eps)) {
if ((h->name) && (h->data))
{
//printf("[%s] = [%s]\n", h->name, h->data);
type[max] = h->name;
var[max] = h->data;
}
//printf("head mess num :%d\t [%s]\t<%s>\n",counte,type[max],var[max]);
max++;
}
while ( counte < max )
{
//printf("%d\t%s\t\n",counte,var[counte]);
//检查发件人的地址信息,如果此信息是空,删除此邮件
//大多数发件人是空的基本上都是垃圾邮件
if ( ! strcmp("From",type[counte]) )
{
if (strlen(var[counte]) == 0)
{
eps_header_free(eps);
eps_end(eps);
计算机教程干掉“W32.Sobig.F@mm”病毒来自www.itwen.comIT WEN计算机教程网
return 99;
}
}
//检查邮件的主题,如果包含了上面定义的主题内容,
//一个字,删!
if ( ! strcmp("Subject",type[counte]) )
{
for (i=0;sub[i];i++)
{
if ( strstr(var[counte],sub[i]) )
{
//printf("%s\n",var[counte]);
eps_header_free(eps);
eps_end(eps);
return 99;
}
}
}
counte++;
}
eps_header_free(eps);
eps_end(eps);
return 0;
/* printf("\n");
for (l = eps_next_line(eps); l; l = eps_next_line(eps))
//{
printf("%s\n", l);
// printf("\t\tbody mess num :%d\n",counte);
// counte++;
// }
printf("\n");
while((!(eps->u->b->eof)) && (eps->content_type & CON_MULTI)) {
ret = mime_init_stream(eps);
if (!ret)
本篇文章共3页,此页为第2 页 上一页 下一页
break;
for (h = mime_next_header(eps); h; h = mime_next_header(eps)) {
if ((h->name) && (h->data))
printf("[%s]=[%s]\n", h->name, h->data);
header_kill(h);
}
printf("\n");
for (l = mime_next_line(eps); l; l = mime_next_line(eps))
printf("%s\n", l);
}
eps_end(eps);
return 0;
*/
}
[/code:1:347a89cbeb]
例子邮件源码
[code:1:347a89cbeb]
Return-Path:
Delivered-To: wienne@msn.com
Received: ( qmail 21033 invoked from network); 5 Sep 2003 12:43:29 +0800
Received: from unknown (HELO wienne) (172.16.12.100)
by 172.16.1.10 with RC4-MD5 encrypted SMTP; 5 Sep 2003 12:43:29 +0800
From: sss
To: "wienne"
Subject: Re: Re: Movie
Date: Fri, 5 Sep 2003 12:42:58 +0800
Message-ID: <000201c37368$2e71d170$640c10ac@wienne>
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="----=_NextPart_000_0003_01C373AB.3C951170"
X-Priority: 3 (Normal)
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook, Build 10.0.4510
Importance: Normal
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165
This is a multi-part message in MIME format.
------=_NextPart_000_0003_01C373AB.3C951170
[/code:1:347a89cbeb]
gadfly 回复于:2003-09-05 16:06:21 哦,不错的方法。
在投递端针对每个域做过滤。
wienne 回复于:2003-09-05 16:05:40 就是检查邮件主题内容,没什么复杂的
哦,想起来了,我测试的系统是 4.6.2 不是4.8 ,估计也没问题
wienne 回复于:2003-09-06 17:52:00 程序有问题,具体错误在哪还不清楚
系统信息里有大量的core dump信息,有些病毒邮件并未过滤掉
请慎用
下周一有时间再改
redfox 回复于:2003-09-06 22:40:42 好啊,关注ing!
proftpd 回复于:2003-09-06 23:55:10 [quote:d75e950860="wienne"]程序有问题,具体错误在哪还不清楚
本篇文章共3页,此页为末页 上一页 首页
