资源:
特指Win32里的PE格式文件的资源,嵌入到PE文件中,可以是Microsoft规定的标准资源(如图标,指针,对话框),也可以是一段多媒体文件,甚至用户可以将任何二进制文件作为资源通过资源工具(设计期的各种快速开发工具,准执行期的Resource Hacker等等)
RES协议:
简而言之,Microsoft推出的一种能使web浏览器访问PE文件的协议,既不属于Internet协议也不是HTML的一部分.其使用格式为:
res://<Windows文件路径>/<资源名称>
如:res://d:\WINDOWS\system32\shdoclc.dll/dnserror.htm
可以利用RES协议检测杀毒软件是否存在,现在的网马基本上必备。
Microsoft RES 协议生效浏览器范围:IE 4.0 --> IE 6.0。
1.RES的应用测试
在IE里输入以下url,看看出来了什么?
- res://shell32.dll/2/131
- res://C:\WINDOWS\system32\drivers\aes.sys/16/1
- res://cmd.exe/16/1
- 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_MACHINE\SOFTWARE\Microsoft\Internet Explorer\AboutURLs
进去看看吧,把他修改回默认的值或者你喜欢的网页都可以。
这种情况下往往是由于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:\windows\sysytm32\shdoclc.dll。
查看左面的函数输出表如果为空表明你没有中这种毒。
如果已经中标了,重启到安全模式,用sfc命令恢复即可,或者从别人机器拷贝一个也可以。
参考资料:
- http://msdn.microsoft.com/en-us/library/aa767740(VS.85).aspx
- http://www.dormforce.net/Blog/electronixtar/archive/2006/11/14/11614.aspx
- http://blog.csdn.net/freexploit/archive/2005/07/02/410784.aspx
留言评论(旧系统):