简单的病毒扫描引擎
void FindVirusFirst(CMyDlg *pDlg,char *FileName,char *FilePath)
{
char AVPath[256];
CString TempName;
char buf[10]={0};
char Temp[512];
char troname[32],tzm[32];
int offaddr;GetCurrentDirectory(MAX_PATH,AVPath);
strcat(AVPath,"\\av.db");ifstream in(AVPath,ios::in);
for(int i=0;i<256;i++) { in>>Temp;
if(Temp==NULL||strlen(Temp)==0)
break;
DecryptData((unsigned char*)Temp,strlen(Temp),12);
TempName=Temp;offaddr=atoi(TempName.Left(TempName.Find("|")));
TempName.Delete(0,TempName.Find("|")+1);
strcpy(tzm,TempName.Left(TempName.Find("|")));
TempName.Delete(0,TempName.Find("|")+1);strcpy(troname,TempName);
HANDLE hfile = CreateFile(FilePath,GENERIC_READ,0,NULL,OPEN_ALWAYS,0,NULL);
SetFilePointer(hfile,offaddr,0,FILE_BEGIN);
DWORD readsize;
ReadFile(hfile,buf,10,&readsize,NULL);
if(Search(buf,tzm)>=0)
{
int n=pDlg->m_trojan.GetItemCount();
pDlg->m_trojan.InsertItem(n,troname);
pDlg->m_trojan.SetItemText(n,1,"病毒/木马");
pDlg->m_trojan.SetItemText(n,2,"删除");
pDlg->m_trojan.SetItemText(n,3,FilePath);
pDlg->m_trojan.SetItemText(n,4,FileName);
CloseHandle(hfile);
break;
}Temp[0]='\0';
CloseHandle(hfile);
}
in.close();
}void ScanFile(LPVOID sDlg,char *FilePath,bool IsDeepScan)
{
CMyDlg *pDlg=(CMyDlg *)sDlg;
CFileFind file;
BOOL bContinue = file.FindFile(FilePath);
if(IsDeepScan)
{
CFileFind file;
BOOL bContinue = file.FindFile(FilePath);
while(bContinue)
{
bContinue = file.FindNextFile();
if(file.IsDots())
continue;
if(file.IsDirectory())
{
wsprintf(FilePath,"%s\\*.*",file.GetFilePath());
ScanFile(sDlg,FilePath,1);//递归子目录查杀
continue;
}
else if (file.IsSystem() || file.IsHidden())
XFindVirusFirst(pDlg,file.GetFileName().GetBuffer(0),file.GetFilePath().GetBuffer(0),1);
else
XFindVirusFirst(pDlg,file.GetFileName().GetBuffer(0),file.GetFilePath().GetBuffer(0),0);pDlg->SetLog(file.GetFilePath().GetBuffer(0));
}
}
else
{
while(bContinue)
{
bContinue = file.FindNextFile();
if(file.IsDots())
continue;
else if (file.IsDirectory())
{
wsprintf(FilePath,"%s\\*.*",file.GetFilePath());
ScanFile(sDlg,FilePath,0);//递归子目录查杀
continue;
}
else if(file.GetLength() < 1024 ) continue; FindVirusFirst(pDlg,file.GetFileName().GetBuffer(0),file.GetFilePath().GetBuffer(0)); pDlg->SetLog(file.GetFilePath().GetBuffer(0));
}
}
}
姓名:Chinadu
近期评论