Beispiel #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);
        }