Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3178773
  • 博文数量: 797
  • 博客积分: 10134
  • 博客等级: 上将
  • 技术积分: 9335
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-22 22:57
个人简介

1

文章分类

全部博文(797)

文章存档

2022年(1)

2021年(2)

2017年(2)

2016年(1)

2015年(4)

2014年(1)

2013年(6)

2012年(6)

2011年(10)

2010年(26)

2009年(63)

2008年(61)

2007年(51)

2006年(563)

我的朋友

分类:

2006-09-18 20:00:08

转:
NOD32杀毒是我遇到的最难应付的免杀了。
无论我怎么去特征码定位等等都无效,
相比之下,这样处理后,几乎卡巴,瑞星,江民,金山都已经认不出来了。
但是还是过不了NOD32

一次意外的发现,添加如下代码
   Xor Ecx,Ecx
1: Dec Ecx
2: Loop 2   '1和2分别代表的是地址
    Loop 1
再给NOD32查杀,只见CPU100%,几秒后,不杀了,当做没发现。
是不是成功了呢?没有,当程序这样一改,基本上就废了。

但是能不能用一种条件让这段代码执行呢?如果执行了段代码,那样NOD32就会不杀。再看看NOD32的进程占CPU那么大,可能就是虚拟执行占用大量的CPU,
怎么判断是否在虚拟状态下执行呢?能不能够通过时间来判断呢?

方法如下:
首先通过GetTickCount得到一个时间值A并把它保存起来,然后Sleep 1秒,再次使用GetTickCount得到1秒后的时间值B,最后判断如果B减去1秒小于A,则在虚拟执行环境中……知道怎么做了吧?否则正常执行。

经过多次测试,如果虚拟执行中Sleep100秒跟没有Sleep一样,明显,Sleep 1秒可以忽略不计,也就是说A的值几乎跟B的值是相等的,因为GetTickCount精度不太高,所以不能判断相等做为依据,只能判断大于或小于。但是在实际运行中,Sleep 1秒后B,会比A大很多,即B-1<=A,

简单地说,通过比较这两个时间的不同来判断在哪种环境下执行。看明白了没?
阅读(2870) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2009-03-13 22:46:45

NOD32特征码一般有二处地方,而且不在连续的地址上,所以很多人找不到它的特征码,这下你明白为什么NOD32难免杀的原因了吧。

chinaunix网友2009-03-13 22:44:16

其实NOD32的特征码一般都有几处,用排除法耐心定位,一般都可以定位出来的。