- 时间:2021-08-04 02:26 编辑: 来源: 阅读:
- 扫一扫,手机访问
摘要:vbscript LoadPicture函数使用方法与漏洞利用
[url=http://msdn.microsoft.com/zh-cn/library/windows/desktop/ms693724%28v=vs.85%29.aspx]OleLoadPicture[/url]函数,查文档可知返回的是[url=http://msdn.microsoft.com/en-us/library/windows/desktop/ms680762%28v=vs.85%29.aspx]IPictureDisp[/url]接口。不过后来我发现了更简单的方法,那就是查VB的函数声明(谁让它们是一家人呢),在VB的对象浏览器中查找LoadPicture函数:
Function LoadPicture([FileName], [Size], [ColorDepth], [X], [Y]) As IPictureDisp虽然VBS的LoadPicture函数比VB的简单,但是返回值应该是一样的。
好了,知道返回的是IPictureDisp接口,文档说它支持下面的属性:
| Property |
Type |
Access |
Description |
| Handle |
[b]OLE_HANDLE[/b] ([b]int[/b]) |
R |
The Windows GDI handle of the picture |
| hPal |
[b]OLE_HANDLE[/b] ([b]int[/b]) |
RW |
The Windows handle of the palette used by the picture. |
| Type |
[b]short[/b] |
R |
The type of picture (see [url=http://msdn.microsoft.com/en-us/library/windows/desktop/ms687195(v=vs.85).aspx]PICTYPE[/url]). |
| Width |
[b]OLE_XSIZE_HIMETRIC[/b] ([b]long[/b]) |
R |
The width of the picture. |
| Height |
[b]OLE_YSIZE_HIMETRIC[/b] ([b]long[/b]) |
R |
The height of the picture. |
我们只关心Width和Height,它们分别表示图片的宽和高,但是它们的单位不是像素(Pixel),而是Himetric,我们要做的是把Himetric换算成Pixel。
首先把Himetric换算成英寸(Inch),1 Himetric = 0.01 mm,1 Inch = 2.54 cm,所以1 Inch = 2540 Himetric。
然后从Inch换算成Pixel,1 Inch等于多少Pixel呢?这是由系统的DPI(Dot Per Inch)设置决定的,默认值是96。
现在知道2540和96是怎么来的了吧?不过上面的代码存在两个问题:第一,使用了2540/96的近似值,可能会有误差;第二,使用了DPI的默认值96,而DPI的值是可以在控制面板中修改的。
VBS中LoadPicture函数的正确用法是:
[url=http://demon.tw/programming/vbs-loadpicture.html]http://demon.tw/programming/vbs-loadpicture.html[/url]
微信版

扫一扫进微信版
返回顶部