Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Linux中读取Python中的EXE、MSI和ZIP文件元数据_Python_Windows Installer_Metadata_Md5 - Fatal编程技术网

在Linux中读取Python中的EXE、MSI和ZIP文件元数据

在Linux中读取Python中的EXE、MSI和ZIP文件元数据,python,windows-installer,metadata,md5,Python,Windows Installer,Metadata,Md5,我正在编写一个Python脚本,将大量Windows安装程序索引到数据库中 我想知道如何使用Linux上运行的Python从EXE、MSI和ZIP文件中读取元数据信息(公司、产品名称、版本等) 软件 我正在使用Python2.6.5和Django 1.2.1的Ubuntu 10.04 64位版本 目前发现: 可以提取EXE元数据(如SysUtils中的filever)的Windows命令行实用程序,或仅在Windows中工作的其他单个CL utils。我曾尝试通过Wine运行这些工具,但它们存在

我正在编写一个Python脚本,将大量Windows安装程序索引到数据库中

我想知道如何使用Linux上运行的Python从EXE、MSI和ZIP文件中读取元数据信息(公司、产品名称、版本等)

软件 我正在使用Python2.6.5和Django 1.2.1的Ubuntu 10.04 64位版本

目前发现: 可以提取EXE元数据(如SysUtils中的filever)的Windows命令行实用程序,或仅在Windows中工作的其他单个CL utils。我曾尝试通过Wine运行这些工具,但它们存在问题,不值得去寻找那些CL UTIL所依赖的LIB和框架,并尝试在Wine/Crossover中安装它们

用于Python的Win32模块,可以做一些事情,但不会在Linux中运行(对吗?)

第二个问题:
显然,更改文件的元数据会更改文件的MD5哈希和。除了定位并读入文件(例如:跳过前1024个“是”)之外,是否还有一种独立于元数据对文件进行散列的通用方法。第二个链接是一个示例程序,它使用
Hachoir
二进制文件操作库(第一个链接)解析元数据

库可以处理这些格式:

  • 档案:bzip2,gzip,zip,tar
  • 音频:MPEG音频(“MP3”)、WAV、Sun/NeXT音频、Ogg/Vorbis(Ogg)、MIDI、AIFF、AIFC、真实音频(RA)
  • 图像:BMP、CUR、EMF、ICO、GIF、JPEG、PCX、PNG、TGA、TIFF、WMF、XCF
  • 杂项:激流
  • 程序:EXE
  • 视频:ASF格式(WMV视频)、AVI、Matroska(MKV)、Quicktime(MOV)、Ogg/Theora、Real media(RM)

另外,
Hachoir
可以执行一些文件操作,我假设这些操作包括一些原始元数据操作。

要回答您的一个问题,您可以使用,特别是对象来获取zip文件的元数据


至于只对文件的数据进行散列,只有知道哪些部分是数据,哪些部分是元数据,才能进行散列。没有通用的方法,因为许多文件格式以不同的方式存储元数据。

回答您的第二个问题:不,如果不查找和读取元数据,就无法对PE文件或ZIP文件进行散列,忽略元数据。这是因为您感兴趣的元数据存储在文件中的可变位置

对于PE文件(EXE、DLL等),它存储在一个资源块中,通常位于文件的末尾,文件开头的一系列指针和表给出了位置


对于ZIP文件,它分散在整个归档文件中——每个包含的文件前面都有自己的元数据,最后有一个表给出了每个元数据块的位置。但听起来你可能真的想要读取ZIP档案中的文件,如果你在寻找程序元数据的话,在那里寻找前男友;ZIP存档本身不存储公司名称或版本号。

hachoir元数据获取“产品版本”,但编译器更改“文件版本”。 那么返回的版本不是我们需要的版本

我发现了一个很好的解决方案:


我已经测试成功了。它简单、快速、稳定。

就文件而言,“元数据”和“数据”没有区别。这只是一堆碎片。这是特定于应用程序的,不幸的是,没有通用的方法来确定哪些部分与您相关。