Java Antivirus... это возможно? Как?

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

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

7 ответов


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


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

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


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

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

Итак, как я вижу, Java даже не участвует здесь.

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


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

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


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


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


лучше всего написать GUI и большую часть логики на Java, а затем иметь C или c++ back-end, который выполняет сканирование.

затем вы можете повторно использовать интерфейсный интерфейс на разных платформах и сохранить платформу на более низких уровнях.

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