V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
sr0miao
V2EX  ›  Python

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

  •  
  •   sr0miao · 2020-12-03 14:18:46 +08:00 · 1763 次点击
    这是一个创建于 1233 天前的主题,其中的信息可能已经有所发展或是发生改变。
    就是一个文件是什么时候编译出来的,有人知道么,我暂时没有找到好的方法
    第 1 条附言  ·  2020-12-03 15:02:44 +08:00
    第 2 条附言  ·  2020-12-03 15:33:31 +08:00
    pe 文件可以通过头部信息拿到,elf 、apk 的还未知
    13 条回复    2020-12-03 15:24:47 +08:00
    Te11UA
        1
    Te11UA  
       2020-12-03 14:26:42 +08:00
    编译?脚本里面 echo 一下不行吗?
    crab
        2
    crab  
       2020-12-03 14:28:53 +08:00
    APi GetFileTime
    CallMeReznov
        3
    CallMeReznov  
       2020-12-03 14:29:48 +08:00
    # os.getcwd() 方法用于返回当前工作目录
    # os.path.getatime(file) 输出文件访问时间
    # os.path.getctime(file) 输出文件的创建时间
    # os.path.getmtime(file) 输出文件最近修改时间
    sr0miao
        4
    sr0miao  
    OP
       2020-12-03 14:34:36 +08:00
    @Te11UA
    @crab
    @CallMeReznov
    不是这个意思哦,比如我拿到了一个 exe 文件,我想知道这个文件是什么时候编译出来的。比如我装了 qq5.7 这个版本,我能查到的文件创建时间是它在我电脑上的生成时间,而我想知道它是什么时候编译生成的,即真正的编译生成时间
    misaka19000
        5
    misaka19000  
       2020-12-03 14:39:45 +08:00
    除非编译的时候显示的在文件里面记录了这个时间,不然应该是查不到的
    coolair
        6
    coolair  
       2020-12-03 14:40:56 +08:00
    这就是传说中的”考古“吗?
    IsaacYoung
        7
    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
        8
    sr0miao  
    OP
       2020-12-03 14:46:48 +08:00
    @IsaacYoung 这个我刚看到了,想着怎么得到他,用 pywin32 不知道是否可行
    MicroBotter
        9
    MicroBotter  
       2020-12-03 14:46:48 +08:00
    @sr0miao 你可以搜一下 exe (windows) elf(linux) mach-o(macOS) 格式的可执行文件的结构,里面是不包含这个信息的。
    sr0miao
        10
    sr0miao  
    OP
       2020-12-03 14:47:53 +08:00
    @MicroBotter exe 和 apk 一般都会放的吧
    no1xsyzy
        11
    no1xsyzy  
       2020-12-03 14:51:08 +08:00
    ctime 和 mtime 可以被任意一个人修改,甚至下载的话会以下载时间计
    可能有参考价值的就是数字签名的时间戳。
    sr0miao
        12
    sr0miao  
    OP
       2020-12-03 15:03:39 +08:00
    @no1xsyzy 这个倒是知道,但有总比没有好
    sr0miao
        13
    sr0miao  
    OP
       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
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5269 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 09:15 · PVG 17:15 · LAX 02:15 · JFK 05:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.