Антивирус Java … действительно ли это возможен? Как?

Действительно ли возможно записать антивирусную программу в Java такой как, который это может прервать программу от того, чтобы быть выполняемым? Я могу иметь такой глубокий контроль над ОС в Java?

обновление: что относительно c#? те же ограничения применяются, или это - лучший путь?

9
задан Fortyrunner 23 February 2010 в 22:12
поделиться

7 ответов

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

12
ответ дан 4 December 2019 в 10:31
поделиться

Я не думаю, что такой контроль возможен с Java, в первую очередь потому, что он использует виртуальную машину и защищен от ОС. Вернее, ОС защищена от виртуальной машины Java. Это сделано намеренно.

Отредактировано для большей ясности: я предполагаю, что вы хотите написать все решение на Java, а не смешивать языки.

5
ответ дан 4 December 2019 в 10:31
поделиться

Как сказал HalloDu, это технически возможно с использованием JNI. Тем не менее, IIRC, большинство антивирусных программ используют какой-либо драйвер для перехвата открытых файлов и их сканирования, прежде чем позволить ОС продолжить использование файла. В этом случае объем собственного кода, который вам придется написать (на C или, возможно, C ++), будет значительным и, вероятно, превзойдет ваш Java-код по размеру.

При написании низкоуровневых приложений я бы придерживался C. Однако, возможно, имеет смысл закодировать такие вещи, как графический интерфейс, на языке более высокого уровня, хотя Java там тоже не будет моим выбором, потому что это своего рода Больно взаимодействовать с C. Лично я бы сделал всю эту чертову вещь на C только потому, что смешивание языков имеет тенденцию быть болью. Если бы у меня было для смешивания языков, я бы выбрал C и python просто потому, что ctypes делает взаимодействие с C очень простым.

1
ответ дан 4 December 2019 в 10:31
поделиться

Какой смысл в создании собственного антивируса? Это большая работа, но я думаю, было бы здорово, если бы вы сделали его портативным, который блокирует и удаляет все самые неприятные. Если вы настаиваете, ClamAV , это довольно хороший антивирус с открытым исходным кодом (без защиты в реальном времени), но он написан на C ++.

0
ответ дан 4 December 2019 в 10:31
поделиться

Лучше всего написать графический интерфейс и большую часть логики на Java, тогда есть серверная часть C или C ++, которая выполняет сканирование.

Затем вы можете повторно использовать интерфейс на разных платформах и оставить специфичные для платформы вещи на нижних уровнях.

Таким образом, вы можете использовать сильные стороны обоих языков - независимость Java от платформы и простоту использования, а также возможность C / C ++ получать прямой доступ к базовой платформе.

0
ответ дан 4 December 2019 в 10:31
поделиться

Это возможно с JNI . В основном вы будете использовать Java для графического интерфейса пользователя и C / C ++ для любых других антивирусных программ.

0
ответ дан 4 December 2019 в 10:31
поделиться

Я не уверен, что это будет работать даже с JNI.

В случае «перехвата», когда ОС запускает новый процесс (или записывает в файл или что-то еще), вам нужно написать какой-то драйвер или модуль ядра, который подключается к ОС. Этот драйвер / модуль наверняка написан в собственном скомпилированном коде. Таким образом, операционная система здесь ответственна и в конечном итоге вызовет ваш собственный модуль.

Так что, как я понимаю, Java здесь даже не задействована.

В любом случае, это основной подход. Возможно, в Linux можно использовать что-то вроде pam , которое можно настроить для выполнения практически любых действий, связанных с безопасностью и правами доступа к файлам / процессам, и может вызывать другие процессы для выполнения своих требований. Кажется надуманным запускать экземпляр JVM для каждого нового процесса, который ОС пытается запустить.

2
ответ дан 4 December 2019 в 10:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: