Вся инфраструктура в конторе построена на Win7, ОСи, нужно признать, не такой уж и древней, в отличии от снятой с поддержки ХР (что, впрочем, не останавливает некоторые конторы использовать оную). Так вот, один программист конторы пожаловался на то, что разрабатывая им программа распознается ESS как вирус, хотя во время сборки того же участка кода под ХР в виртуальной машине (где так же для чего-то установлен тот же ESS) такого не происходит. Взявшись расследовать это дело, вскоре выяснилось что дело в одной единственной строке кода, а именно:
setlocale(LC_CTYPE, "");
Это б не было столь грустно, если б не было смешно. Допустим, есть у нас код:
#include <windows.h>
#include <stdio.h>
void PrintWin32Error() {
LPVOID msg;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &msg, 0, NULL
);
printf("%s\n", msg);
LocalFree(msg);
}
int main(void) {
PrintWin32Error();
return 0;
}
Все нормально компилируется, сообщение при вызове функции PrintWin32Error возвращается, правда в виде иероглифов. Решив исправить этот недочет, программист прибегнул к старому трюку и приправил код так:
...
#include <locale.h>
int main(void) {
setlocale(LC_CTYPE, "");
...
Пример, конечно, условный, но в результате ESS действительно «трогается умом». Забавно, не правда ли?
Комментарии (26)
kasperos
04.05.2016 10:21Пока антивирусы действуют по шаблону: «среднего роста, на носу бородавка», результат предсказуем, скорей всего в измененном коде формируется последовательность по которой определяется описанный выше троян.
PS. дурная привычка пооткрывать вкладок и не обновлять при комментах.
jok40
04.05.2016 10:29+2Я совершенно не удивлён. Недавно мой друг написал программку на C#, которая преобразует текстовый файл из одного вида в другой по некоторому алгоритму. Я не смог выложить эту программку на файлообменники, потому что те, перед публикацией, проверяют файлы на virustotal.com: какой-то из антивирусов, сейчас уже не помню — какой, сдвинул брови и грозно детектировал в этой программке трояна. Зато тот-же самый антивирус настоящего трояна спокойно пропустил мимо ушей.
casuss
04.05.2016 12:45+2Срок действия пробной версии истекает через 99 дней. Интересно, каким программным продуктом эти пробные 99 дней достигнуты.
ComodoHacker
05.05.2016 10:18Раз уж «снимаете пробу», то надо сообщать в ESET и смотреть на реакцию.
В штатных ситуациях все антивирусы «одинаково полезны».ihhabr
05.05.2016 10:29Таки пару раз обращался в техподдержку ESET — она работает, но… слишком формально они подходят к составлению обращений.
esetnod32
05.05.2016 12:06+1Добрый день.
Пожалуйста, пришлите нам по адресу support@esetnod32.ru в архиве с паролем данный исполняемый файл.
Wild_Spy
05.05.2016 13:58Ситуация вполне обыденна, но все равно интересно было бы почитать комментарий представителя ESET.
dkv
05.05.2016 13:58Ничуть не удивляет. В стародавние времена словил детект от Др.Веб на одной свой небольшой утилите, которая копировала файлы и проставляла им атрибуты и временные метки. Стоило поменять местами два вызова WinAPI — чисто, проходи. Китайский 360 total security страдает крайней версией паранойи, бросаясь вообще на всё подряд.
pavelpol
05.05.2016 13:59+1Проверил у себя. Скомпилировал приведенный пример, включая строку setlocale и библиотеку locale.h (без нее не скомпилировалось). Сборка релизная, статичная.
Windows 7 x64 Ultimate, MS VS Ultimate 2013 v. 12.0.21005.1
ESS 9.0.375.1 (аналогичный) База 13437
Результат сканирования (расширенного, со всеми опциями эвристики): чисто.
Dywar
05.05.2016 21:16Когда AV на виртуалке (не все), вы лицензию почитайте, иногда он будет молчать при любых обстоятельствах.
vilgeforce
Вы так говорите, будто не знаете как антивирусы работают… И да, «дело в одной единственной строке кода» вы проверяли? Программа с этой единственной строкой кода вызывает срабатывание? Сомневаюсь…
GrigoriZakharov
Знаю, но вся соль в том, что перед тем как написать все это, были произведены соответствующие тесты, — о том и речь.
vilgeforce
Пока что у вас написано о добавлении одной строки в один конкретный кусок кода.
GrigoriZakharov
А словосочетание «условный пример» Вам ни о чем не говорит? Или нужно было написать сотни различных примеров, подытожив — результат один и тот же?!
vilgeforce
Достаточно было бы написать что только с этой строкой тоже есть срабатывание. Тогда можно было бы говорить о том, что она виновата.
GrigoriZakharov
Ну прямо софистика какая-то, не находите? Такое впечатление что это это своего рода попытка оправдать свой любимый антивирус.
vilgeforce
Посмешили, спасибо. Минимальный воспроивзодимый пример — это софистика, ок.
GrigoriZakharov
По-моему вы передергиваете, так что вряд ли дальнейший разговор будет конструктивен. Всего хорошего!
zabbius
Вы бы вместо разговоров о софистике лучше выложили куда-нибудь два файлика на C и указали точную версию антивируса, чтобы все желающие могли проверить и убедиться. А то пост как-то желтоватенько выглядит.
GrigoriZakharov
Какие именно «два файлика» Вам нужны? Весь фокус в setlocale(LC_CTYPE, ""); — неужто писано языком неведомым? На счёт версии ESS 9.0.375.1
zabbius
Файлик, который выводит кракозябры и не детектируется и файлик, который выводит нормально и детектируется. Если просто вывода на консоль недостаточно — добавить минимально необходимый для детектирования код в оба файлика. В таком виде ни у кого по определению не останется недопонимания проблемы.
Кстати, а багрепорты у вас тоже пишутся условно, или все таки четко описывается кейс, чтобы разработчик мог без труда наиграть багу?
GrigoriZakharov
Вы не находите довольно странным, чтобы нанятый со стороны консультант на пару-тройку дней занимался тест-кейсами или строчил багрепорты? Во-вторых, о чем Вы спрашиваете, написано выше, зачем ещё что-то дублировать?
zabbius
Если публично заявляете баг, да еще в таком тоне — предоставьте пример. Тогда ваше утверждение не будет выглядеть голословно. Был бы пример, не было бы этого треда в комментах.
GrigoriZakharov
Еще раз — с чувством и расстановкой: суть и пример приведены в посте, так что попреки голословностью выглядят комично. Да и с тоном не совсем понятно что к чему — тон как тон, с «голым» изложением фактов. Если Вам просто хочется поболтать, то можете поискать другого собеседника, ибо здесь все же не форум и не чат.