Исходник C++ desktop antivirus static scanner.

Модератор форума
Участник
Участник
Статус
Оффлайн
Регистрация
26 Янв 2020
Сообщения
378
Реакции
157
Приветствую, многоуважаемые пользователи yougame, посещающие данный раздел. Предоставляю вашему вниманию собственноручно написанный антивирус на с++. Идейным вдохновителем послужил opensource пример движка для обнаружения угроз - yara. Примечателен он тем, что его база данных состоит из своеобразных "правил", задающихся при помощи собственного "языка". Я решил повторить наработки этого проекта, воплотив его уже в полноценное приложение для сканирования системы.
Если вас заинтересовало развитие данного проекта, пишите мне по всем вопросам в указанные в профиле контакты. Буду рад сотрудничеству;)
Используемые библиотеки и особенности:
gui - ImGui
rule parser - flex / bison.
multi-thread scanning system with uniform distribution of tasks across cores.

GITHUB:
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
без негатива, конечно, но

слишком громко сказано

воплотив его уже в полноценное приложение для сканирования системы
зачем? уже реализовано сто тысяч раз, к тому же значительно лучше, чем у тебя
https://github.com/Neo23x0/Loki как пример
 
без негатива, конечно, но


слишком громко сказано


зачем? уже реализовано сто тысяч раз, к тому же значительно лучше, чем у тебя
Пожалуйста, авторизуйтесь для просмотра ссылки.
как пример
решил попрактиковаться в написании подобных приложений) В любом случае, как pet проект - имеет место быть
 
Приветствую, многоуважаемые пользователи yougame, посещающие данный раздел. Предоставляю вашему вниманию собственноручно написанный антивирус на с++. Идейным вдохновителем послужил opensource пример движка для обнаружения угроз - yara. Примечателен он тем, что его база данных состоит из своеобразных "правил", задающихся при помощи собственного "языка". Я решил повторить наработки этого проекта, воплотив его уже в полноценное приложение для сканирования системы.
Если вас заинтересовало развитие данного проекта, пишите мне по всем вопросам в указанные в профиле контакты. Буду рад сотрудничеству;)
Используемые библиотеки и особенности:
gui - ImGui
rule parser - flex / bison.
multi-thread scanning system with uniform distribution of tasks across cores.

GITHUB:
Пожалуйста, авторизуйтесь для просмотра ссылки.
Мне хочется у тебя спросить. Вот есть файл
Пожалуйста, авторизуйтесь для просмотра ссылки.
.
Там у тебя написаны такие строки
C++:
Expand Collapse Copy
static std::mutex g_lock;

#define MUTEX_LOCK g_lock.lock()
#define MUTEX_UNLOCK g_lock.unlock()
А далее мы встречаем такой код
C++:
Expand Collapse Copy
if ( is_executable( path ) )
    {
        MUTEX_LOCK;
        ++g_file_scanner->target_ammount;
        g_file_scanner->targets_for_scan.emplace_back( path );
        MUTEX_UNLOCK;
    }
C++:
Expand Collapse Copy
    for ( auto& rule : Melhior::g_database->m_rules )
    {
        if ( catch_target( file, file_size, rule ) )
        {
            //fuck off
            UnmapViewOfFile( file );
            CloseHandle( hMap );
            CloseHandle( h_file );
            MUTEX_LOCK;
            --g_file_scanner->target_ammount;
            MUTEX_UNLOCK;

            std::filesystem::path p( path_to_target );
            MUTEX_LOCK;
            g_quarantine->handle_infected( p.filename( ).string( ), path_to_target, rule.name( ) );
            ++g_file_scanner->valid_targets;
            MUTEX_UNLOCK;
            break;
        }
    }
Я не очень хотел бы разбираться, как именно оно работает и правда ли просто очень везёт, но...
Насколько я понимаю, то ты не ожидаешь того, что в какой-то момент кто-то случайно два раза залокает один и тот-же мьютекс... Я бы использовал здесь юник лок или лок гвард
ну или просто wait-free, вместо всех мьютексов, ибо кому нужны блокировки вообще... хотя в самом деле, вероятно, здесь они необходимы
А что ты думаешь насчёт этого? Прав ли я?
 
Мне хочется у тебя спросить. Вот есть файл
Пожалуйста, авторизуйтесь для просмотра ссылки.
.
Там у тебя написаны такие строки
C++:
Expand Collapse Copy
static std::mutex g_lock;

#define MUTEX_LOCK g_lock.lock()
#define MUTEX_UNLOCK g_lock.unlock()
А далее мы встречаем такой код
C++:
Expand Collapse Copy
if ( is_executable( path ) )
    {
        MUTEX_LOCK;
        ++g_file_scanner->target_ammount;
        g_file_scanner->targets_for_scan.emplace_back( path );
        MUTEX_UNLOCK;
    }
C++:
Expand Collapse Copy
    for ( auto& rule : Melhior::g_database->m_rules )
    {
        if ( catch_target( file, file_size, rule ) )
        {
            //fuck off
            UnmapViewOfFile( file );
            CloseHandle( hMap );
            CloseHandle( h_file );
            MUTEX_LOCK;
            --g_file_scanner->target_ammount;
            MUTEX_UNLOCK;

            std::filesystem::path p( path_to_target );
            MUTEX_LOCK;
            g_quarantine->handle_infected( p.filename( ).string( ), path_to_target, rule.name( ) );
            ++g_file_scanner->valid_targets;
            MUTEX_UNLOCK;
            break;
        }
    }
Я не очень хотел бы разбираться, как именно оно работает и правда ли просто очень везёт, но...
Насколько я понимаю, то ты не ожидаешь того, что в какой-то момент кто-то случайно два раза залокает один и тот-же мьютекс... Я бы использовал здесь юник лок или лок гвард
ну или просто wait-free, вместо всех мьютексов, ибо кому нужны блокировки вообще... хотя в самом деле, вероятно, здесь они необходимы
А что ты думаешь насчёт этого? Прав ли я?
Спасибо за важное уточнение, да, ты абсолютно прав)
 
  • Мне нравится
Реакции: 4get
Приветствую, многоуважаемые пользователи yougame, посещающие данный раздел. Предоставляю вашему вниманию собственноручно написанный антивирус на с++. Идейным вдохновителем послужил opensource пример движка для обнаружения угроз - yara. Примечателен он тем, что его база данных состоит из своеобразных "правил", задающихся при помощи собственного "языка". Я решил повторить наработки этого проекта, воплотив его уже в полноценное приложение для сканирования системы.
Если вас заинтересовало развитие данного проекта, пишите мне по всем вопросам в указанные в профиле контакты. Буду рад сотрудничеству;)
Используемые библиотеки и особенности:
gui - ImGui
rule parser - flex / bison.
multi-thread scanning system with uniform distribution of tasks across cores.

GITHUB:
Пожалуйста, авторизуйтесь для просмотра ссылки.
От антивируса тут только название, правильнее было бы это назвать статическим анализом файлов с поддержкой написания правил, а так +реп за любое вложение в опенсурс.

p.s: зачем тебе тянуть имгуи, если есть Qt?
 
От антивируса тут только название, правильнее было бы это назвать статическим анализом файлов с поддержкой написания правил, а так +реп за любое вложение в опенсурс.

p.s: зачем тебе тянуть имгуи, если есть Qt?
Не очень привычно мне с ним работать, хотя, признаюсь, было бы гораздо проще)
 
Назад
Сверху Снизу