为什么防病毒软件会将简单的 Java 程序检测为木马?

信息安全 恶意软件 开发 爪哇 杀毒软件 木马
2021-09-11 21:46:39

刚才我在用 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()));

} 

防病毒警告 在此处输入图像描述

2个回答

这里只是一点猜想,但 av 可能会为它可以深入分析的所有语言使用一些通用模式,并且程序中显示的模式与在混淆的 javascript 中看到的那种编码非常相似(它们将有一个字符串,对其执行一些操作,并最终评估它)。这是我们正在谈论的启发式签名,所以它可能是这样的。

如果没有计算 1 的代码(特别是对 的调用str.replaceAll),签名是否仍然会触发?

您编写的代码在编译后与您的 AV 用于检测特洛伊木马的签名相匹配。这并不意味着您的 java 程序是一个漏洞,或者它可能造成任何伤害,只是有足够强的相似性,您的 AV 已经标记了它。它可能是一长串的 1 和 0,或者你的程序用它做什么。