关于lnk文件的感染偶然在网上看到的。然后就关注了一下,lnk文件的感染是很多人可能都忽略的一个问题。并且lnk文件的感染所产生的效果很好。把lnk文件指向我们想要感染的任何文件。
要想感染这个文件,学习了pe病毒一段时间也知道了大概思路,那就是搞清楚lnk文件的格式。这个网上很多(但是不够完善,尤其缺乏我认为很重要的有关SHITEMID结构的解释)为了便于阐述我的问题下面这是个简单的lnk结构图。
.lnk 文件格式
+---------------------------+
| lnk file header |
+---------------------------+ >------.
| Shell Item Id List | |
+---------------------------+ |
| File location info | |
+---------------------------+ |
| Description string | |
+---------------------------+ ---
| Relative path string | 这几个节不是每一个都必须存在,如果存在就要按这样的顺序关系排列。
+---------------------------+ ---
| Working directory string | |
+---------------------------+ |
| Command line string | |
+---------------------------+ |
| Icon filename string | |
+---------------------------+ >------.
| Extra stuff |
+---------------------------+
File location info中包含着关联文件的信息。但是我修改了这里面ascII和Unicode的字符对于连接没有产生任何影响。我也看到网上有人说修改这里面的路径就呢过完成重新的连接但是实际上这个是错误的。看雪上的一篇帖子也是整么说的他认为Shell Item Id List 这个结构中的路径信息才是真正链接的指向文件。
Shell Item Id List 结构如下:
当文件头中○1的第0位置位时才有。第一个unsigned short integer表示item ID
list段的总长度。后面紧跟着SHITEMID结构。SHITEMID的定义如下: typedef struct
_SHITEMID {
USHORT cb;
BYTE abID[0];
} SHITEMID, * LPSHITEMID;
仔细观察lnk文件的二进制发现路径的信息是分层写到几个SHITEMID结构中的
类似这样
SHITEMID[0] - > 其值固定
SHITEMID[1] - > c:\???
SHITEMID[2] - > ???aaa???
SHITEMID[3] - > ???bbb???
SHITEMID[4] - > ???ccc???
SHITEMID[5] - > ???ddd???
SHITEMID[6] - > ???eee???
SHITEMID[7] - > ???f.exe???
00000040 17 01 14 00 ....
00000050 1F 50 E0 4F D0 20 EA 3A 69 10 A2 D8 08 00 2B 30 .P郞??i.⒇..+0
00000060 30 9D 19 00 2F 43 3A 5C 00 00 00 00 00 00 00 00 0?./C:\........
00000070 00 00 00 00 00 00 00 00 00 00 00 4A 00 31 00 00 ...........J.1..
00000080 00 00 00 31 3C DA 71 11 00 50 52 4F 47 52 41 7E ...1<趒..PROGRA~
00000090 31 00 00 32 00 03 00 04 00 EF BE 57 3B 8C 41 3B 1..2.....锞W;孉;
000000A0 3C 8A 6B 14 00 00 00 50 00 72 00 6F 00 67 00 72 <妅....P.r.o.g.r
000000B0 00 61 00 6D 00 20 00 46 00 69 00 6C 00 65 00 73 .a.m. .F.i.l.e.s
000000C0 00 00 00 18 00 52 00 31 00 00 00 00 00 8E 3B 86 .....R.1.....??
000000D0 10 10 00 49 4E 54 45 52 4E 7E 31 00 00 3A 00 03 ...INTERN~1..:..
000000E0 00 04 00 EF BE 57 3B AD 42 3B 3C 94 69 14 00 00 ...锞W;瑽;<攊...
000000F0 00 49 00 6E 00 74 00 65 00 72 00 6E 00 65 00 74 .I.n.t.e.r.n.e.t
00000100 00 20 00 45 00 78 00 70 00 6C 00 6F 00 72 00 65 . .E.x.p.l.o.r.e
00000110 00 72 00 00 00 18 00 4C 00 32 00 00 6C 01 00 1C .r.....L.2..l...
00000120 3B D0 50 20 00 69 65 78 70 6C 6F 72 65 2E 65 78 ;蠵 .iexplore.ex
00000130 65 00 00 30 00 03 00 04 00 EF BE 57 3B AE 42 3B e..0.....锞W;瓸;
00000140 3C 0E 55 14 00 00 00 69 00 65 00 78 00 70 00 6C <.U....i.e.x.p.l
00000150 00 6F 00 72 00 65 00 2E 00 65 00 78 00 65 00 00 .o.r.e...e.x.e..
00000160 00 1C 00 ...
如果我么要修改链接的路径那么就要填充或者修改上面的数据块。但是没找到有关这个数据块的说明。如果哪位大神晓得请告诉我谢谢。