Ответ 1
Это ложное положительное, очевидно. Сгенерированный машинный код просто похож на код, который находится в базе данных вредоносных программ. Это не имеет никакого отношения к использованию puts()
.
Я немного ржавый на C, но я столкнулся с этой странной проблемой:
Я написал эту программу:
#include <stdio.h>
main()
{
int n;
n=1;
while (n>0)
{
puts("Write a number: ");
scanf(" %d",&n);
printf("This is the number you wrote: %d\n", n);
}
}
По-видимому, абсолютно никаких синтаксических ошибок нет, и для того, что я мог понять, ни одна компиляционная ошибка не была. Он скомпилирован и построен отлично. Теперь, если я переключу эту строку:
puts("Write a number: ");
с этим:
printf("Write a number: ");
он компилируется без ошибок, но когда скомпилированный объект запускается, он немедленно останавливается и появляется всплывающее предупреждение о том, что он идентифицировал троянский конь. Прежде чем делать какие-либо выводы, я построил его несколько раз, и после получения того же сообщения я просмотрел его на virustotal.com и this был результатом.
Ну, я знаю, что puts на самом деле более корректен, чем printf, учитывая цель, но все же он должен работать нормально...
Что здесь не так?
Я использую антивирус AVG, и Pelles C компилируется.
Спасибо заранее.
Это ложное положительное, очевидно. Сгенерированный машинный код просто похож на код, который находится в базе данных вредоносных программ. Это не имеет никакого отношения к использованию puts()
.
Антивирусное программное обеспечение работает над сигнатурами, которые являются в основном известными шаблонами в исполняемом коде, используемом программным обеспечением для вирусов.
Некоторые вирусы в дикой природе имеют аналогичную структуру с версией кода printf
, которую вы написали (я искал всех людей, которые пометили вас как вирус, к сожалению, никто из них не публикует то, что проверяют файлы подписи), Из-за того, что вы никогда не должны называть printf
одним аргументом, вероятно, многие поставщики антивирусных программ могут использовать это как часть процесса подписи.
Два параметра, которые у вас есть, не вызывают printf
с одним аргументом (который вы не должны в любом случае) или отправляете свою программу в качестве ложного позитива для поставщиков антивирусных программ, которые заявили, что ваша программа является вирусом, и они могут обновить свои подписи, чтобы исключить вашу программу как ложный.
printf() имеет Неконтролируемый риск безопасности строки формата
вы должны использовать puts()
также нашел это:
см. комментарии в В чем разница между printf() и puts() в C?
Просто обратите внимание на использование printf вместо puts: никогда, никогда не делайте printf (variable) для печати строки. Используйте puts (переменная) или printf ( "% s", переменная). Существует риск безопасности при использовании строки с переменным форматом: если переменная может быть записана злоумышленником, они могут атаковать программу, используя строки формата. - Zan Lynx Dec 1 '12 в 9:05