public override bool Execute() { using (FileStream fs = File.OpenRead(MainAssembly)) using (PEReader peFile = new PEReader(fs)) { DirectoryEntry resourceDirectory = peFile.PEHeaders.PEHeader.ResourceTableDirectory; if (resourceDirectory.Size != 0 && peFile.PEHeaders.TryGetDirectoryOffset(resourceDirectory, out int rsrcOffset)) { using (var bw = new BinaryWriter(File.OpenWrite(ResourceFile))) { ResWriter.WriteResources(peFile, rsrcOffset, resourceDirectory.Size, bw); } } else { if (File.Exists(ResourceFile)) { try { File.Delete(ResourceFile); } catch { } } } } return(true); }
public static void WriteResources(PEReader reader, int rsrcOffset, int rsrcSize, BinaryWriter bw) { var rw = new ResWriter(reader.GetEntireImage(), reader, rsrcOffset, rsrcSize, bw); // First entry is a null resource entry bw.Write(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }); rw.DumpDirectory(reader.GetEntireImage().GetReader(rsrcOffset, rsrcSize), 0); }