internal static void SetFilePaths() { BadCDKeysText = AppDirectory + @"\Text\BadCdKeys.txt"; StarcraftExe = AppDirectory + @"\Star\Starcraft.exe"; StormDll = AppDirectory + @"\Star\Storm.dll"; BattleSnp = AppDirectory + @"\Star\Battle.snp"; StarBin = AppDirectory + @"\Lockdown\Star.bin"; LockdownPath = AppDirectory + @"\Lockdown\"; SetHashFiles(); FilesBuffered.LoadFiles(); }
// public unsafe PeFileLoader(string path) public unsafe PeFileLoader(int fileType, int ldDigit) { //byte[] file = File.ReadAllBytes(path); byte[] file; switch (fileType) { case 0: file = FilesBuffered.ReturnBytes(0); break; case 1: file = FilesBuffered.ReturnBytes(1); break; case 2: file = FilesBuffered.ReturnBytes(2); break; case 3: file = FilesBuffered.ReturnBytes(ldDigit + 4); break; default: file = null; break; } m_ptr = Marshal.AllocHGlobal(file.Length); Marshal.Copy(file, 0, m_ptr, file.Length); file = null; PeFileReader.DosImageHeader *dosheader; PeFileReader.NtHeaders * ntheader; byte *pFile = (byte *)m_ptr.ToPointer(); dosheader = (PeFileReader.DosImageHeader *)pFile; if (dosheader->e_magic != DOS_SIGNATURE) { Marshal.FreeHGlobal(m_ptr); m_ptr = IntPtr.Zero; throw new FileLoadException("Invalid DOS signature."); } ntheader = (PeFileReader.NtHeaders *)(pFile + dosheader->e_lfanew); if (ntheader->Signature != NT_SIGNATURE) { Marshal.FreeHGlobal(m_ptr); m_ptr = IntPtr.Zero; throw new FileLoadException("Invalid NT signature."); } m_baseAddrPtr = Marshal.AllocHGlobal(ntheader->OptionalHeader.SizeOfImage); byte *baseaddr = (byte *)m_baseAddrPtr.ToPointer(); Native.Memcpy((void *)baseaddr, (void *)dosheader, dosheader->e_lfanew + ntheader->OptionalHeader.SizeOfHeaders); int imageBase, relocOffset; imageBase = ntheader->OptionalHeader.ImageBase; CopySections(pFile, ntheader, baseaddr); relocOffset = (int)(baseaddr - imageBase); if (relocOffset != 0) { PerformBaseReloc(baseaddr, ntheader, relocOffset); } }