Microsoft RES 协议详解与安全 - RES 协议浅析

  • A+
所属分类:lcx

资源

    特指Win32里的PE格式文件的资源,嵌入到PE文件中,可以是Microsoft规定的标准资源(如图标,指针,对话框),也可以是一段多媒体文件,甚至用户可以将任何二进制文件作为资源通过资源工具(设计期的各种快速开发工具,准执行期的Resource Hacker等等)

RES协议

    简而言之,Microsoft推出的一种能使web浏览器访问PE文件的协议,既不属于Internet协议也不是HTML的一部分.其使用格式为:

res:///

    如:res://d:WINDOWSsystem32shdoclc.dll/dnserror.htm

 

    可以利用RES协议检测杀毒软件是否存在,现在的网马基本上必备。

    Microsoft RES 协议生效浏览器范围:IE 4.0 --> IE 6.0。

1.RES的应用测试

    在IE里输入以下url,看看出来了什么?

  1. res://shell32.dll/2/131
  2. res://C:WINDOWSsystem32driversaes.sys/16/1
  3. res://cmd.exe/16/1
  4. res://shell32.dll/16/1

    是不是可以用来分析 exe dll sys 的版本呢?只要符合 Win32 PE 格式的文件都可以用 res:// 协议来分析。其中第二个数字是资源类型,在 VC++ 的 winuser.h 里有定义:

#define

RT_CURSOR

MAKEINTRESOURCE(1)

#define

RT_BITMAP

MAKEINTRESOURCE(2)

#define

RT_ICON

MAKEINTRESOURCE(3)

#define

RT_MENU

MAKEINTRESOURCE(4)

#define

RT_DIALOG

MAKEINTRESOURCE(5)

#define

RT_STRING

MAKEINTRESOURCE(6)

#define

RT_FONTDIR

MAKEINTRESOURCE(7)

#define

RT_FONT

MAKEINTRESOURCE(8)

#define

RT_ACCELERATOR

MAKEINTRESOURCE(9)

#define

RT_RCDATA

MAKEINTRESOURCE(10)

#define

RT_MESSAGETABLE

MAKEINTRESOURCE(11)

#define

RT_VERSION

MAKEINTRESOURCE(16)

#define

RT_DLGINCLUDE

MAKEINTRESOURCE(17)

#define

RT_PLUGPLAY

MAKEINTRESOURCE(19)

#define

RT_VXD

MAKEINTRESOURCE(20)

#define

RT_ANICURSOR

MAKEINTRESOURCE(21)

#define

RT_ANIICON

MAKEINTRESOURCE(22)

#define

RT_HTML

MAKEINTRESOURCE(23)

    res协议,可以用来提取图片、AVI、光标、图标等。

2.IE中RES协议的详细用法

    "RES://"协议是IE 4.0预定义的一个协议,它的具体语法为:

RES://resource file[/resourcetype]/resource id

    resource file:含有资源的模块的文件名,请注意这里的路径分隔符只能使用“”,而不能使用“/”。

    Resourcetype:资源类型,它是一个字符串或数字。常用的资源类型都对应着一个数,比如BITMAP对应着RT_BITMAP=2,这些常数定义在VC++的WINUSER.H可以找到,如果资源类型是数字,要在数字前面加上“#”号。Resourcetype可以省略,默认为RT_HTML=23,即HTML文件。RT_HTML在VC++ 5.0中没有定义,但现在已经广泛使用。

    Resource id:资源的ID号。在这里要注意一个问题:在VC++中定义资源的时候,通常是使用数字常量,比如ID_BITMAP1,它代表的数字可能是101。而在使用res://协议时,不能使用ID_BITMAP1(在DLL中并没有这个符号),而必须使用#101来代表资源。例如要显示一个位图资源,其ID号为101,应为RES://mydll.dll/#2/#101。

3.RES资源探测工具

    有个叫ResHacker的小工具(或者:eXeScope),可以探测dll、exe和sys文件里的资源。

4.RES的安全问题

    res 可以读取本地程序的资源文件,存在泄漏信息的安全隐患,出于这个安全方面的考虑,目前只有IE和利用IE内核的浏览器还在默认持这个协议,其他浏览器已经把这个协议废了。

    安全方面的PoC,见:js利用res协议探测客户端软件(http://hi.baidu.com/%D3%F0%E9%E4%C8%CA/blog/item/0906918285c806aa0cf4d2df.html)。

5.RES巧用,篡改改about:blank显示的网页

    有些朋友经常抱怨,自己把IE的主页设置为了 about:blank 还是进入别的站点。我们应该怎样面对这种烦人的现象呢?

    首先我们要先看一下设置为 about:blank 后打开IE系统是怎样工作的。

    IE会进入一个空白页面,其实这个页面其实是指向了一个地址,默认是 res://mshtml.dll/blank.htm。

    这个地址是可以修改的,其修改地址就在注册表中相应注册键是:

    HKEY_LOCAL_MACHINESOFTWAREMicrosoftInternet ExplorerAboutURLs

    进去看看吧,把他修改回默认的值或者你喜欢的网页都可以。

    这种情况下往往是由于RES协议造成的。说到RES就不得不提一下RES病毒。最近网上在流传杀不干净得木马吧。

    这些也就是一些杀毒软件杀不完全病毒造成的,用杀毒软件杀毒后,过不了多久就会继续中标。此类木马利用了RES协议的漏洞,手段很隐蔽。

    下面我们看一下RES木马的原理。

    我们在用IE浏览网页的时候,系统会调用shdoclc.dll中的资源,windows系统规定在载入dll文件的时候,如果dll文件含有dllmain函数就对它进行初始化,但是正常的shdoclc.dll文件是没有dllmain函数的,他只是包含了各种资源而已。RES木马包含的dllmain函数,利用这一点,我们就会在浏览网页的时候自动中招。

    我们了解了RES木马原理后,我们便可以把系统的RES给找出来了。原shdoclc.dll文件没有任何执行代码,其函数输出表应该为空,但是木马就会调用系统的API函数。我们根据这点来查出系统的RES内鬼。

    我们要使用的工具是 Dependency Walker (或:eXeScope、LordPE、超级巡警病毒分析工具v1.4,等其他同类软件)来查看其API输出表即可。

    运行解压后的文件,使用"FLIE-OPEN"打开shdoclc.dll文件。

    默认地址在:c:windowssysytm32shdoclc.dll。

    查看左面的函数输出表如果为空表明你没有中这种毒。

    如果已经中标了,重启到安全模式,用sfc命令恢复即可,或者从别人机器拷贝一个也可以。

参考资料:

  1. http://msdn.microsoft.com/en-us/library/aa767740(VS.85).aspx
  2. http://www.dormforce.net/Blog/electronixtar/archive/2006/11/14/11614.aspx
  3. http://blog.csdn.net/freexploit/archive/2005/07/02/410784.aspx

留言评论(旧系统):

佚名 @ 2014-01-02 15:04:06

请问chrome怎么能检测杀毒软件?

本站回复:

XSS检测客户端环境,javascript 检测客户端文件、系统环境:http://lcx.cc/?i=3065

文章来源于lcx.cc:Microsoft RES 协议详解与安全 - RES 协议浅析

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: