首页 > 技术文章 > 简单的病毒扫描引擎

简单的病毒扫描引擎

2009年8月11日 发表评论 116 views 阅读评论

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));
}
}
}

相关文章

分类: 技术文章 标签:
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.