これは、Javaアプリケーションが実行できる可能なアクションを制限する方法の一般的な概要です。基本的に、Javaアプリケーションが「不活性」(有害なアクションを実行できない)であるかどうかをテストしているため、おそらくマルウェアではありません。
他の人が指摘しているように、これは必ずしもマルウェアかどうかを教えてくれるわけではありません。アプリは、ポップアップウィンドウのような厄介なことをする可能性があります。おそらく最良の兆候は、アプリケーションが信頼できる作成者によってデジタル署名されているかどうかを確認することです。そうでない場合-恐れてください。
クラスファイルを逆アセンブルして、アプリケーションが使用するJavaAPIを判別できます。JavaアプリがOSを使用するポイントを探しています。Javaは仮想マシンを使用するため、Javaアプリケーションが潜在的に有害なアクションを実行する可能性のある明確なポイントがあります。これらはさまざまなOS呼び出し(ソケットのオープンやファイルの読み取りなど)への「ゲートウェイ」です。
すべてのAPIを列挙するのは難しいため、同じOSアクションを実行するさまざまな関数には同じ権限が必要です。しかし、Javaのドキュメントは完全なリストを提供していません。
Javaアプリはネイティブライブラリを使用していますか?使用している場合は、大きな危険信号です。
JVMには、任意のコードを実行したり、ネイティブシステムAPIを使用したりする機能はありません。特に、レジストリを変更する機能はありません(PCマルウェアの一般的なアクション)。Javaアプリケーションがこれを実行できる唯一の方法は、ネイティブライブラリを使用することです。通常、Javaで記述された通常のアプリケーションでネイティブコードを使用する必要はありません(デバイスを使用する必要がある場合を除く)。
System.loadLibrary()またはSystem.load()またはRuntime.loadLibrary()またはRuntime.load()を確認します。これは、VMがネイティブライブラリをロードする方法です。
ネットワークまたはファイルシステムを使用していますか?
java.io、java.netの使用を探します。
システムコールを実行しますか(Runtime.exec()を介して)
java.lang.Runtime.exec()またはProcessBuilder.exec()の使用を確認できます。
キーボード/マウスを制御しようとしますか?
制限付きポリシーのJVMでアプリケーションを実行し(これを行うための手順/ツールは必要なほど単純ではありません)、何が失敗するかを確認することもできます(Oracleのセキュリティチュートリアルを参照)-確実にする唯一の方法は分解であることに注意してください、アプリが一度は有害なことを何もしないからといって、将来的には害がないという意味ではありません。
これは確かに簡単なことではなく、見る必要のある場所がいくつあるかを知って驚いた(たとえば、1つだけでなく複数のJava関数がネイティブライブラリをロードする)。