Я пытаюсь проверить двоичный файл на наличие сигнатур вирусов, но он больше, чем вирус. Поэтому я попытался использовать цикл, чтобы начать ближе к EOF каждый цикл.
Я не знаю, правильно ли я использую fseek()
. Если я сравниваю сигнатуру вируса с самим собой, он работает, но если с файлом с сигнатурой, он не работает.
Также будет полезна любая помощь по просмотру списка файлов в папке.
//loop in main
FILE * log = fopen("C:\\Users\\משתמש\\Desktop\\log.txt", "a");
fprintf(log,"Anti-virus began! Welcome!\n\n");
fprintf(log,"folder to scan:\n");
fprintf(log, "%s\n",argv[2]);
fprintf(log,"virus signature:\n");
fprintf(log, "%s\n",argv[3]);
fprintf(log,"scanning option:\n");
fprintf(log, "%s\n\n\n", argv[1]);
fprintf(log, "results:\n\n");
for (int i = 0; i+size <=size+1; i++)
{
found = 0;
found = normalScan(file, virus, i, size, vsize);
if (found == 1)
{
fprintf(log, "%s infected!\n", argv[3]);
break;
}
}
if (found != 1)
{
fprintf(log, "%s not infected\n", argv[3]);
printf("%d", found);
}
//function for scanning
int normalScan(FILE * file,FILE* virus, int start,int size,int vsize)
{
int found = 0;
char* buffer = (char*)malloc((size + 1) * sizeof(char));
char* virusSig = (char*)malloc((vsize + 1) * sizeof(char));
if (start + vsize <= size)
{
buffer[size] = 0;
virusSig[vsize] = 0;
fseek(file, vsize, start + 1);
fread(buffer, 1, size, file);
fseek(virus, vsize, start + 1);
fread(virusSig, 1, vsize, virus);
int result = strcmp(buffer, virusSig);
if (result == 0)
{
printf("\nVirus was found in file\n");
printf("%s\n\n%s\n\n", buffer, virusSig);
found = 1;
}
else
{
found = -1;
}
}
if (found != 0)
{
free(virusSig);
free(buffer);
return found;
}
else
{
free(virusSig);
free(buffer);
return -1;
}
}