web-dev-qa-db-ja.com

なぜアンチウイルスは単純なJavaプログラムをトロイの木馬として検出するのですか?

ちょうど今、私はJavaで非常に単純なコードをテストしていました。奇妙なことに気づきました。プログラムをコンパイルすると、アンチウイルスがそれをトロイの木馬として検出し、jarファイルを削除しました。

さらに、プログラムをコンパイルすることもできません。上記の特性は、コードからstr.replaceAll()を削除しても表示されません。

  1. なぜこうなった?

  2. Javaでどのようなエクスプロイトがあり、どのように修正できますか?

  3. なぜstr.replaceAll()を使用すると、この種の動作が明確に示されるのですか?

私のJavaコードは

public static void main(String args[]) 
{
String str="1000010111111010101010101001111110111010110101000001000000000000000000000000000000000000000000000000000"
    + "111111111111111110000000000000000000000000000000000000000000000000000000000000000";

System.out.println("String len="+str.length()+"  No of ones= "+(str.length()-str.replaceAll("1", "").length()));

} 

アンチウイルス警告 enter image description here

5
A. Sinha

ここで少し推測しますが、avが深く分析できるすべての言語でavが使用するいくつかの一般的なパターンがあり、プログラムに表示されるパターンは、難読化されたjavascriptで見られるエンコードの種類と非常に似ています文字列、それに対していくつかの操作を実行し、最終的にそれを評価することになります)。これは、私たちが話しているヒューリスティックな署名なので、そのようなものになる可能性があります。

1をカウントするコード(具体的にはstr.replaceAll)?

4
broadway

作成したコードは、コンパイル時に、AVがトロイの木馬を検出するために使用する署名と一致します。 Java=プログラムがエクスプロイトである、または害を及ぼす可能性があるという意味ではありません。AVがフラグを立てるほど類似性が強いということだけです。それは、 1と0、またはプログラムでの処理。

1
GdD