在Linux中用Python读取EXE,MSI和ZIP文件元数据

时间:2010-09-18 16:55:54

标签: python windows-installer metadata md5

我正在编写一个Python脚本,将大量Windows安装程序编入索引。

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

软件

我在Ubuntu 10.04 64位和Django 1.2.1上使用Python 2.6.5。

到目前为止发现:

Windows命令行实用程序,可以提取EXE元数据(如来自SysUtils的filever)或仅在Windows中工作的其他单个CL utils。我尝试通过Wine运行它们但是它们有问题,并且不值得去找那些CL utils所依赖的库和框架并尝试在Wine / Crossover中安装它们。

用于Python的Win32模块可以执行某些操作但不能在Linux中运行(对吗?)

次要问题:

显然,更改文件的元数据会更改文件的MD5哈希值。是否有一种通用的方法来散列独立于元数据的文件,除了定位和读取它(例如:跳过前1024个字节?)


这是我在这里发表StackOverflow的第一篇文章。从我作为一名新的Python开发人员的最新工作开始,我对Stackoverflow印象非常深刻,并且它一直出现在谷歌搜索我的Python / Django查询的顶部,并且具有高质量的答案。感谢这个社区。

4 个答案:

答案 0 :(得分:4)

看看这个库:http://bitbucket.org/haypo/hachoir/wiki/Home以及使用该库的示例程序:http://pypi.python.org/pypi/hachoir-metadata/1.3.3。第二个链接是一个示例程序,它使用Hachoir二进制文件操作库(第一个链接)来解析元数据。

图书馆可以处理以下格式:

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

此外,Hachoir可以执行一些文件操作操作,我认为这包括一些原始元数据操作。

答案 1 :(得分:2)

hach​​oir-metadata获取“产品版本”,但编译器更改了“文件版本”。 然后返回的版本不是我们需要的。

我找到了一个很好的解决方案:

http://pev.sourceforge.net/

我已成功测试过。它简单,快速,稳定。

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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

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

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