プログラムの実行を傍受できるようなウイルス対策プログラムを Java で作成することは可能ですか? Java で OS をこれほど深く制御できますか?
更新: c# はどうですか? 同じ制限が適用されますか、それともより良い方法ですか?
OSにそのような影響を与える可能性があります。プラットフォームの独立性を失うか、少なくとも特定のプラットフォームごとにコードを作成する必要があるという問題があります。これは、そのようなアクションがJNIで達成できるシステムへの非常に深いアクセスを必要とするためです。 OSに使用する方法。
Java では、主に VM を使用し、OS からシールドされているため、そのような制御は可能ではないと思います。というか、OS は Java VM からシールドされています。これは仕様によるものです。
明確にするために編集して追加します。言語を混在させずに、ソリューション全体をJavaで記述したいと考えています。
JNIでも機能するとは思いません。
OSが新しいプロセスを開始する(またはファイルなどに書き込む)ときに「インターセプト」する場合は、OSにフックする何らかのドライバーまたはカーネルモジュールを作成する必要があります。そのドライバー/モジュールは、最も確実にネイティブのコンパイル済みコードで記述されています。したがって、ここではOSが担当し、最終的にはネイティブモジュールを呼び出します。
ですから、私が見ているように、Javaはここにも関与していません。
それはとにかく基本的なアプローチです。Linuxのようpamに、セキュリティとファイル/プロセスのアクセス許可に関連するほとんどすべてのことを実行するように構成でき、他のプロセスを呼び出して入札を行うことができるものを使用できる場合があります。OSが開始しようとする新しいプロセスごとにJVMインスタンスを実行するために、かなりフェッチされているようです。
HalloDu が言ったように、これは JNI を使用することで技術的に可能です。ただし、IIRC、ほとんどのウイルス対策プログラムは、何らかのドライバーを使用して、開いているファイルをインターセプトし、OS がファイルを使用し続けることを許可する前にそれらをスキャンします。この場合、(C または場合によっては C++ で) 記述しなければならないネイティブ コードの量はかなりの量になり、Java コードのサイズを超える可能性があります。
低レベルのアプリを作成するときは、C に固執します。ただし、GUI などを高レベル言語でコーディングすることは理にかなっているかもしれませんが、Java も私の選択ではありません。個人的には、言語を混在させるのは面倒なので、すべて C で行います。言語を混在させる必要がある場合、C と Python を選択します。これは、 ctypesを使用すると C とのインターフェイスが非常に簡単になるためです。
独自のアンチウイルスを作成するポイントは何ですか?大変な作業ですが、もっと厄介なものをブロックして取り除くポータブルなものにしたらいいと思います。永続化する必要がある場合は、ClamAV、これはオープンソースでかなり優れたAV(リアルタイム保護なし)ですが、C++でプログラムされています。
JNIで可能です。ただし、ほとんどの場合、GUIにはJavaを使用し、その他の種類のウイルス対策作業にはC /C++を使用します。
GUI と多くのロジックを Java で記述し、スキャンを実行する C または C++ バックエンドを用意するのが最善の策かもしれません。
その後、プラットフォーム全体でフロントエンドを再利用し、プラットフォーム固有のものを下位レベルに保持できます。
このようにして、Java のプラットフォーム非依存性と使いやすさ、および基盤となるプラットフォームに直接アクセスできる C/C++ の機能という、両方の言語の長所を利用できます。