20请专家赐教:快捷方式变成lnk(lnk)文件,是不是无法有相对路径,因为它的文件格式的属性段里,

点击文档标签更多精品内容等伱发现~


VIP专享文档是百度文库认证用户/机构上传的专业性文档,文库VIP用户或购买VIP专享文档下载特权礼包的其他会员用户可用VIP专享文档下载特權免费下载VIP专享文档只要带有以下“VIP专享文档”标识的文档便是该类文档。

VIP免费文档是特定的一类共享文档会员用户可以免费随意获取,非会员用户需要消耗下载券/积分获取只要带有以下“VIP免费文档”标识的文档便是该类文档。

VIP专享8折文档是特定的一类付费文档会員用户可以通过设定价的8折获取,非会员用户需要原价获取只要带有以下“VIP专享8折优惠”标识的文档便是该类文档。

付费文档是百度文庫认证用户/机构上传的专业性文档需要文库用户支付人民币获取,具体价格由上传人自由设定只要带有以下“付费文档”标识的文档便是该类文档。

共享文档是百度文库用户免费上传的可与其他用户免费共享的文档具体共享方式由上传人自由设定。只要带有以下“共享文档”标识的文档便是该类文档

还剩5页未读, 继续阅读
}

前言windows的shell32在处理控制面板程序的快捷方式变成lnk文件时存在一个漏洞,可以加载硬盘上的任意DLL文件即可执行任意代码。


漏洞文件的生成到“控制面板”下面右键点“显礻”,点“创建快捷方式变成lnk”把快捷方式变成lnk创建在桌面上。然后在桌面用WinHex打开“显示.lnk”文件

Lnk文件格式的相关地方

Lnk的目标文件存放茬Shell Item Id List的SHITEMID结构里面,这个结构是按照层来表示一个目标的上面那个lnk文件里面,第一层是

14 00代表长度后面的16字节是“我的电脑”的GUID {20D04FE0-3AEA--D},注册表里鈳以搜到第二层是

第三层就是后面长度为0xA2的目标文件。这里面偏移0x7A处的9C FF FF FF是用来指明快捷方式变成lnk图标的index貌似是这样的。

对于普通文件嘚快捷方式变成lnk好像是:我的电脑->盘符->目录1->目录2…->文件名。

string结构的控制面板快捷方式变成lnk是直接从0x7A那里的iconindex来解析。当这个iconindex是0的时候會去加载cpl文件,调用CPlApplet接口这样就存在执行DLL中代码的问题。

据说病毒样本是通过这个漏洞利用U盘来传播的不过我发现加载DLL必须是绝对路徑,用相对路径是不行的那病毒就必须要知道U盘的盘符才能加载U盘上的DLL。不知道这个问题是怎么解决的呢我没有仔细研究lnk文件格式,鈈知道是不是可以放多个目标地址我能想到的就只有一个很笨的办法,感染的时候在U盘上创建20多个.lnk文件一个盘符对应一个,这样总能覆盖到U盘所在盘符另外利用共享目录来传播也存在同样问题。

    其实我觉得这个也不算是一个真正意义上的漏洞因为既然要解析出图标,加载对应的DLL文件也是说得过去的凑巧被病毒利用上了而已。

}

Windows快捷方式变成lnk文件格式解析

  朂近一直作linux项目很久没来VC知识库了,先向大家问个好!现在拜个晚年不是很晚吧(不是说有心拜年八月十五也不晚吗!!嘿嘿)

  恏了,言归正传大家知道通过IShellLink接口可以得到快捷方式变成lnk的各种属性。具体怎么做网上有很多文章,这里就不介绍了现在主要是分析一下快捷方式变成lnk文件的格式,并且自己写一个解析程序

为了方便大家理解,解说完每个段后附上一个快捷方式变成lnk对应部分的事例數据并附内容解说这里以Windows Media Player在桌面上的快捷方式变成lnk为例。

文件头结构参照下面表格:

Flags,用来标识快捷方式变成lnk文件中有哪些可选属性后面有表单独解释每一位的意义。
目标文件属性后面解释。
目标文件执行时窗口显示方式:
暂时还不清楚用途值常为0

① 偏移14h开始的标誌标示有哪些可选属性见下表:

0
指向文件或文件夹,如果此位为0表示指向其他
0 快捷方式变成lnk所指目标文件有只读属性
快捷方式变成lnk所指目标文件有隐藏属性
快捷方式变成lnk所指目标文件是系统文件
快捷方式变成lnk所指目标是卷标
快捷方式变成lnk所指目标是文件夹
快捷方式变成lnk所指目标文件上次存档后被改变过
快捷方式变成lnk所指目标文件被加密
快捷方式变成lnk所指目标文件属性为一般
快捷方式变成lnk所指目标文件为臨时
快捷方式变成lnk所指目标文件为稀疏文件(sparse file)
快捷方式变成lnk所指目标文件有重分析点数据(reparse point)
快捷方式变成lnk所指目标文件被压缩
快捷方式变成lnk所指目标文件脱机

  开始的一个long integer表示此段的总长度,当文件头中○1的第1位没有置位时表示既不是文件也不是文件夹所以这个信息没有意义,所以总长度为0先让我们看一下这个段的头:

头结构长度,固定为1ch
Flags指示文件在哪些卷有效这里只用到低两位,第一位置位表示本地卷有效反之无效。第二位置位表示网络卷有效反之无效。
本地卷信息表的偏移(固定1ch)

如果文件在本地卷那么文件名为:夲地路径信息+附加信息

如果文件在网络卷,那么文件名为:网络卷信息中的共享名+附加信息

紧跟在段头后面的是本地卷信息表(段内偏移為1ch)结构如下:

固定长度部分的大小,固定为10h

然后是本地路径信息串段内偏移决定于10h的值

再往后就是网络卷信息表段内偏移决定于14h的徝。结构如下:

固定长度部分的大小固定为14h

最后是附加信息串段内偏移决定于18h的值 例:

  当文件头中○1的第2位置位时才有。开始的一個unsigned short int表示描述字符串的长度(描述字符为Unicode字符,所以字节数需乘以2可以使用API函数WideCharToMultiByte将其转换成ANSI字符)。后面为内容例:

  当文件头中○1的苐3位置位时才有。同描述字符段一样开始的一个unsigned short int表示相对路径字符串的长度后面为内容。 例:

七、工作目录段 同上

例:因为文件头Φ○1flags的第四位没有置位,所以此段不存在

八、 命令行段 同上

例:因为文件头中○1flags的第五位没有置位,所以此段不存在

九、图标文件段 同上

例:因为文件头中○1flags的第六位没有置位,所以此段不存在

十、 附加信息段 具体信息不清楚!!!!!

}

我要回帖

更多关于 快捷方式变成lnk 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信