У меня один из проектов регулярно детектился на вирус тотал. Но детектился маленькими дерьмовенькими антивирчиками, что было неприятно, но терпимо. А потом внезапно, через несколько дней после важного релиза, экзешник стали детектить Windows Defender и Касперский, а также еще несколько маленьких дерьмовенькими. В Касперского и Майкрософт я написал, они на удивление быстро исправили детект. А у мелкого дерьмеца даже писать-то некуда — у них на сайте только надпись "покупайте наш самый лучший антивирус" и мейл отдела продаж.
Сейчас на втором проекте McAfee внезапно ругается на запись dll на диск (а как ее не писать, когда dll однопоточная а надо несколько; можно в память раскладывать но жаль менять отлаженный механизм). Причем на virustotal он не ругается, а именно по факту записи dll). Хочется как-то подстраховаться от проблем.
Вопросы:
1. Как снизить вероятность детекта?
Я вот понял, что паковать нельзя — применяешь UPX, и сразу 2..4 говнеца начинают тявкать. Знаю про подпись, но руки пока не дошли.
2. Можно ли действовать на упреждение?
(В какой-нибудь белый список например добавиться (только я не знаю есть ли такие и насколько они эффективны); проверить детект на реальных антивирусах в динамике etc)
Проект Ребенок8020 — пошаговый гайд как сделать, вырастить и воспитать ребенка.
Здравствуйте, Basil2, Вы писали:
B>ругается на запись dll на диск (а как ее не писать, когда dll однопоточная а надо несколько; можно в память раскладывать но жаль менять отлаженный механизм)
Эээ, что?
При чём тут однопоточность к записи на диск?
Здравствуйте, falcoware, Вы писали:
F>А что такого писать в большой файл по частям из разных потоков?
Ты точно прочитал цитату, про которую я спрашиваю?
Здравствуйте, CreatorCray, Вы писали:
CC>Здравствуйте, Basil2, Вы писали:
B>>ругается на запись dll на диск (а как ее не писать, когда dll однопоточная а надо несколько; можно в память раскладывать но жаль менять отлаженный механизм) CC>Эээ, что? CC>При чём тут однопоточность к записи на диск?
Я попробую угадать —
По одной копии DLL на каждый поток. Поскольку заранее неизвестно, сколько потоков понадобится, для каждого нового потока записывается на диск новая копия DLL со случайным именем, и загружается в этот новый поток.
рискну предположить, что у автора есть какая-то длл-ка, которая делает что-то, что ему нужно, но не поддерживает реэнтерабельность/многопоточность. и вот чтобы запустить несколько задач одновременно, он создает на лету копии длл-ки и загружает их по одной на поток.
автору могу предложить сразу при инсталляции создавать пул одинаковых длл-ек и юзать по мере надобности
Здравствуйте, Sharowarsheg, Вы писали:
S>По одной копии DLL на каждый поток. Поскольку заранее неизвестно, сколько потоков понадобится, для каждого нового потока записывается на диск новая копия DLL со случайным именем, и загружается в этот новый поток.
Здравствуйте, CreatorCray, Вы писали:
CC>Ой вей. CC>За такое же канделябром надо!
У Интела jpeg decoder такой был, использовал thread local storage, поэтому мы так и делали — сохраняли копии dll со случайными именами для каждого потока.
Здравствуйте, Nuzhny, Вы писали:
N>У Интела jpeg decoder такой был, использовал thread local storage, поэтому мы так и делали — сохраняли копии dll со случайными именами для каждого потока.
Погодь, TLS жеж per-thread. Соответственно в разных потоках разные TLS.
Здравствуйте, CreatorCray, Вы писали:
S>>По одной копии DLL на каждый поток. Поскольку заранее неизвестно, сколько потоков понадобится, для каждого нового потока записывается на диск новая копия DLL со случайным именем, и загружается в этот новый поток.
CC>Ой вей. CC>За такое же канделябром надо!
Почему? То, что антивирусникам не нравится какая-то практика, ещё не значит, что эта практика сама по себе плоха. В многопоточной обработке делать для каждого потока по своей копии ресурса — стандартная практика. Эту практику прекрасно можно распространить и на библиотеку, если бы не мусора антивирусники.
Здравствуйте, CreatorCray, Вы писали:
N>>У Интела jpeg decoder такой был, использовал thread local storage, поэтому мы так и делали — сохраняли копии dll со случайными именами для каждого потока. CC>Погодь, TLS жеж per-thread. Соответственно в разных потоках разные TLS.
Да, они чуть ли не из DllMain там что-то глобальное инициализировали. Почулалось, что её можно было загрузить и использовать только из одного потока.
Здравствуйте, Sharowarsheg, Вы писали:
S>Почему? То, что антивирусникам не нравится какая-то практика, ещё не значит, что эта практика сама по себе плоха.
Это практика не просто плоха, она отвратительна. Это лютое рукожопие.
S> В многопоточной обработке делать для каждого потока по своей копии ресурса — стандартная практика.
Если либа насколько хреновая что использует статические переменные то запусти несколько процессов вместо того чтоб срать на диск копиями файла.
Здравствуйте, Nuzhny, Вы писали:
N>Да, они чуть ли не из DllMain там что-то глобальное инициализировали.
Вот в это поверю, а TLS на то и Thread Local чтоб работать с любым колвом потоков.
Здравствуйте, Basil2, Вы писали:
B>У меня один из проектов регулярно детектился на вирус тотал. Но детектился маленькими дерьмовенькими антивирчиками, что было неприятно, но терпимо. А потом внезапно, через несколько дней после важного релиза, экзешник стали детектить Windows Defender и Касперский, а также еще несколько маленьких дерьмовенькими. В Касперского и Майкрософт я написал, они на удивление быстро исправили детект. А у мелкого дерьмеца даже писать-то некуда — у них на сайте только надпись "покупайте наш самый лучший антивирус" и мейл отдела продаж.
B>Сейчас на втором проекте McAfee внезапно ругается на запись dll на диск (а как ее не писать, когда dll однопоточная а надо несколько; можно в память раскладывать но жаль менять отлаженный механизм). Причем на virustotal он не ругается, а именно по факту записи dll). Хочется как-то подстраховаться от проблем.
Такая же история с детектированием.
Каспер быстро фиксит — это да.
А вот на пример McAfee — мне так и не удалось отписать в ТП, т.к. одни отфутболивали к другим и т.д.
И подскажет по Defender'у — почта или куда писали? Там что-то тоже какой-то гимморой помню, так и не нашел куда писать разрабам.
Здравствуйте, CreatorCray, Вы писали:
S>> В многопоточной обработке делать для каждого потока по своей копии ресурса — стандартная практика. CC>Если либа насколько хреновая что использует статические переменные то запусти несколько процессов вместо того чтоб срать на диск копиями файла.
Это просто замена — вместо диска будешь память засирать. Плюс к этому взаимодействия становятся дороже. Разница не так велика, как кажется.
Если цель — избавиться от фолсов на вирустотал, то это не так сложно — можно весь код приложения вынести в dll, ее зашифровать и поместить в ресурсы exe. Можно и по принципу "матрёшки", когда внутри (в ресурсах) этой dll другие dll и другие файлы, в том числе полноценно заархивированные.
Главное, чтобы в exe было минимум кода и сделать так, чтобы код для эвристики антивирусов не выглядел подозрительно. Ну и про сам инсталлятор (если он в форме exe тоже не забывать)
Тут возникает одно проблема, которую ты описал ниже с записью dll на диск. На вирустотале всё будет чисто, а вот на компах пользователей антивирусы могут ругаться, и все их не проверишь. Тут еще важна видимо последовательность действий при создании этой dll, куда она пишется и тд.
Здравствуйте, wantus, Вы писали:
W>Можно грузить DLL с помощью custom PE loader. Более того, при этом DLL может сидеть в памяти, а не на диске.
W>Хотя есть шанс, что от этого у Касперского будет полный ифаркт, но зато всякая мелочь будет гарантированно молчать.
Надо чекбокс в инсталяторе сделать "сносить Касперского".
По умолчанию включенный
Здравствуйте, CreatorCray, Вы писали:
CC>Если либа насколько хреновая что использует статические переменные то запусти несколько процессов вместо того чтоб срать на диск копиями файла.
Можно подумать, что срать копиями процесса — лучше.