Ejemplo n.º 1
0
        public static void ExportLuaFIles(ProcessReader reader, long assetPoolsAddress, long assetSizesAddress, string gameType)
        {
            // Found the game
            Console.WriteLine("Found supported game: Call of Duty: Black Ops 4");

            // Get Base Address for ASLR and Scans
            long baseAddress = reader.GetBaseAddress();

            // Validate by XModel Name
            if (reader.ReadUInt64(reader.ReadStruct <AssetPool>(baseAddress + assetPoolsAddress + 0x20 * 0x4).PoolPointer) == 0x04647533e968c910)
            {
                AssetPool LuaPoolData = reader.ReadStruct <AssetPool>(baseAddress + assetPoolsAddress + 0x20 * 0x67);

                long address    = LuaPoolData.PoolPointer;
                long endAddress = LuaPoolData.PoolSize * LuaPoolData.AssetSize + address;

                Directory.CreateDirectory("t8_luafiles");
                int filesExported = 0;
                for (int i = 0; i < LuaPoolData.PoolSize; i++)
                {
                    var data = reader.ReadStruct <LuaFile>(address + (i * LuaPoolData.AssetSize));

                    if (data.NullPointer != 0 || data.Hash == 0)
                    {
                        continue;
                    }
                    if (data.Hash >= address && data.Hash <= endAddress)
                    {
                        continue;
                    }

                    filesExported++;
                    var    RawData = reader.ReadBytes(data.startLocation, data.DataSize);
                    ulong  assetHash = (ulong)data.Hash & 0xFFFFFFFFFFFFFFF;
                    string HashString, fileName;
                    //if (!Program.AssetNameCache.Entries.TryGetValue(assetHash, out HashString))
                    fileName = String.Format("t8_luafiles\\LuaFile_{0:x}.lua", assetHash);
                    //else
                    //fileName = String.Format("t8_luafiles\\{0}.lua", HashString);
                    if (File.Exists(fileName) && new FileInfo(fileName).Length == data.DataSize)
                    {
                        continue;
                    }
                    File.WriteAllBytes(fileName, RawData);
                }

                Console.WriteLine("Exported {0} files", filesExported);
            }
            else
            {
                Console.WriteLine("Unsupported version of game found");
            }
        }