0

当我注意到一些奇怪的事情时,我正试图用 C++ 编写一个程序:每次程序的一部分使用接近 2048 的数字(我认为高于 2001 并且小于 3000)它都会被检测为可疑文件并通过“阿瓦斯特!”。更改变量名称似乎没有什么不同。我正在制作一个结构来添加东西,这是它的一个片段。我可以通过它的外观猜测它是从哪里获得检测的,但它永远不会打扰编译的可执行文件,除非它具有特定的数字范围,为什么会这样?

 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++;
}
4

1 回答 1

1

在病毒软件的防御中,这段代码确实做了几件看起来很奇怪的事情。如果我根据病毒的可能性对程序进行评级,那么您发布的代码似乎很可能。

对于初学者,您将 3 个主要变量声明为全局变量,而不是在任何本地范围内。这并不常见,但可能是必要的。

然后将相同的值 (0) 写入数组的每个元素。如果这是为了初始化数组,memset或者calloc使用起来会更好。这个实现对全局内存进行了大量的写入,每一个都可能是一个远存储。如果病毒试图破坏程序状态,它就会这样做。

最后,你的程序进入一个无限循环,在这个循环中从全局内存中读取和写入。这些操作中的每一个都可能是一个远加载,然后是一个远存储。如果病毒扫描程序对每秒远加载和远存储有任何度量标准,那么您的程序将超出限制。

于 2013-11-09T03:43:16.783 回答