我曾在一个 EXE 上运行 ListDlls,但我不确定它是否应该在我的计算机上运行。输出中 DLL 的日期到处都是。我很好奇“创建时间”字段是如何设置的。
答案1
为了澄清问题,listdlls -v SomeProcess.exe
显示该流程模块的版本信息,如下面的示例所示,特别是包括“创建时间”行。
0x000000006f630000 0xc000 C:\WINDOWS\SYSTEM32\CRYPTBASE.DLL
Verified: Microsoft Windows
Publisher: Microsoft Corporation
Description: Base cryptographic API DLL
Product: Microsoft« Windows« Operating System
Version: 10.0.18362.1
File version: 6.2.18362.1
Create time: Wed Jul 15 19:07:02 2105
0x000000006f4b0000 0x67000 C:\WINDOWS\system32\mswsock.dll
Verified: Microsoft Windows
Publisher: Microsoft Corporation
Description: Microsoft Windows Sockets 2.0 Service Provider
Product: Microsoft« Windows« Operating System
Version: 10.0.18362.1
File version: 6.2.18362.1
Create time: Mon Feb 14 21:29:32 1983
ListDLLs 从TimeDateStamp
文件PE 头。如果你有 Visual Studio,你可以使用以下命令查看 PE 头信息dumpbin
实用程序。在我的计算机上,输出dumpbin /headers mswsock.dll
以以下内容开头:
Dump of file C:\Windows\System32\mswsock.dll
PE signature found
File Type: DLL
FILE HEADER VALUES
8664 machine (x64)
9 number of sections
18AF169C time date stamp
0 file pointer to symbol table
0 number of symbols
F0 size of optional header
2022 characteristics
Executable
Application can handle large (>2GB) addresses
DLL
那里的“时间日期戳”是基于 Unix 纪元的时间的十六进制表示,即自 1970 年 1 月 1 日午夜(UTC)以来的秒数。粘贴18AF169C
到这个在线转换器产生的当地时间为 1983 年 2 月 14 日星期一晚上 9:29:32,这正是 ListDLLs 所说的。
至于为什么时间戳非常不正确,我怀疑该字段是故意填充仅取决于源代码而不是构建时间的数据。(可重复的构建可以更容易地检查二进制文件是否被篡改。)“时间戳”可能是某种哈希值,理想情况下均匀分布在可能性空间上。