前不久在卡饭爆出各种木马利用快捷方式启动绕过杀毒软件的主动防御,随分析下。
0x01. Lnk文件介绍
lnk文件是用于指向其他文件的一种文件。 这些文件通常称为快捷方式文件.通常它以快捷方式放在硬盘上.以方便使用者快速的调用,其扩展名为.lnk。
0x02. Lnk文件格式解析
Lnk文件头 |
Shell Item Id List段(可选) |
文件本地信息段 |
描述字符串段(可选) |
相对路径段(可选) |
工作目录段(可选) |
命令行段(可选) |
图标文件段(可选) |
附加信息段(可选) |
@Lnk文件头结构
偏移 |
大小/类型 |
描述 |
00h |
1 DWORD |
常被设置为0000004CH |
04h |
16 BYTES |
GUID,.link文件的唯一标识符 |
14h |
1 DWORD |
标志位,用于标识哪些段是可选(重要字段) |
18h |
1 DWORD |
目标文件属性(可读,可写,隐藏……) |
1ch |
1 QWORD |
文件创建时间 |
24h |
1 QWORD |
文件修改时间 |
2ch |
1 DWORD |
文件最后一次访问时间 |
34h |
1 DWORD |
目标文件长度 |
38h |
1 DWORD |
自定义图标个数 |
3ch |
1 DWORD |
目标文件执行窗口显示方式(正常,Q最大,最小) |
40h |
1 DWORD |
热键 |
44h |
2 DWORD |
未知 |
Lnk文件头偏移14H的标志位说明
Bit位 |
为1时表示存在 |
0 |
Shell Item Id List |
1 |
指向文件或者文件夹,为0表示指向其它 |
2 |
描述字符串 |
3 |
相对路径 |
4 |
工作路径 |
5 |
命令行参数 |
6 |
自定义图标 |
Lnk文件头偏移18H处目标文件属性说明
Bit位 |
为1时表示 |
0 |
只读属性 |
1 |
隐藏属性 |
2 |
系统文件属性 |
3 |
卷标属性 |
4 |
文件夹属性 |
5 |
上次存档后被修改过 |
6 |
加密属性 |
7 |
文件属性 |
8 |
临时属性 |
9 |
稀疏文件属性 |
10 |
Reparse point |
11 |
压缩属性 |
12 |
文件脱机属性 |
Lnk文件还是算比较简单的,下面对利用lnk方式启动的木马作为例子分析
Lnk文件头
偏移 |
数据 |
说明 |
0x00 |
4C000000 |
常常为这个值 |
0x04 |
0114020000000000C000000000000046 |
lnk文件GUID |
0x14 |
E1000000 |
flag标志(存在Shell Item ID List,命令参数,自定义图标) |
0x18 |
00000000 |
目标文件属性 |
0x1c |
0000000000000000 |
文件创建时间 |
0x24 |
0000000000000000 |
文件修改时间 |
0x2c |
0000000000000000 |
文件最后一次访问时间 |
0x34 |
00000000 |
目标文件长度 |
0x38 |
00000000 |
自定义文件图标个数 |
0x3c |
01000000 |
窗口显示方式(正常显示) |
0x40 |
59060000 |
热键(Ctrl+Alt+Y) |
0x44 |
0000000000000000 |
未知(0) |
Shell Item ID List段说明
此段为数据结构
typedef struct _SHITEMID {
USHORT cb;
BYTE abID[0];
} SHITEMID, * LPSHITEMID;
cb表示SHITEMID结构体大小,abID[0]为可变长度值。
Shell Item ID List段开始为整个Shell Item ID List段的大小值
偏移 |
数据 |
说明 |
|
0x4c |
3901 |
总大小,结束位置,0x4e+0x139=0x187 |
|
0x4e |
14001F50E04FD020EA3A6910A2D808002B30309D |
第一个 |
|
0x62 |
19002F433A5C00000000000000000000000000000000000000 |
第二个 |
|
0x7b |
520031000000000000000000100057696E646F7773003C0008000400EFBE00000000000000002A00000000000000000000000000000000000000000000000000570069006E0064006F007700730000001600 |
第三个 |
|
0xcd |
560031000000000000000000100073797374656D333200003E0008000400EFBE00000000000000002A00000000000000000000000000000000000000000000000000730079007300740065006D003300320000001800 |
第四个 |
|
0x123 |
6200320000AE0000EE3AD009200872756E646C6C33322E6578650000460008000400EFBEED3A36BDED3A36BD2A000000517B0000000001000000000000000000000000000000720075006E0064006C006C00330032002E0065007800650000001C00 |
第五个 |
|
0x186 |
0000 |
结束 |
|
Shell Item ID List可以猜测到这里存储了目标文件路径的ASCII以及UNICODE,木马的目标文件为C:\windows\system32\rundll32.exe。
接下来是命名参数:
“MemDraw.dll MemDrawPic”
最后是自定义图标,这个不会解析了,感觉这方面的资料也很少,好多未知的地方。
上一张图片1.lnk属性图
属性和我们解析的lnk文件格式相同。意思是调用rundll32.exe去执行MemDraw.dll的导出函数MemDrawpic。这样做的原因可能是为了突破杀毒软件的主动防御吧。
简单看了下木马是一个远控,更新服务器在微博链接:http://t.qq.com/testlogin1280
代码中有明显的键盘记录等后门操作
木马作者能想到这里还是很不错的,木马也写得很有质量,隐藏性很高,打开快捷方式首先会打开一张图片,关于游戏装备的,猜想这个样本主要用于游戏交易中发送过去控制对方盗取对方的游戏装备。
通过了解lnk文件格式可以进一步解析lnk,找出可疑点,写出批量处理异常lnk文件。
201303-lnk文件格式分析以及木马利用-willj[4st TeAm]