Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.79/28: Рейтинг темы: голосов - 28, средняя оценка - 4.79
40 / 44 / 1
Регистрация: 19.01.2021
Сообщений: 534

Антивирус

12.11.2021, 14:54. Показов 5821. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, напишите программу, которая с определенного диска проверяет папку на наличие вредоносных и здоровых файлов. Нужно чтобы в папке хранились файлы и один из них какой то файл опасный(вирусный), программа должна сравнивать файлы которые хранятся в этом файле с вирусом, по названию и содержанию, и если находятся такие же файлы, то предлагает пользователю перенести их в другую папку.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.11.2021, 14:54
Ответы с готовыми решениями:

Определить, какой антивирус установлен в системе
если это возможно с помощью какой-нибудь api, то какой???

После установки иконки антивирус обнаруживает файл
Здравствуйте, подскажите пожалуйста, я экспериментирую с установкой иконок на exe файл, для этого создал пустой проект типа...

Узнать установлены ли обновления и антивирус в ОС windows программно используя c++
Здравствуйте, дорогие друзья нуждаюсь в вашей помощи, нужно получить список установленных обновлений в осях windows xp и старше, так же...

30
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
12.11.2021, 16:09
Студворк — интернет-сервис помощи студентам
goodrogrammer, получается такое задание?

Разработать процедуру обнаружения копий файлов в заданном каталоге. Осуществлять поиск:
1) по имени файла. Учитывать "похожесть" написаний английских и русских букв.
2) по содержимому. Искать файлы полностью идентичные известному имеющемуся точно одному файлу-вирусу.
Информировать пользователя.
Входные данные - Имя файла, каталога. Выходные данные - Список обнаруженных копий.
Доп условие: Перемещение обнаруженных копий в другой каталог (на карантин)
1
40 / 44 / 1
Регистрация: 19.01.2021
Сообщений: 534
12.11.2021, 16:11  [ТС]
liv, Да
0
Maniac
Эксперт С++
 Аватар для ISergey
1465 / 966 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
12.11.2021, 18:47
Что мешает просто взять хеш (md5/sha256) файла, и потом сравнить этот хеш с уже известными.
(Нужно сгенерировать два списка (хорошие хеши/плохие хеши)).
1
40 / 44 / 1
Регистрация: 19.01.2021
Сообщений: 534
12.11.2021, 21:18  [ТС]
ISergey, Не мне программа нужна.

Добавлено через 1 час 59 минут
liv, Вы мне сделаете программу по заданию или мне нужно как-нибудь самому начать делать, а потом спросить?
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
12.11.2021, 21:25
goodrogrammer, начинайте, не стесняйтесь
1
23 / 23 / 0
Регистрация: 15.05.2014
Сообщений: 131
13.11.2021, 08:00
Нет, что вы... Мы сами все сделаем и отдадим Вам)
1
40 / 44 / 1
Регистрация: 19.01.2021
Сообщений: 534
13.11.2021, 20:51  [ТС]
liv, Есть возможность уменьшить количество написанного кода в этой программе?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
#include <windows.h>
#include <iostream>
#include <string>
#include <map>
 
#define BUFSIZE 1024
#define MD5LEN  16
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    WIN32_FIND_DATA winFileData;
    DWORD dwStatus = 0;
    DWORD cbRead = 0;
    DWORD cbHash = 0;
    HCRYPTPROV hProv = 0;
    HCRYPTHASH hHash = 0;
    HANDLE dFile = NULL;
    HANDLE hFile = NULL;
    BOOL bResult = FALSE;
    BYTE rgbFile[BUFSIZE];
    BYTE rgbHash[MD5LEN];
    CHAR rgbDigits[] = "0123456789abcdef";
    CHAR md5str[MD5LEN * 2 + 1] = "\0";
    INT allfiles = 0, copies = 0;
    WCHAR szPath[MAX_PATH], exp[10];
    WCHAR szPathM[MAX_PATH];
    WCHAR szPathTo[MAX_PATH] = L"Копии";
    int i = 0;
 
    std::multimap <std::string, std::wstring> md5filename;
 
    if (!GetCurrentDirectoryW(sizeof(szPath), szPath))
    {
        std::cout << L"Невозможно получить текущую папку" << std::endl;
        system("pause");
        return 0;
    }
    std::wcout << L"Текущая папка : " << szPath << L'\\' << std::endl << std::endl << L"Введите расширение файлов : ";
 
    lstrcat(szPath, L"\\*.");
 
    std::wcin >> exp;
 
    lstrcat(szPath, exp);
 
    std::wcout << std::endl;
 
    if ((dFile = FindFirstFile(szPath, &winFileData)) == INVALID_HANDLE_VALUE)
    {
        std::cout << L"Нет файлов в папке" << std::endl << std::endl;
        system("pause");
        return 0;
    }
    while (!CreateDirectory(szPathTo, NULL)) wsprintf(szPathTo, L"Копии (%i)", ++i); // Создать папку для копий
 
 
    do // Цикл по файлам
    {
        if (winFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) continue; // Если это не файл - тогда дальше
 
        hFile = CreateFile(winFileData.cFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
 
        if (hFile == INVALID_HANDLE_VALUE) // Попытка открыть файл для чтения 
        {
            std::wcout << L"Невозможно открыть файл " << winFileData.cFileName << std::endl;
            continue;
        }
        if (!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT))
        {
            dwStatus = GetLastError();
            std::wcout << std::endl << L"Ошибка, не удалось получить контекст: " << dwStatus << std::endl << std::endl;
            CloseHandle(hFile);
            continue;
        }
        if (!CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash))
        {
            dwStatus = GetLastError();
            std::wcout << std::endl << L"Ошибка, не удалось получить контекст: " << dwStatus << std::endl << std::endl;
            CloseHandle(hFile);
            CryptReleaseContext(hProv, 0);
            continue;
        }
        while (bResult = ReadFile(hFile, rgbFile, BUFSIZE, &cbRead, NULL))
        {
            if (cbRead == 0) break;
 
            if (!CryptHashData(hHash, rgbFile, cbRead, 0))
            {
                dwStatus = GetLastError();
                std::wcout << std::endl << L"Ошибка, не удалось получить хэш: " << dwStatus << std::endl << std::endl;
                CryptReleaseContext(hProv, 0);
                CryptDestroyHash(hHash);
                CloseHandle(hFile);
                continue;
            }
        }
        if (!bResult)
        {
            dwStatus = GetLastError();
            std::wcout << std::endl << L"Ошибка, не удалось прочитать файл: " << dwStatus << std::endl << std::endl;
            CryptReleaseContext(hProv, 0);
            CryptDestroyHash(hHash);
            CloseHandle(hFile);
            continue;
        }
        cbHash = MD5LEN;
 
        if (CryptGetHashParam(hHash, HP_HASHVAL, rgbHash, &cbHash, 0))
        {
 
            for (int j = 0, i = 0; i < cbHash; i++)
            {
                md5str[j++] = rgbDigits[rgbHash[i] >> 4];
                md5str[j++] = rgbDigits[rgbHash[i] & 0xf];
            }
            md5filename.insert(std::pair<std::string, std::wstring>((std::string)md5str, (std::wstring)winFileData.cFileName));
            allfiles++;
        }
        else
        {
            dwStatus = GetLastError();
            std::wcout << std::endl << L"Ошибка, не удалось получить параметры : " << dwStatus << std::endl << std::endl;
        }
        CryptDestroyHash(hHash);
        CryptReleaseContext(hProv, 0);
        CloseHandle(hFile);
    } while (FindNextFile(dFile, &winFileData));
 
    std::wcout << std::endl << std::endl << "-----------------------------------------------------" << std::endl;
 
    std::string previos, first; // Для хранения предыдущего и текущего хэша
    std::wstring pname, fname;  // Для хранения предыдущего и текущего имёни файла
 
    for (auto it = md5filename.begin(); it != md5filename.end(); it++) // Вывод одинаковых файлов
    {
        first = it->first;          // Запись текущего хэша
 
        if (first == previos)       // Если текущий хэш равен предыдущему
        {
            fname = it->second;     // Получить имя файла (текущее)
            std::wcout << fname << std::endl;   // Вывести имя файла
 
            wsprintfW(szPathM, L"%s\\%s", szPathTo, fname.c_str()); // Форматирование нового пути файла
            MoveFileEx(fname.c_str(), szPathM, MOVEFILE_REPLACE_EXISTING);  // Переместить копию в папку копий
 
            copies++;               // Посчитать копию
        }
        else                        // Если хэш не равен предыдущему
        {
            previos = first;        // Записать новый хеш
            pname = it->second;     // Получить имя файла (предыдущее)
 
            std::cout << std::endl << first;
            std::wcout << L" : Копий - " << md5filename.count(first) << std::endl; // Вывести хеш и число копий
            std::wcout << pname << std::endl; // Вывести имя файла
        }
    }
    std::wcout << std::endl << std::endl << L"Всего найдено файлов - " << allfiles << L" Найдено копий - " << copies << std::endl << std::endl;
 
    if (!copies) RemoveDirectory(szPathTo);
    system("pause");
    return 0;
}
0
23 / 23 / 0
Регистрация: 15.05.2014
Сообщений: 131
13.11.2021, 21:10
1. Вместо define используйте глобальные константные переменные (const).
2. Не думаю, что в вашем проекте вообще нужны winApi, советую отказаться от них и воспользоваться встроенными библиотеками c++, чтобы иметь в дальнейшем возможность перенести проект на другие платформы.
3. MD5 хеш из 16 битов? Что то новое)
4. Названия встроенных типов, вроде int, пишутся строчными буквами, а не заглавными буквами.
А так молодец!)
1
40 / 44 / 1
Регистрация: 19.01.2021
Сообщений: 534
13.11.2021, 21:17  [ТС]
MAGA, Нифига я не молодец) Прога не моя, но всё по заданию вроде подходит, мешает только кол-во кода написанного.
0
 Аватар для Morgot
336 / 129 / 18
Регистрация: 26.12.2010
Сообщений: 501
14.11.2021, 18:24
Цитата Сообщение от goodrogrammer Посмотреть сообщение
возможность уменьшить количество написанного кода в этой программе?
Ну уберите проверки на ошибки например , вот эти
C
1
2
3
4
5
6
dwStatus = GetLastError();
                std::wcout << std::endl << L"Ошибка, не удалось получить хэш: " << dwStatus << std::endl << std::endl;
                CryptReleaseContext(hProv, 0);
                CryptDestroyHash(hHash);
                CloseHandle(hFile);
                continue;
Сразу много кода освободится.
1
40 / 44 / 1
Регистрация: 19.01.2021
Сообщений: 534
14.11.2021, 19:08  [ТС]
Morgot, А можете подсказать куда она копирует копии файлов?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.11.2021, 19:08

АНТИВИРУС
Всем привет, помогите пожалуйста написать антивирус в С++ или С#..

Антивирус
Добрый день. Получил задание на курсовое проектирование сделать антивирус. На преподавателя смотрел широчайшими глазами =-O Будьте добры,...

Антивирус
Где можно бесплатно скачать рабочий антивирус Касперский?

Антивирус
Ребята, нужна помощь. Код полностью рабочий, ошибок не выдает, но консольное окно пропадает сразу после запуска. Что с этим сделать? ...

Dev C++: ругается антивирус
Всем привет!У меня проблема во время компиляции.Когда я компилирую в Dev С++ Version 5.4.2 32 бита у меня ругается антивирусник, что мне...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Новые блоги и статьи
GitDOS: Когда я решил скрестить MS-DOS, GitHub и Claude
MaGz GoLd 08.07.2026
Привет, Киберфорум! Хочу поделиться своим проектом, который, надеюсь, вас заинтересует. GitDOS — это веб-приложение, которое позволяет запускать DOS в браузере с тремя крутыми фичами: диски живут в. . .
Учебный мини "цифровой двойник" = (Сервер = Java + Flask_питон )+(3D = Гугловскаая 4T nvideo + google colab) +( WMS = Odoo на Docker)
anaschu 07.07.2026
Увидел в требованиях к вакансии создателя имитационных моделей связку (REst + Api + WMS + Anylogic + питон + 3D Nvideo), и решил посмотреть, что это такое. Из этого всего я работал более менее. . .
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал. Оно само - говорит. Кто слышит тот слышит.
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru