为啥防病毒似乎针对特定数字? [关闭]
Posted
技术标签:
【中文标题】为啥防病毒似乎针对特定数字? [关闭]【英文标题】:why does antivirus seem to target specific numbers? [closed]为什么防病毒似乎针对特定数字? [关闭] 【发布时间】:2013-11-09 03:20:32 【问题描述】:当我注意到一些奇怪的事情时,我正试图用 C++ 编写一个程序:每次程序的一部分使用一个接近 2048 的数字(我认为是高于 2001 并且小于 3000)它都会被检测为可疑文件并发送到胸部由“Avast!”。更改变量名称似乎没有什么不同。我正在制作一个结构以供以后添加 这是它的一个sn-p。我可以通过它的外观猜测它从哪里获得检测,但它永远不会打扰编译的可执行文件,除非它具有特定的数字范围 为什么会这样?
int maxstep=2100;
int maaa[2100];
int curinst;
int main()
cout<<"Initializing maaa..."<<endl;
for(int i=0; i<maxstep; i++)
maaa[i]=0;
//cout<<"MEM:"<<i<<" "<<maaa[i]<<endl;
cout<<"starting core"<<endl;
int stepcnt=0;
for(;;)
if(stepcnt<maxstep)
curinst=maaa[stepcnt];
else
cout<<".";
stepcnt=0;
stepcnt++;
【问题讨论】:
这不是关于如何解决编程问题的问题。这是一个关于功能失调的防病毒软件的问题。具体来说,它是关于 Avast!的,可能应该提交给他们的客户服务部门。 这是程序开始运行时,还是编译后? 【参考方案1】:在病毒软件的防御中,这段代码确实做了几件看起来很奇怪的事情。如果我根据病毒的可能性对程序进行评级,那么您发布的代码似乎很有可能。
首先,您将 3 个主要变量声明为全局变量,而不是在任何本地范围内。这并不常见,但可能是必要的。
然后将相同的值 (0) 写入数组的每个元素。如果这是为了初始化数组,使用memset
或calloc
会更好。这个实现对全局内存进行了大量的写入,每一个都可能是一个远存储。如果病毒试图破坏程序状态,它就会这样做。
最后,你的程序进入一个无限循环,在这个循环中从全局内存中读取和写入。这些操作中的每一个都可能是一个远加载,然后是一个远存储。如果病毒扫描程序对每秒远加载和远存储有任何度量标准,那么您的程序将超出限制。
【讨论】:
“远存储”,“远负载”,哦,天哪,自从 16 位时代以来,我就没有听说过。内存通道...(是的,我在这里有点讽刺,自从大约 20 年前受保护的平面寻址成为常态以来,这些东西不再存在了...)无论如何,很高兴在这里看到一些老前辈。 :) 你是对的。这些操作多年前就消失了,并不是这里的具体问题。我在这里引用它们只是为了说明“可能”发生的事情,而不是字面意思。编译器和病毒软件的内部可能对访问全局变量的处理方式不同,但我不知道它可能使用的具体指令。 哦,别把我当回事,只要提到“远”和“近”就足以让我开始了。 ;) 就 C++ 而言,OP 的代码没有任何问题,但我对防病毒软件了解不多,因为我不使用 Windows。整件事不过是个玩笑。 :) 没有冒犯。和你一样,听到有人记得“旧方式”,我更惊讶。 你相信我仍然维护 16 位 Windows 代码吗? :p 不是我的,请注意,但仍然……让我每隔一天就哭一次,尤其是因为我们的新开发充分利用了 C++11 的全部优势。 xD以上是关于为啥防病毒似乎针对特定数字? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章