Commit 98bf5c3639bea6ba484c391297afd0a5490c7313

Authored by Christian Herdtweck
1 parent 2dd314cd

pylint-ify 2: lower-case-ify PROJECT... REFERENCE... MODULE vars in _extract_vba

(I just love my vim...)
Showing 1 changed file with 213 additions and 213 deletions
oletools/olevba.py
... ... @@ -76,7 +76,7 @@ https://github.com/unixfreak0037/officeparser
76 76 # CHANGELOG:
77 77 # 2014-08-05 v0.01 PL: - first version based on officeparser code
78 78 # 2014-08-14 v0.02 PL: - fixed bugs in code, added license from officeparser
79   -# 2014-08-15 PL: - fixed incorrect value check in PROJECTHELPFILEPATH Record
  79 +# 2014-08-15 PL: - fixed incorrect value check in projecthelpfilepath Record
80 80 # 2014-08-15 v0.03 PL: - refactored extract_macros to support OpenXML formats
81 81 # and to find the VBA project root anywhere in the file
82 82 # 2014-11-29 v0.04 PL: - use olefile instead of OleFileIO_PL
... ... @@ -1176,122 +1176,122 @@ def _extract_vba(ole, vba_root, project_path, dir_path):
1176 1176 dir_stream = cStringIO.StringIO(decompress_stream(dir_compressed))
1177 1177  
1178 1178 # PROJECTSYSKIND Record
1179   - PROJECTSYSKIND_Id = struct.unpack("<H", dir_stream.read(2))[0]
1180   - check_value('PROJECTSYSKIND_Id', 0x0001, PROJECTSYSKIND_Id)
1181   - PROJECTSYSKIND_Size = struct.unpack("<L", dir_stream.read(4))[0]
1182   - check_value('PROJECTSYSKIND_Size', 0x0004, PROJECTSYSKIND_Size)
1183   - PROJECTSYSKIND_SysKind = struct.unpack("<L", dir_stream.read(4))[0]
1184   - if PROJECTSYSKIND_SysKind == 0x00:
  1179 + projectsyskind_id = struct.unpack("<H", dir_stream.read(2))[0]
  1180 + check_value('PROJECTSYSKIND_Id', 0x0001, projectsyskind_id)
  1181 + projectsyskind_size = struct.unpack("<L", dir_stream.read(4))[0]
  1182 + check_value('PROJECTSYSKIND_Size', 0x0004, projectsyskind_size)
  1183 + projectsyskind_syskind = struct.unpack("<L", dir_stream.read(4))[0]
  1184 + if projectsyskind_syskind == 0x00:
1185 1185 log.debug("16-bit Windows")
1186   - elif PROJECTSYSKIND_SysKind == 0x01:
  1186 + elif projectsyskind_syskind == 0x01:
1187 1187 log.debug("32-bit Windows")
1188   - elif PROJECTSYSKIND_SysKind == 0x02:
  1188 + elif projectsyskind_syskind == 0x02:
1189 1189 log.debug("Macintosh")
1190   - elif PROJECTSYSKIND_SysKind == 0x03:
  1190 + elif projectsyskind_syskind == 0x03:
1191 1191 log.debug("64-bit Windows")
1192 1192 else:
1193   - log.error("invalid PROJECTSYSKIND_SysKind {0:04X}".format(PROJECTSYSKIND_SysKind))
  1193 + log.error("invalid PROJECTSYSKIND_SysKind {0:04X}".format(projectsyskind_syskind))
1194 1194  
1195 1195 # PROJECTLCID Record
1196   - PROJECTLCID_Id = struct.unpack("<H", dir_stream.read(2))[0]
1197   - check_value('PROJECTLCID_Id', 0x0002, PROJECTLCID_Id)
1198   - PROJECTLCID_Size = struct.unpack("<L", dir_stream.read(4))[0]
1199   - check_value('PROJECTLCID_Size', 0x0004, PROJECTLCID_Size)
1200   - PROJECTLCID_Lcid = struct.unpack("<L", dir_stream.read(4))[0]
1201   - check_value('PROJECTLCID_Lcid', 0x409, PROJECTLCID_Lcid)
  1196 + projectlcid_id = struct.unpack("<H", dir_stream.read(2))[0]
  1197 + check_value('PROJECTLCID_Id', 0x0002, projectlcid_id)
  1198 + projectlcid_size = struct.unpack("<L", dir_stream.read(4))[0]
  1199 + check_value('PROJECTLCID_Size', 0x0004, projectlcid_size)
  1200 + projectlcid_lcid = struct.unpack("<L", dir_stream.read(4))[0]
  1201 + check_value('PROJECTLCID_Lcid', 0x409, projectlcid_lcid)
1202 1202  
1203 1203 # PROJECTLCIDINVOKE Record
1204   - PROJECTLCIDINVOKE_Id = struct.unpack("<H", dir_stream.read(2))[0]
1205   - check_value('PROJECTLCIDINVOKE_Id', 0x0014, PROJECTLCIDINVOKE_Id)
1206   - PROJECTLCIDINVOKE_Size = struct.unpack("<L", dir_stream.read(4))[0]
1207   - check_value('PROJECTLCIDINVOKE_Size', 0x0004, PROJECTLCIDINVOKE_Size)
1208   - PROJECTLCIDINVOKE_LcidInvoke = struct.unpack("<L", dir_stream.read(4))[0]
1209   - check_value('PROJECTLCIDINVOKE_LcidInvoke', 0x409, PROJECTLCIDINVOKE_LcidInvoke)
  1204 + projectlcidinvoke_id = struct.unpack("<H", dir_stream.read(2))[0]
  1205 + check_value('PROJECTLCIDINVOKE_Id', 0x0014, projectlcidinvoke_id)
  1206 + projectlcidinvoke_size = struct.unpack("<L", dir_stream.read(4))[0]
  1207 + check_value('PROJECTLCIDINVOKE_Size', 0x0004, projectlcidinvoke_size)
  1208 + projectlcidinvoke_lcidinvoke = struct.unpack("<L", dir_stream.read(4))[0]
  1209 + check_value('PROJECTLCIDINVOKE_LcidInvoke', 0x409, projectlcidinvoke_lcidinvoke)
1210 1210  
1211 1211 # PROJECTCODEPAGE Record
1212   - PROJECTCODEPAGE_Id = struct.unpack("<H", dir_stream.read(2))[0]
1213   - check_value('PROJECTCODEPAGE_Id', 0x0003, PROJECTCODEPAGE_Id)
1214   - PROJECTCODEPAGE_Size = struct.unpack("<L", dir_stream.read(4))[0]
1215   - check_value('PROJECTCODEPAGE_Size', 0x0002, PROJECTCODEPAGE_Size)
1216   - PROJECTCODEPAGE_CodePage = struct.unpack("<H", dir_stream.read(2))[0]
  1212 + projectcodepage_id = struct.unpack("<H", dir_stream.read(2))[0]
  1213 + check_value('PROJECTCODEPAGE_Id', 0x0003, projectcodepage_id)
  1214 + projectcodepage_size = struct.unpack("<L", dir_stream.read(4))[0]
  1215 + check_value('PROJECTCODEPAGE_Size', 0x0002, projectcodepage_size)
  1216 + projectcodepage_codepage = struct.unpack("<H", dir_stream.read(2))[0]
1217 1217  
1218 1218 # PROJECTNAME Record
1219   - PROJECTNAME_Id = struct.unpack("<H", dir_stream.read(2))[0]
1220   - check_value('PROJECTNAME_Id', 0x0004, PROJECTNAME_Id)
1221   - PROJECTNAME_SizeOfProjectName = struct.unpack("<L", dir_stream.read(4))[0]
1222   - if PROJECTNAME_SizeOfProjectName < 1 or PROJECTNAME_SizeOfProjectName > 128:
1223   - log.error("PROJECTNAME_SizeOfProjectName value not in range: {0}".format(PROJECTNAME_SizeOfProjectName))
1224   - PROJECTNAME_ProjectName = dir_stream.read(PROJECTNAME_SizeOfProjectName)
  1219 + projectname_id = struct.unpack("<H", dir_stream.read(2))[0]
  1220 + check_value('PROJECTNAME_Id', 0x0004, projectname_id)
  1221 + projectname_sizeofprojectname = struct.unpack("<L", dir_stream.read(4))[0]
  1222 + if projectname_sizeofprojectname < 1 or projectname_sizeofprojectname > 128:
  1223 + log.error("PROJECTNAME_SizeOfProjectName value not in range: {0}".format(projectname_sizeofprojectname))
  1224 + projectname_projectname = dir_stream.read(projectname_sizeofprojectname)
1225 1225  
1226 1226 # PROJECTDOCSTRING Record
1227   - PROJECTDOCSTRING_Id = struct.unpack("<H", dir_stream.read(2))[0]
1228   - check_value('PROJECTDOCSTRING_Id', 0x0005, PROJECTDOCSTRING_Id)
1229   - PROJECTDOCSTRING_SizeOfDocString = struct.unpack("<L", dir_stream.read(4))[0]
1230   - if PROJECTNAME_SizeOfProjectName > 2000:
  1227 + projectdocstring_id = struct.unpack("<H", dir_stream.read(2))[0]
  1228 + check_value('PROJECTDOCSTRING_Id', 0x0005, projectdocstring_id)
  1229 + projectdocstring_sizeofdocstring = struct.unpack("<L", dir_stream.read(4))[0]
  1230 + if projectname_sizeofprojectname > 2000:
1231 1231 log.error(
1232   - "PROJECTDOCSTRING_SizeOfDocString value not in range: {0}".format(PROJECTDOCSTRING_SizeOfDocString))
1233   - PROJECTDOCSTRING_DocString = dir_stream.read(PROJECTDOCSTRING_SizeOfDocString)
1234   - PROJECTDOCSTRING_Reserved = struct.unpack("<H", dir_stream.read(2))[0]
1235   - check_value('PROJECTDOCSTRING_Reserved', 0x0040, PROJECTDOCSTRING_Reserved)
1236   - PROJECTDOCSTRING_SizeOfDocStringUnicode = struct.unpack("<L", dir_stream.read(4))[0]
1237   - if PROJECTDOCSTRING_SizeOfDocStringUnicode % 2 != 0:
  1232 + "PROJECTDOCSTRING_SizeOfDocString value not in range: {0}".format(projectdocstring_sizeofdocstring))
  1233 + projectdocstring_docstring = dir_stream.read(projectdocstring_sizeofdocstring)
  1234 + projectdocstring_reserved = struct.unpack("<H", dir_stream.read(2))[0]
  1235 + check_value('PROJECTDOCSTRING_Reserved', 0x0040, projectdocstring_reserved)
  1236 + projectdocstring_sizeofdocstringunicode = struct.unpack("<L", dir_stream.read(4))[0]
  1237 + if projectdocstring_sizeofdocstringunicode % 2 != 0:
1238 1238 log.error("PROJECTDOCSTRING_SizeOfDocStringUnicode is not even")
1239   - PROJECTDOCSTRING_DocStringUnicode = dir_stream.read(PROJECTDOCSTRING_SizeOfDocStringUnicode)
  1239 + projectdocstring_docstringunicode = dir_stream.read(projectdocstring_sizeofdocstringunicode)
1240 1240  
1241 1241 # PROJECTHELPFILEPATH Record - MS-OVBA 2.3.4.2.1.7
1242   - PROJECTHELPFILEPATH_Id = struct.unpack("<H", dir_stream.read(2))[0]
1243   - check_value('PROJECTHELPFILEPATH_Id', 0x0006, PROJECTHELPFILEPATH_Id)
1244   - PROJECTHELPFILEPATH_SizeOfHelpFile1 = struct.unpack("<L", dir_stream.read(4))[0]
1245   - if PROJECTHELPFILEPATH_SizeOfHelpFile1 > 260:
  1242 + projecthelpfilepath_id = struct.unpack("<H", dir_stream.read(2))[0]
  1243 + check_value('PROJECTHELPFILEPATH_Id', 0x0006, projecthelpfilepath_id)
  1244 + projecthelpfilepath_sizeofhelpfile1 = struct.unpack("<L", dir_stream.read(4))[0]
  1245 + if projecthelpfilepath_sizeofhelpfile1 > 260:
1246 1246 log.error(
1247   - "PROJECTHELPFILEPATH_SizeOfHelpFile1 value not in range: {0}".format(PROJECTHELPFILEPATH_SizeOfHelpFile1))
1248   - PROJECTHELPFILEPATH_HelpFile1 = dir_stream.read(PROJECTHELPFILEPATH_SizeOfHelpFile1)
1249   - PROJECTHELPFILEPATH_Reserved = struct.unpack("<H", dir_stream.read(2))[0]
1250   - check_value('PROJECTHELPFILEPATH_Reserved', 0x003D, PROJECTHELPFILEPATH_Reserved)
1251   - PROJECTHELPFILEPATH_SizeOfHelpFile2 = struct.unpack("<L", dir_stream.read(4))[0]
1252   - if PROJECTHELPFILEPATH_SizeOfHelpFile2 != PROJECTHELPFILEPATH_SizeOfHelpFile1:
  1247 + "PROJECTHELPFILEPATH_SizeOfHelpFile1 value not in range: {0}".format(projecthelpfilepath_sizeofhelpfile1))
  1248 + projecthelpfilepath_helpfile1 = dir_stream.read(projecthelpfilepath_sizeofhelpfile1)
  1249 + projecthelpfilepath_reserved = struct.unpack("<H", dir_stream.read(2))[0]
  1250 + check_value('PROJECTHELPFILEPATH_Reserved', 0x003D, projecthelpfilepath_reserved)
  1251 + projecthelpfilepath_sizeofhelpfile2 = struct.unpack("<L", dir_stream.read(4))[0]
  1252 + if projecthelpfilepath_sizeofhelpfile2 != projecthelpfilepath_sizeofhelpfile1:
1253 1253 log.error("PROJECTHELPFILEPATH_SizeOfHelpFile1 does not equal PROJECTHELPFILEPATH_SizeOfHelpFile2")
1254   - PROJECTHELPFILEPATH_HelpFile2 = dir_stream.read(PROJECTHELPFILEPATH_SizeOfHelpFile2)
1255   - if PROJECTHELPFILEPATH_HelpFile2 != PROJECTHELPFILEPATH_HelpFile1:
  1254 + projecthelpfilepath_helpfile2 = dir_stream.read(projecthelpfilepath_sizeofhelpfile2)
  1255 + if projecthelpfilepath_helpfile2 != projecthelpfilepath_helpfile1:
1256 1256 log.error("PROJECTHELPFILEPATH_HelpFile1 does not equal PROJECTHELPFILEPATH_HelpFile2")
1257 1257  
1258 1258 # PROJECTHELPCONTEXT Record
1259   - PROJECTHELPCONTEXT_Id = struct.unpack("<H", dir_stream.read(2))[0]
1260   - check_value('PROJECTHELPCONTEXT_Id', 0x0007, PROJECTHELPCONTEXT_Id)
1261   - PROJECTHELPCONTEXT_Size = struct.unpack("<L", dir_stream.read(4))[0]
1262   - check_value('PROJECTHELPCONTEXT_Size', 0x0004, PROJECTHELPCONTEXT_Size)
1263   - PROJECTHELPCONTEXT_HelpContext = struct.unpack("<L", dir_stream.read(4))[0]
  1259 + projecthelpcontext_id = struct.unpack("<H", dir_stream.read(2))[0]
  1260 + check_value('PROJECTHELPCONTEXT_Id', 0x0007, projecthelpcontext_id)
  1261 + projecthelpcontext_size = struct.unpack("<L", dir_stream.read(4))[0]
  1262 + check_value('PROJECTHELPCONTEXT_Size', 0x0004, projecthelpcontext_size)
  1263 + projecthelpcontext_helpcontext = struct.unpack("<L", dir_stream.read(4))[0]
1264 1264  
1265 1265 # PROJECTLIBFLAGS Record
1266   - PROJECTLIBFLAGS_Id = struct.unpack("<H", dir_stream.read(2))[0]
1267   - check_value('PROJECTLIBFLAGS_Id', 0x0008, PROJECTLIBFLAGS_Id)
1268   - PROJECTLIBFLAGS_Size = struct.unpack("<L", dir_stream.read(4))[0]
1269   - check_value('PROJECTLIBFLAGS_Size', 0x0004, PROJECTLIBFLAGS_Size)
1270   - PROJECTLIBFLAGS_ProjectLibFlags = struct.unpack("<L", dir_stream.read(4))[0]
1271   - check_value('PROJECTLIBFLAGS_ProjectLibFlags', 0x0000, PROJECTLIBFLAGS_ProjectLibFlags)
  1266 + projectlibflags_id = struct.unpack("<H", dir_stream.read(2))[0]
  1267 + check_value('PROJECTLIBFLAGS_Id', 0x0008, projectlibflags_id)
  1268 + projectlibflags_size = struct.unpack("<L", dir_stream.read(4))[0]
  1269 + check_value('PROJECTLIBFLAGS_Size', 0x0004, projectlibflags_size)
  1270 + projectlibflags_projectlibflags = struct.unpack("<L", dir_stream.read(4))[0]
  1271 + check_value('PROJECTLIBFLAGS_ProjectLibFlags', 0x0000, projectlibflags_projectlibflags)
1272 1272  
1273 1273 # PROJECTVERSION Record
1274   - PROJECTVERSION_Id = struct.unpack("<H", dir_stream.read(2))[0]
1275   - check_value('PROJECTVERSION_Id', 0x0009, PROJECTVERSION_Id)
1276   - PROJECTVERSION_Reserved = struct.unpack("<L", dir_stream.read(4))[0]
1277   - check_value('PROJECTVERSION_Reserved', 0x0004, PROJECTVERSION_Reserved)
1278   - PROJECTVERSION_VersionMajor = struct.unpack("<L", dir_stream.read(4))[0]
1279   - PROJECTVERSION_VersionMinor = struct.unpack("<H", dir_stream.read(2))[0]
  1274 + projectversion_id = struct.unpack("<H", dir_stream.read(2))[0]
  1275 + check_value('PROJECTVERSION_Id', 0x0009, projectversion_id)
  1276 + projectversion_reserved = struct.unpack("<L", dir_stream.read(4))[0]
  1277 + check_value('PROJECTVERSION_Reserved', 0x0004, projectversion_reserved)
  1278 + projectversion_versionmajor = struct.unpack("<L", dir_stream.read(4))[0]
  1279 + projectversion_versionminor = struct.unpack("<H", dir_stream.read(2))[0]
1280 1280  
1281 1281 # PROJECTCONSTANTS Record
1282   - PROJECTCONSTANTS_Id = struct.unpack("<H", dir_stream.read(2))[0]
1283   - check_value('PROJECTCONSTANTS_Id', 0x000C, PROJECTCONSTANTS_Id)
1284   - PROJECTCONSTANTS_SizeOfConstants = struct.unpack("<L", dir_stream.read(4))[0]
1285   - if PROJECTCONSTANTS_SizeOfConstants > 1015:
  1282 + projectconstants_id = struct.unpack("<H", dir_stream.read(2))[0]
  1283 + check_value('PROJECTCONSTANTS_Id', 0x000C, projectconstants_id)
  1284 + projectconstants_sizeofconstants = struct.unpack("<L", dir_stream.read(4))[0]
  1285 + if projectconstants_sizeofconstants > 1015:
1286 1286 log.error(
1287   - "PROJECTCONSTANTS_SizeOfConstants value not in range: {0}".format(PROJECTCONSTANTS_SizeOfConstants))
1288   - PROJECTCONSTANTS_Constants = dir_stream.read(PROJECTCONSTANTS_SizeOfConstants)
1289   - PROJECTCONSTANTS_Reserved = struct.unpack("<H", dir_stream.read(2))[0]
1290   - check_value('PROJECTCONSTANTS_Reserved', 0x003C, PROJECTCONSTANTS_Reserved)
1291   - PROJECTCONSTANTS_SizeOfConstantsUnicode = struct.unpack("<L", dir_stream.read(4))[0]
1292   - if PROJECTCONSTANTS_SizeOfConstantsUnicode % 2 != 0:
  1287 + "PROJECTCONSTANTS_SizeOfConstants value not in range: {0}".format(projectconstants_sizeofconstants))
  1288 + projectconstants_constants = dir_stream.read(projectconstants_sizeofconstants)
  1289 + projectconstants_reserved = struct.unpack("<H", dir_stream.read(2))[0]
  1290 + check_value('PROJECTCONSTANTS_Reserved', 0x003C, projectconstants_reserved)
  1291 + projectconstants_sizeofconstantsunicode = struct.unpack("<L", dir_stream.read(4))[0]
  1292 + if projectconstants_sizeofconstantsunicode % 2 != 0:
1293 1293 log.error("PROJECTCONSTANTS_SizeOfConstantsUnicode is not even")
1294   - PROJECTCONSTANTS_ConstantsUnicode = dir_stream.read(PROJECTCONSTANTS_SizeOfConstantsUnicode)
  1294 + projectconstants_constantsunicode = dir_stream.read(projectconstants_sizeofconstantsunicode)
1295 1295  
1296 1296 # array of REFERENCE records
1297 1297 check = None
... ... @@ -1303,194 +1303,194 @@ def _extract_vba(ole, vba_root, project_path, dir_path):
1303 1303  
1304 1304 if check == 0x0016:
1305 1305 # REFERENCENAME
1306   - REFERENCE_Id = check
1307   - REFERENCE_SizeOfName = struct.unpack("<L", dir_stream.read(4))[0]
1308   - REFERENCE_Name = dir_stream.read(REFERENCE_SizeOfName)
1309   - REFERENCE_Reserved = struct.unpack("<H", dir_stream.read(2))[0]
1310   - check_value('REFERENCE_Reserved', 0x003E, REFERENCE_Reserved)
1311   - REFERENCE_SizeOfNameUnicode = struct.unpack("<L", dir_stream.read(4))[0]
1312   - REFERENCE_NameUnicode = dir_stream.read(REFERENCE_SizeOfNameUnicode)
  1306 + reference_id = check
  1307 + reference_sizeofname = struct.unpack("<L", dir_stream.read(4))[0]
  1308 + reference_name = dir_stream.read(reference_sizeofname)
  1309 + reference_reserved = struct.unpack("<H", dir_stream.read(2))[0]
  1310 + check_value('REFERENCE_Reserved', 0x003E, reference_reserved)
  1311 + reference_sizeofnameunicode = struct.unpack("<L", dir_stream.read(4))[0]
  1312 + reference_nameunicode = dir_stream.read(reference_sizeofnameunicode)
1313 1313 continue
1314 1314  
1315 1315 if check == 0x0033:
1316 1316 # REFERENCEORIGINAL (followed by REFERENCECONTROL)
1317   - REFERENCEORIGINAL_Id = check
1318   - REFERENCEORIGINAL_SizeOfLibidOriginal = struct.unpack("<L", dir_stream.read(4))[0]
1319   - REFERENCEORIGINAL_LibidOriginal = dir_stream.read(REFERENCEORIGINAL_SizeOfLibidOriginal)
  1317 + referenceoriginal_id = check
  1318 + referenceoriginal_sizeoflibidoriginal = struct.unpack("<L", dir_stream.read(4))[0]
  1319 + referenceoriginal_libidoriginal = dir_stream.read(referenceoriginal_sizeoflibidoriginal)
1320 1320 continue
1321 1321  
1322 1322 if check == 0x002F:
1323 1323 # REFERENCECONTROL
1324   - REFERENCECONTROL_Id = check
1325   - REFERENCECONTROL_SizeTwiddled = struct.unpack("<L", dir_stream.read(4))[0] # ignore
1326   - REFERENCECONTROL_SizeOfLibidTwiddled = struct.unpack("<L", dir_stream.read(4))[0]
1327   - REFERENCECONTROL_LibidTwiddled = dir_stream.read(REFERENCECONTROL_SizeOfLibidTwiddled)
1328   - REFERENCECONTROL_Reserved1 = struct.unpack("<L", dir_stream.read(4))[0] # ignore
1329   - check_value('REFERENCECONTROL_Reserved1', 0x0000, REFERENCECONTROL_Reserved1)
1330   - REFERENCECONTROL_Reserved2 = struct.unpack("<H", dir_stream.read(2))[0] # ignore
1331   - check_value('REFERENCECONTROL_Reserved2', 0x0000, REFERENCECONTROL_Reserved2)
  1324 + referencecontrol_id = check
  1325 + referencecontrol_sizetwiddled = struct.unpack("<L", dir_stream.read(4))[0] # ignore
  1326 + referencecontrol_sizeoflibidtwiddled = struct.unpack("<L", dir_stream.read(4))[0]
  1327 + referencecontrol_libidtwiddled = dir_stream.read(referencecontrol_sizeoflibidtwiddled)
  1328 + referencecontrol_reserved1 = struct.unpack("<L", dir_stream.read(4))[0] # ignore
  1329 + check_value('REFERENCECONTROL_Reserved1', 0x0000, referencecontrol_reserved1)
  1330 + referencecontrol_reserved2 = struct.unpack("<H", dir_stream.read(2))[0] # ignore
  1331 + check_value('REFERENCECONTROL_Reserved2', 0x0000, referencecontrol_reserved2)
1332 1332 # optional field
1333 1333 check2 = struct.unpack("<H", dir_stream.read(2))[0]
1334 1334 if check2 == 0x0016:
1335   - REFERENCECONTROL_NameRecordExtended_Id = check
1336   - REFERENCECONTROL_NameRecordExtended_SizeofName = struct.unpack("<L", dir_stream.read(4))[0]
1337   - REFERENCECONTROL_NameRecordExtended_Name = dir_stream.read(
1338   - REFERENCECONTROL_NameRecordExtended_SizeofName)
1339   - REFERENCECONTROL_NameRecordExtended_Reserved = struct.unpack("<H", dir_stream.read(2))[0]
  1335 + referencecontrol_namerecordextended_id = check
  1336 + referencecontrol_namerecordextended_sizeofname = struct.unpack("<L", dir_stream.read(4))[0]
  1337 + referencecontrol_namerecordextended_name = dir_stream.read(
  1338 + referencecontrol_namerecordextended_sizeofname)
  1339 + referencecontrol_namerecordextended_reserved = struct.unpack("<H", dir_stream.read(2))[0]
1340 1340 check_value('REFERENCECONTROL_NameRecordExtended_Reserved', 0x003E,
1341   - REFERENCECONTROL_NameRecordExtended_Reserved)
1342   - REFERENCECONTROL_NameRecordExtended_SizeOfNameUnicode = struct.unpack("<L", dir_stream.read(4))[0]
1343   - REFERENCECONTROL_NameRecordExtended_NameUnicode = dir_stream.read(
1344   - REFERENCECONTROL_NameRecordExtended_SizeOfNameUnicode)
1345   - REFERENCECONTROL_Reserved3 = struct.unpack("<H", dir_stream.read(2))[0]
  1341 + referencecontrol_namerecordextended_reserved)
  1342 + referencecontrol_namerecordextended_sizeofnameunicode = struct.unpack("<L", dir_stream.read(4))[0]
  1343 + referencecontrol_namerecordextended_nameunicode = dir_stream.read(
  1344 + referencecontrol_namerecordextended_sizeofnameunicode)
  1345 + referencecontrol_reserved3 = struct.unpack("<H", dir_stream.read(2))[0]
1346 1346 else:
1347   - REFERENCECONTROL_Reserved3 = check2
1348   -
1349   - check_value('REFERENCECONTROL_Reserved3', 0x0030, REFERENCECONTROL_Reserved3)
1350   - REFERENCECONTROL_SizeExtended = struct.unpack("<L", dir_stream.read(4))[0]
1351   - REFERENCECONTROL_SizeOfLibidExtended = struct.unpack("<L", dir_stream.read(4))[0]
1352   - REFERENCECONTROL_LibidExtended = dir_stream.read(REFERENCECONTROL_SizeOfLibidExtended)
1353   - REFERENCECONTROL_Reserved4 = struct.unpack("<L", dir_stream.read(4))[0]
1354   - REFERENCECONTROL_Reserved5 = struct.unpack("<H", dir_stream.read(2))[0]
1355   - REFERENCECONTROL_OriginalTypeLib = dir_stream.read(16)
1356   - REFERENCECONTROL_Cookie = struct.unpack("<L", dir_stream.read(4))[0]
  1347 + referencecontrol_reserved3 = check2
  1348 +
  1349 + check_value('REFERENCECONTROL_Reserved3', 0x0030, referencecontrol_reserved3)
  1350 + referencecontrol_sizeextended = struct.unpack("<L", dir_stream.read(4))[0]
  1351 + referencecontrol_sizeoflibidextended = struct.unpack("<L", dir_stream.read(4))[0]
  1352 + referencecontrol_libidextended = dir_stream.read(referencecontrol_sizeoflibidextended)
  1353 + referencecontrol_reserved4 = struct.unpack("<L", dir_stream.read(4))[0]
  1354 + referencecontrol_reserved5 = struct.unpack("<H", dir_stream.read(2))[0]
  1355 + referencecontrol_originaltypelib = dir_stream.read(16)
  1356 + referencecontrol_cookie = struct.unpack("<L", dir_stream.read(4))[0]
1357 1357 continue
1358 1358  
1359 1359 if check == 0x000D:
1360 1360 # REFERENCEREGISTERED
1361   - REFERENCEREGISTERED_Id = check
1362   - REFERENCEREGISTERED_Size = struct.unpack("<L", dir_stream.read(4))[0]
1363   - REFERENCEREGISTERED_SizeOfLibid = struct.unpack("<L", dir_stream.read(4))[0]
1364   - REFERENCEREGISTERED_Libid = dir_stream.read(REFERENCEREGISTERED_SizeOfLibid)
1365   - REFERENCEREGISTERED_Reserved1 = struct.unpack("<L", dir_stream.read(4))[0]
1366   - check_value('REFERENCEREGISTERED_Reserved1', 0x0000, REFERENCEREGISTERED_Reserved1)
1367   - REFERENCEREGISTERED_Reserved2 = struct.unpack("<H", dir_stream.read(2))[0]
1368   - check_value('REFERENCEREGISTERED_Reserved2', 0x0000, REFERENCEREGISTERED_Reserved2)
  1361 + referenceregistered_id = check
  1362 + referenceregistered_size = struct.unpack("<L", dir_stream.read(4))[0]
  1363 + referenceregistered_sizeoflibid = struct.unpack("<L", dir_stream.read(4))[0]
  1364 + referenceregistered_libid = dir_stream.read(referenceregistered_sizeoflibid)
  1365 + referenceregistered_reserved1 = struct.unpack("<L", dir_stream.read(4))[0]
  1366 + check_value('REFERENCEREGISTERED_Reserved1', 0x0000, referenceregistered_reserved1)
  1367 + referenceregistered_reserved2 = struct.unpack("<H", dir_stream.read(2))[0]
  1368 + check_value('REFERENCEREGISTERED_Reserved2', 0x0000, referenceregistered_reserved2)
1369 1369 continue
1370 1370  
1371 1371 if check == 0x000E:
1372 1372 # REFERENCEPROJECT
1373   - REFERENCEPROJECT_Id = check
1374   - REFERENCEPROJECT_Size = struct.unpack("<L", dir_stream.read(4))[0]
1375   - REFERENCEPROJECT_SizeOfLibidAbsolute = struct.unpack("<L", dir_stream.read(4))[0]
1376   - REFERENCEPROJECT_LibidAbsolute = dir_stream.read(REFERENCEPROJECT_SizeOfLibidAbsolute)
1377   - REFERENCEPROJECT_SizeOfLibidRelative = struct.unpack("<L", dir_stream.read(4))[0]
1378   - REFERENCEPROJECT_LibidRelative = dir_stream.read(REFERENCEPROJECT_SizeOfLibidRelative)
1379   - REFERENCEPROJECT_MajorVersion = struct.unpack("<L", dir_stream.read(4))[0]
1380   - REFERENCEPROJECT_MinorVersion = struct.unpack("<H", dir_stream.read(2))[0]
  1373 + referenceproject_id = check
  1374 + referenceproject_size = struct.unpack("<L", dir_stream.read(4))[0]
  1375 + referenceproject_sizeoflibidabsolute = struct.unpack("<L", dir_stream.read(4))[0]
  1376 + referenceproject_libidabsolute = dir_stream.read(referenceproject_sizeoflibidabsolute)
  1377 + referenceproject_sizeoflibidrelative = struct.unpack("<L", dir_stream.read(4))[0]
  1378 + referenceproject_libidrelative = dir_stream.read(referenceproject_sizeoflibidrelative)
  1379 + referenceproject_majorversion = struct.unpack("<L", dir_stream.read(4))[0]
  1380 + referenceproject_minorversion = struct.unpack("<H", dir_stream.read(2))[0]
1381 1381 continue
1382 1382  
1383 1383 log.error('invalid or unknown check Id {0:04X}'.format(check))
1384 1384 sys.exit(0)
1385 1385  
1386   - PROJECTMODULES_Id = check #struct.unpack("<H", dir_stream.read(2))[0]
1387   - check_value('PROJECTMODULES_Id', 0x000F, PROJECTMODULES_Id)
1388   - PROJECTMODULES_Size = struct.unpack("<L", dir_stream.read(4))[0]
1389   - check_value('PROJECTMODULES_Size', 0x0002, PROJECTMODULES_Size)
1390   - PROJECTMODULES_Count = struct.unpack("<H", dir_stream.read(2))[0]
1391   - PROJECTMODULES_ProjectCookieRecord_Id = struct.unpack("<H", dir_stream.read(2))[0]
1392   - check_value('PROJECTMODULES_ProjectCookieRecord_Id', 0x0013, PROJECTMODULES_ProjectCookieRecord_Id)
1393   - PROJECTMODULES_ProjectCookieRecord_Size = struct.unpack("<L", dir_stream.read(4))[0]
1394   - check_value('PROJECTMODULES_ProjectCookieRecord_Size', 0x0002, PROJECTMODULES_ProjectCookieRecord_Size)
1395   - PROJECTMODULES_ProjectCookieRecord_Cookie = struct.unpack("<H", dir_stream.read(2))[0]
1396   -
1397   - log.debug("parsing {0} modules".format(PROJECTMODULES_Count))
1398   - for x in xrange(0, PROJECTMODULES_Count):
1399   - MODULENAME_Id = struct.unpack("<H", dir_stream.read(2))[0]
1400   - check_value('MODULENAME_Id', 0x0019, MODULENAME_Id)
1401   - MODULENAME_SizeOfModuleName = struct.unpack("<L", dir_stream.read(4))[0]
1402   - MODULENAME_ModuleName = dir_stream.read(MODULENAME_SizeOfModuleName)
  1386 + projectmodules_id = check #struct.unpack("<H", dir_stream.read(2))[0]
  1387 + check_value('PROJECTMODULES_Id', 0x000F, projectmodules_id)
  1388 + projectmodules_size = struct.unpack("<L", dir_stream.read(4))[0]
  1389 + check_value('PROJECTMODULES_Size', 0x0002, projectmodules_size)
  1390 + projectmodules_count = struct.unpack("<H", dir_stream.read(2))[0]
  1391 + projectmodules_projectcookierecord_id = struct.unpack("<H", dir_stream.read(2))[0]
  1392 + check_value('PROJECTMODULES_ProjectCookieRecord_Id', 0x0013, projectmodules_projectcookierecord_id)
  1393 + projectmodules_projectcookierecord_size = struct.unpack("<L", dir_stream.read(4))[0]
  1394 + check_value('PROJECTMODULES_ProjectCookieRecord_Size', 0x0002, projectmodules_projectcookierecord_size)
  1395 + projectmodules_projectcookierecord_cookie = struct.unpack("<H", dir_stream.read(2))[0]
  1396 +
  1397 + log.debug("parsing {0} modules".format(projectmodules_count))
  1398 + for x in xrange(0, projectmodules_count):
  1399 + modulename_id = struct.unpack("<H", dir_stream.read(2))[0]
  1400 + check_value('MODULENAME_Id', 0x0019, modulename_id)
  1401 + modulename_sizeofmodulename = struct.unpack("<L", dir_stream.read(4))[0]
  1402 + modulename_modulename = dir_stream.read(modulename_sizeofmodulename)
1403 1403 # account for optional sections
1404 1404 section_id = struct.unpack("<H", dir_stream.read(2))[0]
1405 1405 if section_id == 0x0047:
1406   - MODULENAMEUNICODE_Id = section_id
1407   - MODULENAMEUNICODE_SizeOfModuleNameUnicode = struct.unpack("<L", dir_stream.read(4))[0]
1408   - MODULENAMEUNICODE_ModuleNameUnicode = dir_stream.read(MODULENAMEUNICODE_SizeOfModuleNameUnicode)
  1406 + modulenameunicode_id = section_id
  1407 + modulenameunicode_sizeofmodulenameunicode = struct.unpack("<L", dir_stream.read(4))[0]
  1408 + modulenameunicode_modulenameunicode = dir_stream.read(modulenameunicode_sizeofmodulenameunicode)
1409 1409 section_id = struct.unpack("<H", dir_stream.read(2))[0]
1410 1410 if section_id == 0x001A:
1411   - MODULESTREAMNAME_id = section_id
1412   - MODULESTREAMNAME_SizeOfStreamName = struct.unpack("<L", dir_stream.read(4))[0]
1413   - MODULESTREAMNAME_StreamName = dir_stream.read(MODULESTREAMNAME_SizeOfStreamName)
1414   - MODULESTREAMNAME_Reserved = struct.unpack("<H", dir_stream.read(2))[0]
1415   - check_value('MODULESTREAMNAME_Reserved', 0x0032, MODULESTREAMNAME_Reserved)
1416   - MODULESTREAMNAME_SizeOfStreamNameUnicode = struct.unpack("<L", dir_stream.read(4))[0]
1417   - MODULESTREAMNAME_StreamNameUnicode = dir_stream.read(MODULESTREAMNAME_SizeOfStreamNameUnicode)
  1411 + modulestreamname_id = section_id
  1412 + modulestreamname_sizeofstreamname = struct.unpack("<L", dir_stream.read(4))[0]
  1413 + modulestreamname_streamname = dir_stream.read(modulestreamname_sizeofstreamname)
  1414 + modulestreamname_reserved = struct.unpack("<H", dir_stream.read(2))[0]
  1415 + check_value('MODULESTREAMNAME_Reserved', 0x0032, modulestreamname_reserved)
  1416 + modulestreamname_sizeofstreamnameunicode = struct.unpack("<L", dir_stream.read(4))[0]
  1417 + modulestreamname_streamnameunicode = dir_stream.read(modulestreamname_sizeofstreamnameunicode)
1418 1418 section_id = struct.unpack("<H", dir_stream.read(2))[0]
1419 1419 if section_id == 0x001C:
1420   - MODULEDOCSTRING_Id = section_id
1421   - check_value('MODULEDOCSTRING_Id', 0x001C, MODULEDOCSTRING_Id)
1422   - MODULEDOCSTRING_SizeOfDocString = struct.unpack("<L", dir_stream.read(4))[0]
1423   - MODULEDOCSTRING_DocString = dir_stream.read(MODULEDOCSTRING_SizeOfDocString)
1424   - MODULEDOCSTRING_Reserved = struct.unpack("<H", dir_stream.read(2))[0]
1425   - check_value('MODULEDOCSTRING_Reserved', 0x0048, MODULEDOCSTRING_Reserved)
1426   - MODULEDOCSTRING_SizeOfDocStringUnicode = struct.unpack("<L", dir_stream.read(4))[0]
1427   - MODULEDOCSTRING_DocStringUnicode = dir_stream.read(MODULEDOCSTRING_SizeOfDocStringUnicode)
  1420 + moduledocstring_id = section_id
  1421 + check_value('MODULEDOCSTRING_Id', 0x001C, moduledocstring_id)
  1422 + moduledocstring_sizeofdocstring = struct.unpack("<L", dir_stream.read(4))[0]
  1423 + moduledocstring_docstring = dir_stream.read(moduledocstring_sizeofdocstring)
  1424 + moduledocstring_reserved = struct.unpack("<H", dir_stream.read(2))[0]
  1425 + check_value('MODULEDOCSTRING_Reserved', 0x0048, moduledocstring_reserved)
  1426 + moduledocstring_sizeofdocstringunicode = struct.unpack("<L", dir_stream.read(4))[0]
  1427 + moduledocstring_docstringunicode = dir_stream.read(moduledocstring_sizeofdocstringunicode)
1428 1428 section_id = struct.unpack("<H", dir_stream.read(2))[0]
1429 1429 if section_id == 0x0031:
1430   - MODULEOFFSET_Id = section_id
1431   - check_value('MODULEOFFSET_Id', 0x0031, MODULEOFFSET_Id)
1432   - MODULEOFFSET_Size = struct.unpack("<L", dir_stream.read(4))[0]
1433   - check_value('MODULEOFFSET_Size', 0x0004, MODULEOFFSET_Size)
1434   - MODULEOFFSET_TextOffset = struct.unpack("<L", dir_stream.read(4))[0]
  1430 + moduleoffset_id = section_id
  1431 + check_value('MODULEOFFSET_Id', 0x0031, moduleoffset_id)
  1432 + moduleoffset_size = struct.unpack("<L", dir_stream.read(4))[0]
  1433 + check_value('MODULEOFFSET_Size', 0x0004, moduleoffset_size)
  1434 + moduleoffset_textoffset = struct.unpack("<L", dir_stream.read(4))[0]
1435 1435 section_id = struct.unpack("<H", dir_stream.read(2))[0]
1436 1436 if section_id == 0x001E:
1437   - MODULEHELPCONTEXT_Id = section_id
1438   - check_value('MODULEHELPCONTEXT_Id', 0x001E, MODULEHELPCONTEXT_Id)
1439   - MODULEHELPCONTEXT_Size = struct.unpack("<L", dir_stream.read(4))[0]
1440   - check_value('MODULEHELPCONTEXT_Size', 0x0004, MODULEHELPCONTEXT_Size)
1441   - MODULEHELPCONTEXT_HelpContext = struct.unpack("<L", dir_stream.read(4))[0]
  1437 + modulehelpcontext_id = section_id
  1438 + check_value('MODULEHELPCONTEXT_Id', 0x001E, modulehelpcontext_id)
  1439 + modulehelpcontext_size = struct.unpack("<L", dir_stream.read(4))[0]
  1440 + check_value('MODULEHELPCONTEXT_Size', 0x0004, modulehelpcontext_size)
  1441 + modulehelpcontext_helpcontext = struct.unpack("<L", dir_stream.read(4))[0]
1442 1442 section_id = struct.unpack("<H", dir_stream.read(2))[0]
1443 1443 if section_id == 0x002C:
1444   - MODULECOOKIE_Id = section_id
1445   - check_value('MODULECOOKIE_Id', 0x002C, MODULECOOKIE_Id)
1446   - MODULECOOKIE_Size = struct.unpack("<L", dir_stream.read(4))[0]
1447   - check_value('MODULECOOKIE_Size', 0x0002, MODULECOOKIE_Size)
1448   - MODULECOOKIE_Cookie = struct.unpack("<H", dir_stream.read(2))[0]
  1444 + modulecookie_id = section_id
  1445 + check_value('MODULECOOKIE_Id', 0x002C, modulecookie_id)
  1446 + modulecookie_size = struct.unpack("<L", dir_stream.read(4))[0]
  1447 + check_value('MODULECOOKIE_Size', 0x0002, modulecookie_size)
  1448 + modulecookie_cookie = struct.unpack("<H", dir_stream.read(2))[0]
1449 1449 section_id = struct.unpack("<H", dir_stream.read(2))[0]
1450 1450 if section_id == 0x0021 or section_id == 0x0022:
1451   - MODULETYPE_Id = section_id
1452   - MODULETYPE_Reserved = struct.unpack("<L", dir_stream.read(4))[0]
  1451 + moduletype_id = section_id
  1452 + moduletype_reserved = struct.unpack("<L", dir_stream.read(4))[0]
1453 1453 section_id = struct.unpack("<H", dir_stream.read(2))[0]
1454 1454 if section_id == 0x0025:
1455   - MODULEREADONLY_Id = section_id
1456   - check_value('MODULEREADONLY_Id', 0x0025, MODULEREADONLY_Id)
1457   - MODULEREADONLY_Reserved = struct.unpack("<L", dir_stream.read(4))[0]
1458   - check_value('MODULEREADONLY_Reserved', 0x0000, MODULEREADONLY_Reserved)
  1455 + modulereadonly_id = section_id
  1456 + check_value('MODULEREADONLY_Id', 0x0025, modulereadonly_id)
  1457 + modulereadonly_reserved = struct.unpack("<L", dir_stream.read(4))[0]
  1458 + check_value('MODULEREADONLY_Reserved', 0x0000, modulereadonly_reserved)
1459 1459 section_id = struct.unpack("<H", dir_stream.read(2))[0]
1460 1460 if section_id == 0x0028:
1461   - MODULEPRIVATE_Id = section_id
1462   - check_value('MODULEPRIVATE_Id', 0x0028, MODULEPRIVATE_Id)
1463   - MODULEPRIVATE_Reserved = struct.unpack("<L", dir_stream.read(4))[0]
1464   - check_value('MODULEPRIVATE_Reserved', 0x0000, MODULEPRIVATE_Reserved)
  1461 + moduleprivate_id = section_id
  1462 + check_value('MODULEPRIVATE_Id', 0x0028, moduleprivate_id)
  1463 + moduleprivate_reserved = struct.unpack("<L", dir_stream.read(4))[0]
  1464 + check_value('MODULEPRIVATE_Reserved', 0x0000, moduleprivate_reserved)
1465 1465 section_id = struct.unpack("<H", dir_stream.read(2))[0]
1466 1466 if section_id == 0x002B: # TERMINATOR
1467   - MODULE_Reserved = struct.unpack("<L", dir_stream.read(4))[0]
1468   - check_value('MODULE_Reserved', 0x0000, MODULE_Reserved)
  1467 + module_reserved = struct.unpack("<L", dir_stream.read(4))[0]
  1468 + check_value('MODULE_Reserved', 0x0000, module_reserved)
1469 1469 section_id = None
1470 1470 if section_id != None:
1471 1471 log.warning('unknown or invalid module section id {0:04X}'.format(section_id))
1472 1472  
1473   - log.debug('Project CodePage = %d' % PROJECTCODEPAGE_CodePage)
1474   - vba_codec = 'cp%d' % PROJECTCODEPAGE_CodePage
1475   - log.debug("ModuleName = {0}".format(MODULENAME_ModuleName))
1476   - log.debug("StreamName = {0}".format(repr(MODULESTREAMNAME_StreamName)))
1477   - streamname_unicode = MODULESTREAMNAME_StreamName.decode(vba_codec)
  1473 + log.debug('Project CodePage = %d' % projectcodepage_codepage)
  1474 + vba_codec = 'cp%d' % projectcodepage_codepage
  1475 + log.debug("ModuleName = {0}".format(modulename_modulename))
  1476 + log.debug("StreamName = {0}".format(repr(modulestreamname_streamname)))
  1477 + streamname_unicode = modulestreamname_streamname.decode(vba_codec)
1478 1478 log.debug("StreamName.decode('%s') = %s" % (vba_codec, repr(streamname_unicode)))
1479   - log.debug("StreamNameUnicode = {0}".format(repr(MODULESTREAMNAME_StreamNameUnicode)))
1480   - log.debug("TextOffset = {0}".format(MODULEOFFSET_TextOffset))
  1479 + log.debug("StreamNameUnicode = {0}".format(repr(modulestreamname_streamnameunicode)))
  1480 + log.debug("TextOffset = {0}".format(moduleoffset_textoffset))
1481 1481  
1482 1482 code_path = vba_root + u'VBA/' + streamname_unicode
1483 1483 #TODO: test if stream exists
1484 1484 log.debug('opening VBA code stream %s' % repr(code_path))
1485 1485 code_data = ole.openstream(code_path).read()
1486 1486 log.debug("length of code_data = {0}".format(len(code_data)))
1487   - log.debug("offset of code_data = {0}".format(MODULEOFFSET_TextOffset))
1488   - code_data = code_data[MODULEOFFSET_TextOffset:]
  1487 + log.debug("offset of code_data = {0}".format(moduleoffset_textoffset))
  1488 + code_data = code_data[moduleoffset_textoffset:]
1489 1489 if len(code_data) > 0:
1490 1490 code_data = decompress_stream(code_data)
1491 1491 # case-insensitive search in the code_modules dict to find the file extension:
1492   - filext = code_modules.get(MODULENAME_ModuleName.lower(), 'bin')
1493   - filename = '{0}.{1}'.format(MODULENAME_ModuleName, filext)
  1492 + filext = code_modules.get(modulename_modulename.lower(), 'bin')
  1493 + filename = '{0}.{1}'.format(modulename_modulename, filext)
1494 1494 #TODO: also yield the codepage so that callers can decode it properly
1495 1495 yield (code_path, filename, code_data)
1496 1496 # print '-'*79
... ... @@ -1500,7 +1500,7 @@ def _extract_vba(ole, vba_root, project_path, dir_path):
1500 1500 # print ''
1501 1501 log.debug('extracted file {0}'.format(filename))
1502 1502 else:
1503   - log.warning("module stream {0} has code data length 0".format(MODULESTREAMNAME_StreamName))
  1503 + log.warning("module stream {0} has code data length 0".format(modulestreamname_streamname))
1504 1504 return
1505 1505  
1506 1506  
... ...