Получение даты создания PE-файлов (*.EXE, *.DLL и др.)

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Получение даты создания PE-файлов (*.EXE, *.DLL и др.)

Post by John Doe »

Смежная с Shell_FileTime.lua тема.
Как известно, раньше было принято в PE-заголовок .exe и .dll помещать дату сборки.
Используя эту информацию можно восстановить изначальное время файла.

Для потрошения PE-заголовка используем pefile.
PE_TimeDateStamp.py

Code: Select all

import sys
import pefile

filename = sys.argv[1]
pe = pefile.PE(filename)

pe_timedate = pe.FILE_HEADER.TimeDateStamp #unixtime
print(pe_timedate)
PE_TimeDateStamp.lua

Code: Select all

local filename = far.ConvertPath((...))
local py = assert(io.popen("PE_TimeDateStamp.py "..filename))
local pe_unixtime = assert(tonumber(py:read(),10))
py:close()

print(os.date(nil,pe_unixtime))

local EPOCH_DIFF = 11644473600 --number of seconds from 1 Jan. 1601 00:00 to 1 Jan 1970 00:00 UTC
local resolution = bit64.new(10000000)
local pe_timedate = (pe_unixtime + EPOCH_DIFF) * resolution
print(pe_timedate)
assert(win.SetFileTimes(filename,{LastWriteTime=pe_timedate}))
Last edited by HaRT on Wed 17 May, 2023 23:48, edited 1 time in total.
Reason: Восстановлен заголовок ТЕмы
https://t.me/FarManager — Telegram чат
User avatar
Taciturn
Posts: 603
Joined: Thu 26 May, 2005 17:14
Location: Санкт-Петербург
Has thanked: 89 times
Been thanked: 31 times
Contact:

Набор макросов от SimSU

Post by Taciturn »

John Doe wrote: Sun 02 Apr, 2023 16:57 PE_TimeDateStamp.lua
А как пользоваться? PE_TimeDateStamp.py python-3.8.16-full.exe работает, а вот lua:PE_TimeDateStamp.lua python-3.8.16-full.exe выдаёт [string "PE_TimeDateStamp.lua python-3.8.16-full.exe"]:1: '=' expected near 'python' — очевидно, что я что-то делаю не так.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Набор макросов от SimSU

Post by John Doe »

Code: Select all

lua:@PE_TimeDateStamp.lua "python-3.8.16-full.exe"
(нужен полный путь к PE_TimeDateStamp.lua)

Через LuaShell удобнее:

Code: Select all

PE_TimeDateStamp python-3.8.16-full.exe
https://t.me/FarManager — Telegram чат
User avatar
SUSim
Posts: 1637
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Получение даты создания PE-файлов (*.EXE, *.DLL и др.)

Post by SUSim »

2useven10, ну открыть то можно тоже по команде, и даже разархивировать то что надо не трогая панелей
arc:e -out:C:\Temp\FAAR\ FAR..7z Far.exe

Конкретно меня интересует поле Created у *.exe, может есть другие способы получения данной инфы?
Last edited by HaRT on Wed 17 May, 2023 23:06, edited 1 time in total.
Reason: Тема отделена, добавлена ссылка на исходное обсуждение.
SimSU ··· ·· -- ··· ··-
2useven10
Posts: 5231
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 315 times

arclite — работа с архивами на основе 7-Zip

Post by 2useven10 »

7z l Archive.7z Far.exe?
User avatar
SUSim
Posts: 1637
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

arclite — работа с архивами на основе 7-Zip

Post by SUSim »

Не... интересует время компиляции экзешника (из PE заголовка) - то что в поле Created в окне Attributes которое показывает arclite зайдя в exe/
SimSU ··· ·· -- ··· ··-
User avatar
SUSim
Posts: 1637
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

arclite — работа с архивами на основе 7-Zip

Post by SUSim »

Хотя
7z l Far.exe нужное выводит...
а вот arc:l Far.exe не работает...
Last edited by HaRT on Wed 17 May, 2023 23:11, edited 1 time in total.
Reason: Добавлена ссылка на ответ в исходной Теме
SimSU ··· ·· -- ··· ··-
2useven10
Posts: 5231
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 315 times

arclite — работа с архивами на основе 7-Zip

Post by 2useven10 »

Извлечь Far.exe, потом 7z l Path\Far.exe
User avatar
HaRT
Moderator
Posts: 10865
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

arclite — работа с архивами на основе 7-Zip

Post by HaRT »

SUSim wrote: Wed 17 May, 2023 13:05 интересует поле Created у *.exe, может есть другие способы получения данной инфы?
Можно и выцепить дату из , но тут неудобный формат.
А можно заморочиться и попытаться задействовать специализированный модуль на Lua: pe-parser, но я туда не копал.
2useven10 wrote: Wed 17 May, 2023 13:45 7z l Archive.7z Far.exe?
Вы, вероятно, имели в виду 7z l Far.exe, где сам Far.exe выступает архивом? Так работает, спасибо.
И попутно вопрос: сложно ли в поле Comment диалога Attributes показывать значение с переводами строк? Чтобы можно было, открыв его в редакторе (например, через Dialog Tools или скрипты аналогичного назначения), читать с разбивкой по строкам.
Last edited by HaRT on Wed 17 May, 2023 23:13, edited 1 time in total.
Reason: Добавлены ссылка на ответ в исходной Теме
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

arclite — работа с архивами на основе 7-Zip

Post by John Doe »

SUSim wrote: Wed 17 May, 2023 13:51 интересует время компиляции экзешника (из PE заголовка)
viewtopic.php?p=174209#p174209

Однако современные компиляторы туда уже могут помещать не дату а хэш.
https://t.me/FarManager — Telegram чат
2useven10
Posts: 5231
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 315 times

arclite — работа с архивами на основе 7-Zip

Post by 2useven10 »

Far собран вполне современным компилятором, timestamp есть.
Мне вообще непонятно зачем такие заморочки.
Дата Far.exe в архиве вполне коррелирует со временем сборки, хоть и не совпадает.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

arclite — работа с архивами на основе 7-Zip

Post by John Doe »

HaRT wrote: Wed 17 May, 2023 14:16 А можно заморочиться и попытаться задействовать специализированный модуль на Lua: pe-parser, но я туда не копал.

Code: Select all

local pe = require"pe-parser"
local obj = assert(pe.parse("far.exe"))
local pe_unixtime = pe.toDec(obj.TimeDateStamp)
far.Show(os.date(nil,pe_unixtime))
https://t.me/FarManager — Telegram чат
2useven10
Posts: 5231
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 315 times

arclite — работа с архивами на основе 7-Zip

Post by 2useven10 »

MediaInfo:

Code: Select all

local MediaInfo_GUID = '919C1FC6-A571-4642-99DF-BDACE840ED18'
local FilePath = 'C:\\0\\4\\6058\\Far.exe'
local ok,n,Keys,Vals = Plugin.SyncCall(MediaInfo_GUID, FilePath,'{Encoded date}')
far.Show(Vals[1])
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

arclite — работа с архивами на основе 7-Zip

Post by John Doe »

MediaInfo.dll + ffi-mediaInfo.lua

Code: Select all

local ffi = require("ffi")
local mediaInfo = require("ffi-mediaInfo")
local filePath = "far.exe"
local mi = mediaInfo.MediaInfoA_New()
mediaInfo.MediaInfoA_Open (mi,filePath)
mediaInfo.MediaInfoA_Option(mi,"Inform","General;%Encoded_Date%")
local info = ffi.string(mediaInfo.MediaInfoA_Inform(mi,1))
mediaInfo.MediaInfoA_Close(mi)
mediaInfo.MediaInfoA_Delete(mi)
far.Show(info)
P.S.
Тут больше примеров использования https://github.com/doublecmd/plugins/tr ... /mediainfo
https://t.me/FarManager — Telegram чат
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

arclite — работа с архивами на основе 7-Zip

Post by John Doe »

2useven10 wrote: Wed 17 May, 2023 15:02 Мне вообще непонятно зачем такие заморочки.
Проблема в том, что изначальная дата файла может быть потеряна по ряду причин. Например файлы скачиваемые браузером в Downloads.
https://t.me/FarManager — Telegram чат
Post Reply

Return to “Обсуждение макросов”