Example #1
0
        // Old CS versions
        byte[] unpackNativeFile1(PeImage peImage)
        {
            const int dataDirNum = 6;	// debug dir
            const int dotNetDirNum = 14;

            if (peImage.OptionalHeader.dataDirectories[dataDirNum].virtualAddress == 0)
                return null;
            if (peImage.OptionalHeader.dataDirectories[dataDirNum].size != 0x48)
                return null;

            var fileData = peImage.readAllBytes();
            int dataDir = (int)peImage.OptionalHeader.offsetOfDataDirectory(dataDirNum);
            int dotNetDir = (int)peImage.OptionalHeader.offsetOfDataDirectory(dotNetDirNum);
            writeUInt32(fileData, dotNetDir, BitConverter.ToUInt32(fileData, dataDir));
            writeUInt32(fileData, dotNetDir + 4, BitConverter.ToUInt32(fileData, dataDir + 4));
            writeUInt32(fileData, dataDir, 0);
            writeUInt32(fileData, dataDir + 4, 0);
            ModuleBytes = fileData;
            return fileData;
        }