2

Недавно начал изучение C++ и решил скомпилировать первую программу, обычный Hello world. Ради интереса закинул этот exe на VirusTotal, он пишет, что обнаружено 8 угроз. Также Windows defender удаляет этот файл и пишет, что это троян. Почему так, и как это исправить? Сама программа:

#include <iostream>

using namespace std;

void main() { cout << "Hello world" << endl; }

Скриншот из VirusTotal:

скрин из вирус тотала

αλεχολυτ
  • 28,987
  • 13
  • 60
  • 119
445r
  • 19
  • 4
  • 3
    Выкинуть глючный антивирус (лучше вместе со всеми его создателями и пользователями) – avp Jan 14 '24 at 14:17
  • 2
    Это "нормально", так бывает с мелкими программами. – HolyBlackCat Jan 14 '24 at 14:30
  • https://ru.stackoverflow.com/questions/1214099/#comment2122636_1214099 – user7860670 Jan 14 '24 at 18:00
  • да это обычная практика ;) У меня Касперский стоит, тоже иногда ругается на компилируемые файлы. Особенно когда там выделение памяти большое идет. У меня все проекты на Си лежат в одной папке, я в Касперском добавил эту папку в исключения. И проблема пропала. Для проектов на Дэлфи тоже самое было, тоже добавил папку в исключения. В вашем антивирусе эта функция должна быть тоже. Добавьте папку проектов в исключения антивируса. Гугл в помощь как это сделать ;) – FrancNet Jan 14 '24 at 20:44
  • Какие-то там сомнительные антивирусы ругаются - забить на них. – Qwertiy Jan 14 '24 at 21:20
  • Если экзешник имеет очень маленький размер, то многие антивирусы автоматически будут считать его вредноносным ПО. Обычно этот порог - несколько килобайт. Исторически так сложилось, что всякие вирусы, кряки, кигены писались на ассемблере, и их размер редко превышал десяток килобайт. Вот в ативирях и прописали: всё что маленькое - вредняк! Возможно, ваш хелоуворлд как раз слишком маленький, добавьте в него что-нибудь. Например, в компиляторе MinGW наличие оператора new в коде - это сходу плюс 100 кБ балласта из ABI к весу программы. Попробуте, вдруг поможет)) – LShadow77 Jan 15 '24 at 20:47

2 Answers2

0

Это все Хеш-коллизия

https://stackoverflow.com/questions/64769420/antivirus-detecting-compiled-c-files-as-trojans

Лучший ответ с переводом:

На самом деле это была какая-то коллизия хешей, компилятор не был заражен. Я менял строку в функции печати, как было предложено, несколько раз, даже добавляя разрывы строк, но каждый раз мой антивирус обнаруживал ее как вредоносное ПО. Я также попытался удалить некоторые строки кода (включения и печать), и он также обнаружил их как вредоносное ПО.

Забавно, но когда я добавил в код еще строки , AV перестал распознавать его как вирус. Заставляет задуматься, как работает используемая хэш-функция и как она связана с реальным содержанием программ.

Итак, решено, и все было хорошо, просто некоторая неряшливость AV (что, я думаю, имеет свои причины).

Euaek
  • 99
  • 1
    Антивирус ищет СИГНАТУРУ в файле. И если она совпадает с его базой, то тревога :) При компиляции появляется екзешник, для антивируса это стресс =))) Как? откуда? никто ничего не копировал! Я за всем слежу! Откуда экзешник взялся!?!? Пааанннииикккааа ! Ну примерно так =))) – FrancNet Jan 14 '24 at 22:55
  • 1
    То что это написали на английском SO - не значит, что это правда. – HolyBlackCat Jan 15 '24 at 06:15
  • 1
    Теперь топовый ответ уже другой :) – αλεχολυτ Jan 15 '24 at 20:38
  • Ого, значит мне найти топовый ответ и изменить ответ? – Euaek Jan 15 '24 at 20:39
  • Не надо тупо перепечатывать ответы, лучше сначала самому проверить. – HolyBlackCat Jan 16 '24 at 08:38
-2

Мне кажется, вся ошибка в void main(). Обычно принято писать int main():

#include <iostream>

using namespace std;

int main() { cout << "Hello world" << endl; }

Сори, если чет не то, я сам начал на плюсах прогать 1,5 месяца назад:)