题目:Microsofts Rich Header
作者:Peter Kleissner
译者:Cryin'(
)
概述
Rich Header是PE文件DOS Header和NT Header之间的一个结构(在PE Header和DOS stub之间)。它包含链接库版本信息以及链接器版本。
The Rich Header
Rich Header是由微软编译器创建,通常看起来像如下:
WSNPOEM Decryption Code analyzed:
00000080 54 62 EF 9B 10 03 81 C8 10 03 81 C8 10 03 81 C8 Tb??...è...è...è
00000090 37 C5 EF C8 11 03 81 C8 37 C5 FC C8 12 03 81 C8 7??è...è7?üè...è
000000A0 37 C5 FA C8 0B 03 81 C8 10 03 80 C8 C9 03 81 C8 7?úè...è..€èé..è
000000B0 37 C5 EC C8 33 03 81 C8 37 C5 FD C8 11 03 81 C8 7?ìè3..è7?yè...è
000000C0 37 C5 F9 C8 11 03 81 C8 52 69 63 68 10 03 81 C8 7?ùè...èRich...è
这是notepad.exe的Rich Header信息,起始偏移地址为80h,紧跟在DOS stub之后。紧跟在Rich Header之后的是PE Header。从上面的Rich Header信息你大概可以看出Rich Header是被加密过的。
解密Rich Header
Rich Header信息是被异或操作加密过的,观察上面Rich Header数据你会发现一个重复多次的DWORD值即"Rich"之后的10 03 81 c8。将Rich Header信息的起始位置一直到关键字"Rich"的数据与这个DWORD值进行异或操作,操作后的Rich Header如下所示:
00000080 44 61 6e 53 00 00 00 00 00 00 00 00 00 00 00 00 DanS............
00000090 27 c6 6e 00 01 00 00 00 27 c6 7d 00 02 00 00 00 '?n.....'?}.....
000000A0 27 c6 7b 00 1b 00 00 00 00 00 01 00 d9 00 00 00 '?{.........ù...
000000B0 27 c6 6d 00 23 00 00 00 27 c6 7c 00 01 00 00 00 '?m.#...'?|.....
000000C0 27 c6 78 00 01 00 00 00 52 69 63 68 10 03 81 c8 '?x.....Rich...è
我们看到第一个DWORD值为"DanS",这个好像正是Dan Ruder的开头部分,Dan Ruder正是"Mechanics of Dynamic Linking" in 1993(MSDN Library Archive)的作者之一。
格式解析
从lifewire的文章详见参考[6]获知Rich Header结构的格式如下:
'DanS'^b, b, b, b -- 身份认证头
compid^b, r^b -- 从0开始
.. -- :
compid^b, r^b -- 直到n
'Rich', b -- 结束位置
[注意]看雪招聘,专注安全领域的专业人才平台!