小红伞和NOD32基于源码的免杀经验总结
小红伞和NOD32的杀毒引擎是非常厉害的,尤其是他们的启发式杀毒,简直快把病毒木马逼到了绝路。由于需要,这两天我和CG(一个高手)对一个远控软件进行了小红伞和NOD32的免杀。一开始很自然的拿出CCL对PE文件的病毒特征码进行定位,但是却定位到了导入表和PE文件头上(这两款杀毒软件的确太狠了)。没有办法,常规的修改指令的方法是行不通了。GOOGLE了一下,发现网上有利用重构导入表的方法来做小红伞和NOD32的免杀。但这需要对PE文件有很深的了解,还要有足够的时间。呵呵,恰好这两点我都不具备。但幸运的是——咱有源代码。 我想有源代码得情况下进行杀软的免杀是一件很easy的事情,但其实不是这么简单。我和CG的做法是对函数进行注释屏蔽,然后交给杀软查杀,如果不查杀被注释的函数被杀软定位了。首先,进入入口函数逐个屏蔽,找到问题函数,再进入到函数中去把其子函数这个屏蔽,这样递归屏蔽下去。(在这个过程中,我喜欢深度优先进行函数屏蔽,而CG喜欢广度优先,其实两种方法效率都差不多。都纯属示体力活)。
最终,我们可以找到杀毒软件盯上的API函数(这些函数往往是一些敏感函数,如CreateRemoteThread,VirtualAllocEx这样的函数)。
接下来,就是对API函数进行替换。替换有四种方法:
1.GetProcAddress的方法,即动态导入函数地址的方法。
2.同功能函数替换。有许多函数功能是相似的,比如GetSystemDirectory函数可以用DoEnvironmentSubst来进行替换,strcpy可以用memcpy替换。
3.用Shellcode实现GetProcAddress。 小红伞和NOD32的启发式杀毒有时候连动态导入函数这种方法都可以进行定位。只要用GetProcAddress来获取那个API的地址就被杀,而且这个时候又没有可以替换的其他函数,所以要用shellcode的方法来实现GetProcAddress
4.内联函数替换。 一些较简单的函数如果被杀,就可以采用这种方法。
积累的经验总结:
1.在编写远控软件这种程序时,起初设计就应该将敏感的API用动态导入的方法进行获取。这样,就不容易被杀毒软件抓到特征码。
2.动态导入函数地址的时候可以对函数名进行加密。
3.进行函数替换后最好能进行一下测试。全都替换后再进行测试如果遇到程序错误往往很难定位错误点。
总结
以上是生活随笔为你收集整理的小红伞和NOD32基于源码的免杀经验总结的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 从内存中加载并运行exe(两种方法)
- 下一篇: 源码免杀-过启发式的思路