背景
之前写了一套免杀也用了挺久了,难免被检测。再加上之前为了研究各种奇淫技巧往里面塞了很多东西,现在看都看不懂,于是痛下决心重新写一套免杀。经过一个小时的奋斗总算是出炉了。
先看效果:
原理
这次免杀用的是CreateTimerQueue
函数来实现shellcode上线,具体可以参考GitHub的AlternativeShellcodeExec项目。里面收录了很多上线方法。
与此同时,在免杀的时候还注意到了memcpy
函数在复制shellcode时会被一些沙箱检测,就决定自己写一个实现,因为比较简单就不讲解了,直接贴代码:
void* memmv(void* dst, const void* src, int count)
{
void* ret = dst;
if (dst <= src || (char*)dst >= ((char*)src + count)) {
while (count--) {
*(char*)dst = *(char*)src;
dst = (char*)dst + 1;
src = (char*)src + 1;
}
}
else {
dst = (char*)dst + count - 1;
src = (char*)src + count - 1;
while (count--) {
*(char*)dst = *(char*)src;
dst = (char*)dst - 1;
src = (char*)src - 1;
}
}
return(ret);
}
这段代码还有很多不足之处,但是上线shellcode是没问题的。所以就没管一些可能出现的bug。
写完之后上传vt测试发现:很多杀软都报DeepScan.Shellcode
。而我对shellcode的加密是参考的一个GitHub的开源项目的,所以简单的加了一下混淆,效果好了不少。
最后再来张经典全家桶:
收尾
这篇文章写的还是比较草率地,但是很多内容不方便公开出来。相信各位师傅根据上面的方法,再加上自己的经验肯定能够绕过杀软检测的!