Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Nod32 определяет прогу на wxWidgets как вирус


Автор: mes 19.11.2007, 13:08
Здравствуйте. 
Столкнулся со следуюшей проблемой: 
 При написании IRC-клиента с использованием библиотеки wxWidgets (Cpp) , антивирус нод32  выдает сообшение, что  exe файл определен как возможно новый NewHeur_PE вирус и удаляет его.  Поэксперементировав, обнаружил что достаточно 5ти строчек кода добавить к новому проекту (шаблон с окном) и получается эта история.

Код

...
#include "wx/socket.h"
...
wxString str1 = "NICK";
wxString str2 = "USER";
wxString str3 = "JOIN";
...
wxSocketClient sock;

То есть, если в проге и определен сокет-объект (даже неиспользуемый ) и где нибудь в коде есть три строчки (также если они стоят вразброс) с командами от IRC-протокола, то такую прогу нод32 считает вирусом. :(

Поискав по инету я нашел, что есть Backdoor-вирус который использует IRC комманды(написан на VISUALBASIC) , с которым скорей всего и путает нод32 мою прогу. Но от этого легче мне не стало .

Не использовать wxWidget я не могу.. так как IRC-клиент только часть проекта уже написаного на этой библиотеке..

Может кто то встречался с таким, знает методы борьбы ?  Заранее спасибо за любой совет.



Автор: Greeen 19.11.2007, 13:16
Сталкивался с таким... Правда в MFC, тоже при работе с сокетами. Просто вырубал нод и инет (чтоб какашка не залезла) и работал дальше  smile 

Автор: W4FhLF 19.11.2007, 13:20
Цитата(mes @  19.11.2007,  13:08 Найти цитируемый пост)
Может кто то встречался с таким, знает методы борьбы ?


Когда напишешь программу, свяжись с их лабораторией и опиши проблему. Обычно они решают подобные случаи. 

Автор: mes 19.11.2007, 13:54
Цитата(Greeen @  19.11.2007,  13:16 Найти цитируемый пост)
. Просто вырубал нод

но ведь не будут все кто пользуются  нод32 отключать его ради того чтоб попользооваться моей прогой smile

Цитата(W4FhLF @  19.11.2007,  13:20 Найти цитируемый пост)
 свяжись с их лабораторией и опиши проблему. Обычно они решают подобные случаи

 планировал..сделаю..мало верю в успех..но другого выхода и не видно  smile

Я вот тут задумался.. связано ли это именно с wxWidgets или нод32 реагирует на любую прогу с сокетами и строками??
 пробовал заменить wxString на другое.. Результат тот же...но без wxWidgets попробовать не могу (нет других библиотек)
у кого есть возможность попробуйте, пожалуйста, откомпилить аналог кода первого поста. (только не забудьте, что неиспользуемые char[] отсекаются - а то у результат будет не точный. ) smile

Автор: W4FhLF 19.11.2007, 14:02
Цитата(mes @  19.11.2007,  13:54 Найти цитируемый пост)
Я вот тут задумался.. связано ли это именно с wxWidgets или нод32 реагирует на любую прогу с сокетами и строками?? пробовал заменить wxString на другое.. Результат тот же...но без wxWidgets попробовать не могу (нет других библиотек)


Эвристический анализ этого антивируса основан на наборе некоторых характерных для вирусов правил исполнения, каждое правило имеет свой вес, при достижении определённого порога(по весовой сумме всех правил встретившихся в приложении) программа становится потенциальным вирусом с т.з. АВ. 
Видимо какое-то поколение вирусов использовало похожую сигнатуру(да в общем-то любой троян использует сокеты) и её сделали одним из правил. Хотя, конечно, очевидно, что правилу присужден слишком большой вес. Но тут ещё может быть кое-что. Ещё видимо сыграло свою роль и то, что компилятор инклудит библиотеку с множеством сетевых функций. 

Автор: Softaz 19.11.2007, 14:46
Помню у меня при использовании wininet + ping DrWeb определял "возможный" вирус.
Есди без строк тех АВ не определяет как вирус, попробуй зашифровать строки.

Автор: mes 20.11.2007, 00:17
Цитата(Softaz @  19.11.2007,  14:46 Найти цитируемый пост)
Есди без строк тех АВ не определяет как вирус, попробуй зашифровать строки.

 Я примерно так и сделал, к строкам храняшимся в коде программы добавил префикс, чтоб АВ ничего "плохого" в коде не нашел..
 с такой строки считываю нужный кусок  в константную переменную и работаю уже с ней.

 привожу один иэ вариантов как пример, вдруг кто то столкнется с такой же проблемой 
Код

#define DECLARE_IRC_COMMAND(name,code) const wxString name =  wxString("_"#code).Mid(1);

DECLARE_IRC_COMMAND(IRC_PING,               PING)
DECLARE_IRC_COMMAND(IRC_NICK,               NICK)
...



Огромное спасибо за поддержку и советы

Автор: bsa 20.11.2007, 12:27
может лучше так:
Код

static const char text_irc_ping[] = "_PING";
static const char text_irc_nick[] = "_NICK";
static const char text_irc_user[] = "_USER";
...
const wxString IRC_PING = text_irc_ping + 1;
const wxString IRC_NICK = text_irc_nick + 1;
const wxString IRC_USER = text_irc_user + 1;

Автор: mes 20.11.2007, 19:05
Цитата(bsa @  20.11.2007,  12:27 Найти цитируемый пост)
может лучше так:

 а чем лучше ?

Автор: Alek86 20.11.2007, 19:43
имхо, ничем.
только если тебе хочется обмануть нод smile

а в следующей версии он будет на _USER ругаться.... понятно, что проблемы то ихние, но программу же это не спасет...

лучше что-то более уникальное

Автор: mes 20.11.2007, 21:56
Цитата(Alek86 @  20.11.2007,  19:43 Найти цитируемый пост)
а в следующей версии он будет на _USER ругаться


Иммено для этого объявляю переменные  через  #define-макрос,  чтоб одним махом можно было поменять префикс
а если вдруг что, то и суффикс добавить smile

Цитата(Alek86 @  20.11.2007,  19:43 Найти цитируемый пост)
лучше что-то более уникальное 

предлагай какой нравится, поставлю smile

Автор: Alek86 20.11.2007, 22:04
к примеру <рабочее название проги>_USER и т.п.

а вообще, имхо, тут нужно бы ID писать вместо строк

Автор: mes 20.11.2007, 23:26
Цитата(Alek86 @  20.11.2007,  22:04 Найти цитируемый пост)

а вообще, имхо, тут нужно бы ID писать вместо строк 


 нельзя чтоб в теле проги были строки (даже нигде не используемые) команд IRC. ID отпадает так как, как я по ID расспознаю строку пришедшую по сети? 

Цитата(Alek86 @  20.11.2007,  22:04 Найти цитируемый пост)
к примеру <рабочее название проги>_USER и т.п. 

а толку от рабочего названия если перед командой тот же штрих стоит smile тогда уж<рабочее название проги>USER.

P.S. Наверно ты невнимательно прочитал: префикс (_) нужен только для того чтоб в теле проги не хранилась команда похожая на ирк-команду. А использую в работе все равно только "чистую" команаду (без префикса), 

Автор: Alek86 21.11.2007, 15:38
Цитата(mes @  20.11.2007,  23:26 Найти цитируемый пост)
 Наверно ты невнимательно прочитал:

угу, и правда smile


Цитата(mes @  20.11.2007,  23:26 Найти цитируемый пост)
ID отпадает так как, как я по ID расспознаю строку пришедшую по сети? 


если эти строки "отсекаются" сразу по прибытии и нужны только по работе IRC, то да...
мне почему-то показалось, что они фигурируют и в самом "ядре" программы, которое должно быть отделено от сети бетонной стенкой

Автор: mes 21.11.2007, 19:17
Цитата(Alek86 @  21.11.2007,  15:38 Найти цитируемый пост)
 показалось, что они фигурируют и в самом "ядре" программы, которое должно быть отделено от сети бетонной стенкой


Да используются только для расшифровки команд от ирка(и соответственно обратного преобразования).   В "ядро" посылается уже отранслированная комманда "внутреннего" протокола.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)