为什么这段简短的C代码被检测为病毒?

4

我刚发现一些杀毒软件将这段代码检测为病毒。

#include <stdio.h>

char* func(char *str) {
    return str;
}

void main() {
    char *str = "What the hack\n";
    char *str2 = func(str);
    printf(str2);
}

病毒总扫描结果图像:

enter image description here

你知道为什么吗?


1
可能是因为其中有“hack”一词?无论如何,我不确定它是否与编程有关? - paxdiablo
1
@user3629249,使用char*printf编译正常。如果您无法控制内容,则可能不是一个好主意,但在这种情况下,您绝对可以控制它。 - paxdiablo
1
也许我应该说:无法干净地编译。这是我的 gcc 编译器对 printf() 语句的警告:warning: format not a string literal and no format arguments [-Wformat-security] - user3629249
为什么我的结果和你的结果不同?@Danh。请点击链接查看:https://virustotal.com/ko/file/e6c4c735777ef16780f094f9f979999dd66752dd595e235897c4cedf42e76bbb/analysis/1484629341/ - SeetFack
1
Malware.Gen 意味着“通用”检测,而不是基于签名的检测。这可能意味着许多事情,例如过高的熵值表示压缩/加密数据,不常见的节/导入/资源/...布局,非常小的可执行文件,EOF 数据等等。 - user45891
显示剩余14条评论
1个回答

0

问题:

您的程序是一个可执行文件,是由您编译而成的。这意味着它没有任何背景。例如,如果您的程序与已验证的发布者相关联,那么您的程序将引起更少的警报。请参阅此帖子以获取更多详细信息。 此外,您的应用程序在运行时是不可见的;也就是说,它不允许用户输入。这通常是一种“红旗”,会被一些杀毒软件检测到。

证明:

当我编译您的初始程序时,它看起来像这样: as-is 然而,我对程序进行了修改:

#include <stdio.h>

char* func(char *str) {
    return str;
}

void main() {
    char str[] = "What the heck\n";
    char *str2 = func(str);
    printf(str2);
}

程序看起来像这样(单词被更改为“heck”并以不同的方式初始化):

slightly altered program

请注意它看起来完全一样。
现在,当我像这样修改程序时:
#include <stdio.h>

//char* func(char *str) {
//    return str;
//}

void main() {
    char str[] = "What the heck\n";
    //char *str2 = func(str);
    //printf(str2);
}

结果看起来像这样:

near-empty program


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接