从结果中可以看到,除了中间那个“f”是我赋值的,上、下两个数都是是堆空间申请后的初始值。当时我就觉得0xffffffcd这个数值应该是系统用来识别堆空间用,这样在释放的时候就可以根据这个数值识别应该回收哪些字节了。这时编译的模式是Debug模式,于是下意识的调用成Release模式,再次编译后竟出现了不同的结果:
0
f
0
我们可以看到Release模式后,堆空间的初始值变成了0,至于为什么变成0我至今也没搞清楚(本人水平有限,如果有知道的朋友还望指出原因)。但马上就跟免杀方面联系到了一起,Debug的调试模式,它的堆空间就有初始值,那的虚拟机环境也可以算是一个调试模式了,那里面的堆空间会不会也是有初始值的呢?于是拿卡巴做了一个实验,证明我的想法是没错的,由此我们就可以利用这一点来突破卡巴的启发式查杀,下面是主要的代码: