2010-02-23 16 views
9

Czy można napisać program antywirusowy w Javie, taki, że może przechwycić program przed wykonaniem? Czy mogę mieć tak głęboką kontrolę nad systemem operacyjnym w Javie?Java Antivirus ... czy to możliwe? W jaki sposób?

aktualizacja: co z C#? obowiązują te same ograniczenia, czy to lepszy sposób?

+1

Proszę nie. Technicznie jest to możliwe nawet w PHP. – pestilence669

+0

Prawdopodobnie byłoby tak samo z C#. Może trochę łatwiej, ale nadal musisz napisać więcej kodu niższego poziomu niż C#. –

Odpowiedz

12

Mając taki wpływ na system operacyjny jest możliwe. Jest tylko problem, że utracisz niezależność od platformy lub przynajmniej musisz napisać kod dla każdej platformy ze względu na to, że takie działania wymagają dość głębokiego dostępu do systemu, który mógłby zostać osiągnięty dzięki JNI, co wiązałoby metoda, z której korzystasz w systemie operacyjnym.

+2

Tak. W tym celu wymagane będzie JNI, a wtedy nie będziesz już pisać czystej Javy. –

+2

może to być * zhakowane * razem z JNI, co pozwala napisać C++, który podszywa się pod java ... –

1

Jak powiedział HalloDu, jest to technicznie możliwe z wykorzystaniem JNI. Jednak w IIRC większość programów antywirusowych używa jakiegoś sterownika, który przechwytuje otwarte pliki i skanuje je przed zezwoleniem OS na dalsze używanie pliku. W takim przypadku liczba natywnego kodu, który musiałbyś napisać (w C lub prawdopodobnie w C++) byłaby znaczna i prawdopodobnie przekroczy Twój rozmiar kodu Java.

Podczas pisania niskopoziomowych aplikacji, trzymałbym się C. Jednak może być sens kodowanie rzeczy takich jak GUI w języku wyższego poziomu, choć Java też nie byłaby tam moim wyborem, ponieważ jest rodzaj bólu, który łączy się z C. Osobiście, zrobiłbym całą cholerną rzecz w C tylko dlatego, że mieszanie języków wydaje się być bólem. Jeśli I miałby mieszać języki, mój wybór byłby przez C i python, po prostu dlatego, że ctypes sprawia, że ​​interfejs z C jest naprawdę łatwy.

+0

Nie sądzę, że to jest istotne, OP brzmi tak, jakby celem było napisanie całego rozwiązania w Javie. – hmcclungiii

+0

Być może mój wzmiankowany python nie jest całkowicie trafny, ale używam go w dużej mierze jako porównania do JNI, które musiałbyś przyznać, to rodzaj bólu, z którym można pracować. –

+0

JNA (Java Native Access) działa wspaniale, gdy potrzebujesz interfejsu C z Javą. –

5

Nie sądzę, że taka kontrola jest możliwa w Javie, głównie dlatego, że używa VM i jest chroniona przed systemem operacyjnym. A raczej system operacyjny jest chroniony przed maszyną wirtualną Java. Jest to zgodne z projektem.

Edytowany w celu zwiększenia jasności: Zakładam, że chcesz napisać całe rozwiązanie w języku Java, a nie miksować języków.

0

Jest to możliwe z JNI. W większości przypadków korzystasz z Javy dla GUI i C/C++ w celu innego rodzaju pracy antywirusowej.

2

Nie jestem przekonany, że zadziała nawet z JNI.

W przypadku "przechwytywania", gdy system operacyjny rozpoczyna nowy proces (lub zapisuje do pliku lub cokolwiek innego), należy napisać jakiś moduł sterownika lub jądra, który zostanie podłączony do systemu operacyjnego. Ten sterownik/moduł jest na pewno napisany w natywnym skompilowanym kodzie. Tak więc system operacyjny jest tutaj odpowiedzialny i ostatecznie zadzwoni do twojego natywnego modułu.

Tak więc, jak widzę, Java nie jest tu nawet zaangażowana.

To podstawowe podejście i tak. Być może jest to możliwe za pomocą czegoś w rodzaju Linux-a, takiego jak pam, które można konfigurować tak, aby wykonywało prawie wszystko, co związane z bezpieczeństwem i uprawnieniami do pliku/procesu, i może wywoływać inne procesy w celu wykonania licytacji. Wygląda na to, że udało się uruchomić instancję JVM dla każdego nowego procesu, który system operacyjny próbuje uruchomić.

0

Jaki jest sens tworzenia własnego programu antywirusowego? To dużo pracy, ale myślę, że byłoby fajnie, gdybyś uczynił ją przenośną, która blokuje i usuwa te bardziej nieprzyjemne. Jeśli musisz przetrwać, ClamAV, jest to open source i całkiem dobry AV (bez ochrony w czasie rzeczywistym), ale zaprogramowany w C++.

+0

Zastanawiam się nad nowym rodzajem antywirusa, więc będę musiał mieć taki sam dostęp do tych tradycyjnych. –

+0

Z tego, co wiem, jest to jedyny open source, a przynajmniej jedyny, który jest nadal aktywnie utrzymywane. Ale jeśli możesz znieść kod źródłowy do niego, jestem pewien, że zrobienie skanera w czasie rzeczywistym nie byłoby wielkim wyzwaniem? –

0

Najlepszym rozwiązaniem może być napisanie graficznego interfejsu użytkownika i znacznej części logiki w Javie, a następnie utworzenie back-endu C lub C++, który wykonuje skanowanie.

Następnie można ponownie korzystać z interfejsu na różnych platformach i utrzymywać określone funkcje platformy na niższych poziomach.

W ten sposób można wykorzystać zalety obu języków - niezależność platformy Java i łatwość obsługi oraz zdolność C/C++ do bezpośredniego dostępu do platformy bazowej.

Powiązane problemy