ちょうど今、私はJavaで非常に単純なコードをテストしていました。奇妙なことに気づきました。プログラムをコンパイルすると、アンチウイルスがそれをトロイの木馬として検出し、jarファイルを削除しました。
さらに、プログラムをコンパイルすることもできません。上記の特性は、コードからstr.replaceAll()
を削除しても表示されません。
なぜこうなった?
Javaでどのようなエクスプロイトがあり、どのように修正できますか?
なぜ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()));
}
ここで少し推測しますが、avが深く分析できるすべての言語でavが使用するいくつかの一般的なパターンがあり、プログラムに表示されるパターンは、難読化されたjavascriptで見られるエンコードの種類と非常に似ています文字列、それに対していくつかの操作を実行し、最終的にそれを評価することになります)。これは、私たちが話しているヒューリスティックな署名なので、そのようなものになる可能性があります。
1をカウントするコード(具体的にはstr.replaceAll
)?
作成したコードは、コンパイル時に、AVがトロイの木馬を検出するために使用する署名と一致します。 Java=プログラムがエクスプロイトである、または害を及ぼす可能性があるという意味ではありません。AVがフラグを立てるほど類似性が強いということだけです。それは、 1と0、またはプログラムでの処理。