Возникла такая проблема. Пишу одну свою программку, завязанную на сети, поэтому заливаю все файлы на свой сайт на Народе. Внезапно сайт заблокировали. Ясно, что в программе что-то намутил и у меня получился "вирус". Стал проверять. Сразу понял, что проблема - в алгоритме работы реестра, т.к. ничего другого такого серьёзного пока не добавлял. Методом научного тыка с помощью virustotal обнаружил примерное положение "вирусного" алгоритма. Алгоритм прост: проверяется наличие ключа моей программы в реестре, и если его там совсем нет - создают его и записывают стандартные значения (настройки программы по-умолчанию). Вся проблема в том, что DrWeb каким-то образом определяет этот кусок кода как BackDoor.Click.origin или BackDoor.Click.1279 (число точно не помню). Пробовал немного изменить алгоритм, но изменилось только последнее слово в названии вируса. Сразу скажу, что разрабатываю в Delphi, но от среды это, я думаю, не зависит - используется стандартный компонент со стандартными функциями, ничего особенного. Вот примерный код:
Code
if not reg.KeyExists('название программы') then begin reg.CreateKey('название программы'); reg.WriteString('download_path','C:\Downloads'); DownloadDir:='C:\Downloads'; reg.WriteBool('check_updates',false); reg.WriteBool('auto_download',false); end else begin reg.OpenKey('название программы',true); DownloadDir:=reg.ReadString('download_path'); checkingupdate:=reg.ReadBool('check_updates'); autoupdate:=reg.ReadBool('auto_download'); end;
Конкретно на это выдаёт BackDoor.Click.origin. На предыдущую версию (без keyexists, только openkey) выдавало что-то типа BackDoor.Click.1279... Так вот, что это за BackDoor.Click и почему мою программу принимают за него?
P.S. Как же мне надоели все эти антивирусы, которые принимают мои вполне нормальные программы за вирусы...
[diletantmode] Бекдор подразумевает, что ты или не ты(но тот кто поломает твой код) через этот код сможешь получить доступ удалённо к компу. Те не вирус но потенциально опасная прога. Те на лицо имеем прогу, которая работает с сетью и при этом может менять значения в реестре, при этом не принадлежит к доверенным источникам. При этом не забываем что у антиверя нет возможности прочитать исходный код, и нет интеллекта чтобы понять принцип работы и вычислить чёрный ящик твоей программы. Вместо этого он смотрит на косвенные признаки. [/diletantmode]
TimKruz, просто твоя программа делает те-же действия что и вирус. Вирусы ведь тоже пишут, обычно, с применением стандартных библиотек... Как же определить вирус? Просто антивирусник анализирует поведение программы, или присутствие некоторых специфических строк и команд. По этой причине все кейгены и кряки обычно определяются как вирусы, ведь они делают тоже самое - портят определёнными действиями исходные программы! Достаточно в блокноте написать строчку:
а после сохранения текстового файла - сменить его расширение на соm или exe и вуаля - вы написали в блокноте свой первый вирус!!! Он конечно стандартный, тестовый и никаких вредных действий не делает.
Сообщение отредактировал Serg1971 - Среда, 18 Апреля 2012, 08:47
Про то, что антивирус проверяет поведение программы - я знаю. Просто не мог понять, что за поведение в данном случае не нравится DrWeb...
Вот что интересно: у меня в программе два окна. Одно изначально скрытое, на нём настройки, но создаётся сразу. В нём тоже производится чтение и запись в реестр, но его код я не убирал, т.е. на него антивирус не ругается.
Как я понял, ругается именно на запись в реестр чего-либо во время создания (create) или отображения (show) главной формы... Т.е. без предупреждения пользователя.
Всё, проблема решена. Просто не нужно ничего записывать в реестр во время создания/отображения главного окна. Если проверка выявляет отсутствие нужного мне ключа - он будет создан не сразу, а только тогда, когда пользователь зайдёт в настройки и сохранит их. Теперь по всем антивирусам чисто.
Я подозреваю, что под BackDoor.Click (именно click) подразумевается программа, которая сразу же, только запустившись (без ведома пользователя, точнее сразу после клика пользователем на её ярлык, например), записывает что-то в реестр. Но мне всё равно не понятно, какая связь между записью в реестр и "открытой задней дверью"... Т.е. как можно получить доступ к чему-либо, просто-напросто записав что-то в реестр?
Quote (Serg1971)
Вирусы ведь тоже пишут, обычно, с применением стандартных библиотек...
Ага, это вирусы "высокого уровня", которые лепятся в любом "конструкторе" за пару минут и также быстро распознаются.
Quote (PBPROG)
Пиши не в реестр, а в INI файл и антивирь не будет ругаться.
Это можно, но, мне кажется, реестр в данном случае будет удобнее.
Это можно, но, мне кажется, реестр в данном случае будет удобнее.
На мой взгляд , для программиста нет никакой разницы куда скидывать настройки (если специально не предусмотрено прятать их, все таки в реестре найти их посложнее). С другой стороны для пользователя всегда удобнее , если настройки хранятся в папке с программой. Я нашел четыре причины, хотя может их больше:
1) Портабельность программы (как минимум возможность переносить в любые папки в рамках текущей системы) 2) Всегда можно подкорректировать настройки в том же блокноте , не запуская программу 3) Нет лишнего мусора в реестре. 4) Нет проблем с антивирями. Неизвестно, что завтра запехнут в Dr.WEB или в любой другой антивирь и на что они будут ругаться! А 99% пользователей, получив предупреждение от антивирей, тут же не разбираясь, сотрут программу.
1) Портабельность программы (как минимум возможность переносить в любые папки в рамках текущей системы)
В рамках текущей системы - это как раз реестр лучше, потому что INI файл придётся таскать вместе с файлом программы. С другой стороны, INI легче перенести на другой компьютер. Но у меня там такая мелочь, что переносить на другой компьютер нет смысла.
Quote (trew)
2) Всегда можно подкорректировать настройки в том же блокноте , не запуская программу
В реестре так же просто отредактировать. Run > regedit > ветка "текущий пользователь" (или другая, например, "весь компьютер") > ключ Software (софт) > ключ - имя программы или производителя, потом просто параметры редактируешь. Продвинутый пользователь легко разберётся. А вот "чайник" вообще ни какие файлы настроек трогать не должен, а то сделает так, что программа вообще не запустится.
Quote (trew)
3) Нет лишнего мусора в реестре.
Ну от мусора ни как не избавишься. Впрочем, он никому не мешает... И потом, есть программы для чистки реестра. Или можно сделать специальную опцию в настройках программы...
Quote (trew)
4) Нет проблем с антивирями.
Ага. Чтобы создать файл в папке с программой, нужно получить доступ к записи в эту папку. Записать файл и записать ключ в реестр - разные вещи, и, думаю, пользователь скорее удалит программу, пишущую какие-то файлы, чем пишущую ключи в реестре... Я так думаю.
Как продвинутый пользователь я скорее снесу прогу, которая что-то химичит в реестре, чем пишет в свою папку)
Согласен, у меня на компе почти все проги держат свои настройки в папке с программой. Остались только так сказать уникальные, которые заменить не получится. Приходится их каждый раз при переустановке винды ставить заново.
Винда ХРюшка? На Windows 7, такое не прокатит без прав админа, т. к. запрещена запись в Program Files.
Windows 7
В Program Files у меня только те проги, которые хотят намутить (или уже намутили) что-то в реестре. Системный диск у меня только для системы. Для всего остального есть отдельный диск. Переустановил винду, и почти все программы на месте со своими настройками. Более того , для тех у кого две винды на одном компе, для каждой ставить свою версию, пачкающую реестр? Это не для меня.
Переустановил винду, и почти все программы на месте со своими настройками. Более того , для тех у кого две винды на одном компе,
Ну ветку с ключами можно легко экспортировать и потом импортировать, если так уж нужно перенести куда-то в другую систему настройки... Впрочем, тут всё зависит от вкуса...
Можно сделать так, чтобы программа могла менять положение настроек - в реестре или в файле... В принципе, это не сложно.
Quote (ShadowZi)
Виндоусу я больше доверяю
Зря, зря. Виндоус иногда такие штуки выкидывает...
Сообщение отредактировал TimKruz - Четверг, 19 Апреля 2012, 19:44