在Linux中读取Python中的EXE、MSI和ZIP文件元数据
我正在编写一个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中运行(对吗?) 第二个问题:在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运行这些工具,但它们存在
显然,更改文件的元数据会更改文件的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元数据获取“产品版本”,但编译器更改“文件版本”。 那么返回的版本不是我们需要的版本 我发现了一个很好的解决方案:
我已经测试成功了。它简单、快速、稳定。就文件而言,“元数据”和“数据”没有区别。这只是一堆碎片。这是特定于应用程序的,不幸的是,没有通用的方法来确定哪些部分与您相关。