44
55from functools import lru_cache
66from contextlib import suppress
7- from pefile import PE
7+ from pefile import PE , DIRECTORY_ENTRY
88from datetime import datetime , timezone
99from asn1crypto import cms
1010from asn1crypto import x509
@@ -22,8 +22,8 @@ class pemeta(Unit):
2222 - Timestamps
2323 - If present, .NET header information
2424 """
25- def __init__ (self ,
26- all : arg ('-c' , '--custom' ,
25+ def __init__ (
26+ self , all : arg ('-c' , '--custom' ,
2727 help = 'Unless enabled, everything will be extracted.' ) = True ,
2828 version : arg ('-V' , help = 'Parse the VERSION resource.' ) = False ,
2929 timestamps : arg ('-T' , help = 'Extract time stamps.' ) = False ,
@@ -50,7 +50,7 @@ def _parse_pedict(self, bin):
5050
5151 @lru_cache (maxsize = 1 , typed = False )
5252 def _getpe (self , data : bytearray ) -> PE :
53- return PE (data = data )
53+ return PE (data = data , fast_load = True )
5454
5555 def parse_signature (self , data : bytearray ) -> dict :
5656 """
@@ -130,7 +130,9 @@ def parse_file_info(self, data: bytearray) -> dict:
130130 the version resource of an input PE file, if available.
131131 """
132132 try :
133- FileInfoList = self ._getpe (data ).FileInfo
133+ pe = self ._getpe (data )
134+ pe .parse_data_directories (directories = [DIRECTORY_ENTRY ['IMAGE_DIRECTORY_ENTRY_RESOURCE' ]])
135+ FileInfoList = pe .FileInfo
134136 except AttributeError :
135137 return None
136138 for FileInfo in FileInfoList :
@@ -163,6 +165,13 @@ def dt(ts):
163165 return datetime .fromtimestamp (ts , tz = timezone .utc ).replace (tzinfo = None )
164166
165167 pe = self ._getpe (data )
168+ pe .parse_data_directories (directories = [
169+ DIRECTORY_ENTRY ['IMAGE_DIRECTORY_ENTRY_IMPORT' ],
170+ DIRECTORY_ENTRY ['IMAGE_DIRECTORY_ENTRY_EXPORT' ],
171+ DIRECTORY_ENTRY ['IMAGE_DIRECTORY_ENTRY_DEBUG' ],
172+ DIRECTORY_ENTRY ['IMAGE_DIRECTORY_ENTRY_RESOURCE' ]
173+ ])
174+
166175 info = {}
167176
168177 with suppress (AttributeError ):
0 commit comments