当我注意到一些奇怪的事情时,我试图用 c++ 制作一个程序:每次程序的一部分使用接近 2048 的数字(我认为高于 2001 年且小于 3000)时,它都会被检测为可疑文件并通过"Avast! 更改变量名称似乎没有区别。我正在制作一个结构以稍后添加内容这是其中的一个片段。我可以通过它的外观猜测它从哪里获得检测,但它永远不会打扰编译的可执行文件,除非它有特定的数字范围为什么会这样?
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++;
}
在病毒软件的防御中,这段代码确实做了几件看起来很奇怪的事情。如果我对一个程序是病毒的可能性进行评级,你发布的代码似乎很有可能。
首先,您将 3 个主变量声明为全局变量,而不是在任何局部范围内。这并不常见,但可能是必要的。
然后,将相同的值 (0) 写入数组的每个元素。如果这是为了初始化数组,最好使用 memset
或 calloc
。此实现对全局内存执行大量写入,每个写入可能都是远存储。如果病毒试图破坏程序状态,它就会这样做。
最后,程序进入无限循环,其中从全局内存读取和写入。这些操作中的每一个都可能是一个远负载,后跟一个远存储。如果病毒扫描程序在远负载和每秒远存储方面具有任何类型的指标,则您的程序将远远超出限制。