Python 如何获取文件的编译时间,比如 exe 文件

2020-12-03 14:18:46 +08:00
 sr0miao
就是一个文件是什么时候编译出来的,有人知道么,我暂时没有找到好的方法
1858 次点击
所在节点    Python
13 条回复
Te11UA
2020-12-03 14:26:42 +08:00
编译?脚本里面 echo 一下不行吗?
crab
2020-12-03 14:28:53 +08:00
APi GetFileTime
CallMeReznov
2020-12-03 14:29:48 +08:00
# os.getcwd() 方法用于返回当前工作目录
# os.path.getatime(file) 输出文件访问时间
# os.path.getctime(file) 输出文件的创建时间
# os.path.getmtime(file) 输出文件最近修改时间
sr0miao
2020-12-03 14:34:36 +08:00
@Te11UA
@crab
@CallMeReznov
不是这个意思哦,比如我拿到了一个 exe 文件,我想知道这个文件是什么时候编译出来的。比如我装了 qq5.7 这个版本,我能查到的文件创建时间是它在我电脑上的生成时间,而我想知道它是什么时候编译生成的,即真正的编译生成时间
misaka19000
2020-12-03 14:39:45 +08:00
除非编译的时候显示的在文件里面记录了这个时间,不然应该是查不到的
coolair
2020-12-03 14:40:56 +08:00
这就是传说中的”考古“吗?
IsaacYoung
2020-12-03 14:42:54 +08:00
PE 文件结构 IMAGE_FILE_HEADER

typedef struct _IMAGE_FILE_HEADER {
WORD Machine; /* +0004h 目标机器类型 */
WORD NumberOfSections; /* +0006h PE 中节的数量 */
DWORD TimeDateStamp; /* +0008h 时间戳 */
DWORD PointerToSymbolTable; /* +000ch 指向符号表的指针 */
DWORD NumberOfSymbols; /* +0010h 符号表中符号数目 */
WORD SizeOfOptionalHeader; /* +0012h 可选头的大小 */
WORD Characteristics; /* +0014h 文件属性标志 */
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;


TimeDateStamp 双字。低 32 位表示从 1970 年 1 月 1 日 00:00 到文件创建时经过的秒数。
sr0miao
2020-12-03 14:46:48 +08:00
@IsaacYoung 这个我刚看到了,想着怎么得到他,用 pywin32 不知道是否可行
MicroBotter
2020-12-03 14:46:48 +08:00
@sr0miao 你可以搜一下 exe (windows) elf(linux) mach-o(macOS) 格式的可执行文件的结构,里面是不包含这个信息的。
sr0miao
2020-12-03 14:47:53 +08:00
@MicroBotter exe 和 apk 一般都会放的吧
no1xsyzy
2020-12-03 14:51:08 +08:00
ctime 和 mtime 可以被任意一个人修改,甚至下载的话会以下载时间计
可能有参考价值的就是数字签名的时间戳。
sr0miao
2020-12-03 15:03:39 +08:00
@no1xsyzy 这个倒是知道,但有总比没有好
sr0miao
2020-12-03 15:24:47 +08:00
通过 PE 头拿到了

E12648E80643542CD36B87A4E15DA015.exe
MD5: e12648e80643542cd36b87a4e15da015
SHA-1: 441be3586830dac18e7b8c1d18cba6d969312125
SHA-256: 91cce4c4fe19c9e4b0ffc3fd7397dad4da4c046402069e1885aa9c0501e04146
File Name: E12648E80643542CD36B87A4E15DA015.exe
File Size: 753117 byte
Optional Header: 0x400000
EntryPoint: 295830
Compile Time: 2010-06-09 18:32:16
Subsystem: IMAGE_SUBSYSTEM_WINDOWS_GUI
DLL: False
Sections: 4
warning:
Byte 0x00 makes up 60.1832% of the file's contents. This may indicate truncation / malformation.
KERNEL32.dll
USER32.dll
MFC42.DLL
MSVCRT.dll

@IsaacYoung
@no1xsyzy

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/731747

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX