jlyckong00 发表于 2011-8-30 16:25:28

远控免杀的一些经验

先来一点感慨,朋友们学免杀眼光不要仅仅看到我们的木马,而是从免杀的过程中学习程序语言,这样才能有收获有提高!看到以前的很多关于源码免杀的教程,无非就是代码段的加花,字符串的变构,输入表函数动态调用等死方法,以至于很多朋友源码免杀的时候直接套用上述方法,而不去理解源代码、熟悉API函数等,这样永远只能原地踏步。。。

      举个例子:
      一般我们动态调用函数(以MessageBoxA为例)是下面这样
   typedef int (WINAPI *MessageBoxAT)
    (
      HWND hWnd,
      LPCSTR lpText,
      LPCSTR lpCaption,
      UINT uType
   );
    MessageBoxAT 自定义= (MessageBoxAT)GetProcAddress(LoadLibrary("user32.dll"),"MessageBoxA");
   
   那么很多人遇到杀毒软件(比如360的QVM)查杀 strrev 这个函数。然后发现这个函数定义的格式不一样,脑袋就死机了。
   
   从学习程序语言方面来说,其实方法可以是重构一个和 strrev 这个函数功能相同的自定义函数。例如

   char * FZ_zfc(char * str)
   {
             int len = 0;
             while(*(str + (++len)) != '\0');
             int i , l , j ;
             for(i = 0 , j = len/2 , l = len - 1 ; i < j ; i++)
                  {
                               *(str + i) = *(str + i) ^ *(str + l - i);
                               *(str + l - i) = *(str + i) ^ *(str + l - i);
                               *(str + i) = *(str + i) ^ *(str + l - i);
                  }
            return str;
      }
   
   当然,如果你不会,那么当时你的思路是怎样的呢?你是否想到杀毒软件为什么会查杀这个函数?你是否由此想到杀毒高启发查杀的本质?你是否由此想到以后写程序或者免杀如何去避免高启发查杀?

   好了现在我百度搜索这个函数,原来strrev的功能就是把字符串的所有字符的顺序颠倒过来(不包括空字符NULL)。原来这个函数是我们免杀字符串时可能用到的。但是正常的软件会用这个函数吗?估计很少很少。

    我们可以设想一下:高启发查杀是否是字符串或者代码段或者输入表满足一定的条件后,当输入表出现strrev这个函数后就启发为木马呢?

    于是我们将源码中所有使用strrev反转字符串的地方还原,或者用其他方法变构字符串,我发现,木马已经免杀这里了。

    由此我们想到高启发查杀就是一定的条件加上敏感API函数形成的规则查杀。这样就可以解释,为什么定位高启发查杀的软件很多时候总是定位到输入表的函数了。

    为了避免高启发查杀,那么我们在处理源码的时候,尽量不用高敏感的API函数,即使必须要使用,预先可以动态调用一下,这样对于以后的免杀来说,相对要轻松的多。

    时间有限,暂时就说到这里吧,2月的时候发了“关于远控免杀的一些经验”一文,当时仅仅只是感慨一下,没有想到有很多朋友比较关注,我觉得我应该做点什么了,于是写下此文,希望对你有所帮助。转载请申明。
页: [1]
查看完整版本: 远控免杀的一些经验