Подтвердить что ты не робот

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

В принципе, моя программа проходит вдоль другого файла jar. Вот код для функции загрузки:

public void saveUrl(final String filename, final String urlString) throws MalformedURLException, IOException {
    BufferedInputStream in = null;
    FileOutputStream fout = null;
    try {
        in = new BufferedInputStream(new URL(urlString).openStream());
        fout = new FileOutputStream(filename);

        final byte data[] = new byte[1024];
        int count;
        while ((count = in.read(data, 0, 1024)) != -1) {
            fout.write(data, 0, count);
        }

    } catch (Exception e) {
        return;
    } finally {
        if (in != null) {
            in.close();
        }
        if (fout != null) {
            fout.close();
        }
    }
}

И начать новый процесс

public void runUpdate() throws IOException{
    String folder = fileLocation;
    ProcessBuilder p = new ProcessBuilder();
    p.command(folder);
    p.start();
}

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

Он был обнаружен как "trojan.downloader". Я думаю, что это имеет какое-то отношение к функции загрузки? Я не пытаюсь побить антивирусную программу. Я не пытаюсь делать какие-либо незаконные действия.

Возможно, какая-то обфускация сделает трюк?

4b9b3361

Ответ 1

Байт-код, сгенерированный вашим компилятором, соответствует некоторому конкретному кодовому шаблону/подписи, который ищет AV, что означает, что некоторая вредоносная программа, которую они обнаружили/отменили в прошлом, имела код, подобный этому, который они могли бы надежно найти.

Лучшим вариантом было бы идентифицировать и переписать какой бы метод ни запускал обнаружение, пока он больше не будет соответствовать тому, что ищет AV, обфускация не будет хорошей идеей (но может быть сделано, если обфускатор контролирует обфускацию потока ) для исправления этой проблемы, так как нет гарантии, что он выдаст байт-код, достаточно отличающийся от оригинала (некоторые обфускаторы, такие как ProGuard, также не выполняют обфускацию потока управления).

Ответ 2

Вы можете попытаться подписать JAR с сертификатом подписи кода, например. от Digicert.

Это добавляет имя вашей компании в JAR надежным способом и, следовательно, может также быть доверено антивирусной программой. Тем не менее, нет никакой гарантии, что каждая программа Antivirus сделает это.

Обратите внимание, что это также влияет на это:

  • CRL (список отзыва сертификатов) могут быть выполнены. Это загрузит данные из Интернета. Если на ПК установлено физическое сетевое соединение (локальное), но нет подключения к Интернету, это может привести к значительным таймаутам.
  • Вам нужно ознакомиться с отметкой времени, в противном случае подпись станет недействительной, когда срок действия сертификата истечет.

Ответ 3

Поставщики антивирусов ищут шаблоны в битах; если что-то совпадает с известными в базе данных, они будут обозначать его как плохое. Конечно, это создало проблемы для разработчиков/компаний (малых/больших)

У некоторых поставщиков есть автоматизированный механизм для отметки "ложного обнаружения". Пожалуйста, используйте соответствующий канал для сообщения о таких случаях.

Для начала, вот некоторые из них. symantec или avg

Для некоторых вам необходимо обратиться к поставщику с помощью других средств: например http://www.avast.com/contact-form.php?subject=VIRUS-FILE

VirusTotal работает над более легким способом flag-еще не в производстве, я думаю,

В любом случае варианты, упомянутые в других ответах, не всегда срабатывают. Мы создали обновленные исполняемые файлы с более новым компилятором и новейшими API. Также пытался с подписанием исполняемого файла. Все это повышает вероятность того, что программа станет хорошей для "антивирусной" программы. Однако наиболее подходящим способом является проверка с поставщиком. Th

Ответ 4

Я собираюсь добавить это как ответ. Если ваша программа будет законно подписан, эта проблема будет исправлена. Вы также можете подделать подпись, но антивирусы, такие как ESET, выберут это почти мгновенно.

Лучшая работа для этого - честно, просто попробуйте обмануть антивирус. Измените все свои имена строк... Добавьте кучу поддельных строк, которые ничего не делают, например

int asdgsal = 1 + 2; 

А также добавьте несколько вызовов метода looping, которые почти ничего не делают.

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

Кроме того, не загружайтесь в temp или appdata. Бросьте его в% userprofile% или мои документы, и все будет в порядке.

Ответ 5

Я думаю, что вы можете использовать много файлов для тестирования, узнаете, не могут ли все файлы загружаться. Если все файлы возвращаются одинаково. Я думаю, что причина в вашем коде. Затем вы можете обратиться к другому персональному коду.