#!/usr/bin/env python # By Daniel Pistelli & Nguyen Tan Cong # This script is to patch DLL/EXE MajorVersion to 5, # so they can be loaded by Windows XP. # This is the problem introduced by compiling on Windows 7, using VS2013. import sys, struct if len(sys.argv) < 2: print("Usage: %s <pe_file_path>" % sys.argv[0]) sys.exit(0) pe_file_path = sys.argv[1] with open(pe_file_path, "rb") as f: b = f.read() if not b.startswith("MZ"): print("Not a PE file") sys.exit(0) e_lfanew = struct.unpack_from("<I", b, 0x3C)[0] vb = struct.pack("<HHHHH", 5, 0, 0, 0, 5) # encode versions # patches MajorOperatingSystemVersion and MajorSubsystemVersion b = b[0:e_lfanew + 0x40] + vb + b[e_lfanew + 0x4A:] # write back to file with open(pe_file_path, "wb") as f: f.write(b)