Проверка на наличие сигнатур вирусов в двоичном файле больше, чем фактический вирус - PullRequest
1 голос
/ 05 мая 2019

Я пытаюсь проверить двоичный файл на наличие сигнатур вирусов, но он больше, чем вирус. Поэтому я попытался использовать цикл, чтобы начать ближе к 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...