Emet软件保护研究

2012-08-28 09:21:52 7 508
什么是Emet:

      EMET(增强减灾体验工具)是Enhanced Mitigation Experience Toolkit的缩写。该软件是微软为应对互联网中层出不穷的漏洞而推出的一款安全工具。它通过数据执行保护(DEP)、结构化异常处理覆盖保护(SEHOP)和随机地址空间分配(ASLR)等技术使用户即使在未安装补丁的情况下也可以免受攻击。

      简单的说, Emet是微软开发的一款工具,该工具可以对系统里指定的进程进行保护,防止其被恶意溢出攻击。

      官方链接:http://blogs.technet.com/b/srd/a ... ducing-emet-v3.aspx


Emet自调用研究:

      Emet毕竟是第三方程序,如果能实时配置在自己程序内,则可以实时保护自己的程序免遭第三方恶意攻击。Emet对软件的保护过程很简单,需要将自带的EMET.dll注入到目标进程内,按照事先设定的规则启动相关保护即可。明白了这个道理,我们就可以自己调用了。
      首先,将EMET.dll内的一个节点处理掉,强制其开启保护:


        下面这里修改为nop
        003E7767     sub     esp, 20C
        003E776D     mov     eax, dword ptr [3EED18]
        003E7772     xor     eax, ebp
        003E7774     mov     dword ptr [ebp-4], eax
        003E7777     cmp     dword ptr [3EF168], 0
        003E777E     nop
        003E777F     nop
        003E7780     call    dword ptr [<&KERNEL32.GetCurrent>; [GetCurrentProcessId


      上面的2个nop是我们修改的,目的是强制其开启保护。

      下面是调用代码,把这段代码放在自己程序里执行,便可以达到被保护的目的:

        HMODULE hMod = LoadLibrary("EMET.dll");
        int (__stdcall * NotifyShims)(int a, int b);
        (FARPROC & )NotifyShims = GetProcAddress(hMod, "NotifyShims" );
        if (NotifyShims)
                NotifyShims(1, 0);

关于作者

评论7次

要评论?请先  登录  或  注册