看了半天,也不知道发在哪里合适,不知道发这行不行
现在有一程序,只能实现查毒功能,希望大神帮看下,怎么实现杀毒功能,需要加什么指令我怎么就调不出来了呢 智商捉急 多谢 多谢啦 !!!
#include <windows.h>
#include <stdio.h>
#include <conio.h>
bool scanvir(const char *filename,long offset,int length,void *vir);
int viewfiles(char *directory,long offset,int length,void *vir);
int main(void)
{
unsigned char vir[]=
{0x4A,0x75,0x6D,0x55,0x70,0x85,0x0B,0x73,0x4E,0x85,0x02,0x54,0x69,0x9A,0x07,0xD0,
0xA1,0x4A,0x6F,0x00,0x62,0x61,0x6B,0x61,0x33,0x00,0x53,0x4F,0x0B,0x46,0x54,0x57,
0x41,0x55,0x11,0x5C,0x6A,0x9C,0x29,0x5C,0xE3,0x97,0x5C,0x0F,0x7F,0x20,0xF0,0xB6};
char directory[MAX_PATH];
int count;
printf(" ============================================\n");
printf(" 震荡波病毒查找工具 \n");
printf(" ============================================\n");
printf("\n");
printf("请输入待检查分区目录名\n");
printf("\n");
printf("提醒:分区后加':',目录路径输入完整\n");
printf("\n");
printf("请输入:");
gets(directory);
printf("\n");
printf("查找病毒开始,请耐心等待......\n");
printf("\n");
count=viewfiles(directory,0x32A0,0x30,vir);
printf("\n");
if(count>0)
printf("这次检查共在目录里面发现%d个病毒.\n",count);
else
printf("%s中安全,未发现病毒.\n",directory);
getch();
}
bool scanvir(const char *filename,long offset,int length,void *vir)
{
FILE *fp;
char *rvir;
bool b=false;
fp=fopen(filename,"rb");
if(fp!=NULL)
{
fseek(fp,0,SEEK_END);
if(offset+length<=ftell(fp))
{
fseek(fp,offset,SEEK_SET);
rvir=new char[length];
fread(rvir,length,1,fp);
b=memcmp(vir,rvir,length)==0;
delete[] rvir;
}
fclose(fp);
}
return b;
}
int viewfiles(char *directory,long offset,int length,void *vir)
//遍历文件函数,获取文件路径
{
WIN32_FIND_DATA fdFindData;
HANDLE hFind;
char *filename;
int count=0;
BOOL done;
filename=new char[strlen(directory)+5];
strcpy(filename,directory);
strcat(filename,"\\*.*");
hFind=FindFirstFile(filename,&fdFindData);
delete[] filename;
done=hFind!=INVALID_HANDLE_VALUE;
while(done)
{
if(strcmp(fdFindData.cFileName,".") && strcmp(fdFindData.cFileName,".."))
{
filename=new char[strlen(directory)+strlen(fdFindData.cFileName)+2];
strcpy(filename,directory);
strcat(filename,"\\");
strcat(filename,fdFindData.cFileName);
if((fdFindData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)==FILE_ATTRIBUTE_DIRECTORY)
count+=viewfiles(filename,offset,length,vir);
else
if(scanvir(filename,offset,length,vir))
{
count++;
printf("警告!发现病毒。病毒路径%s\n",filename);
}
delete[] filename;
}
done=FindNextFile(hFind,&fdFindData);
}
FindClose(hFind);
return(count);
}
|