示例#1
0
        /// <summary>
        /// Dumps the content of the first .raf/.raf.dat archive seen in the given directory.
        /// Outputs to the given ostream
        /// </summary>
        public static bool Dump(string directory, StreamWriter ostream)
        {
            #region output_usage_header
            ostream.WriteLine("Experimental RAF Dumper by ItzWarty @ ItzWarty.com April 28 2011 10:00pm pst");
            ostream.WriteLine("RAF dogcumentation @ bit.ly/mSyYrR ");
            ostream.WriteLine("USAGE: RAF_DUMP (Or just double click executable)");
            ostream.WriteLine("Precondition: RAF_DUMP is sitting next to a Riot Archive File.");
            ostream.WriteLine("Postcondition: 'dump' folder created.  RAF extracted into folder.");
            #endregion
            //string dumpDir = @"C:\Riot Games\League of Legends\RADS\projects\lol_game_client\filearchives\0.0.0.28\dump\";
            
            //We write the file containing "name hash" next to our program.
            string hashesFile = Environment.CurrentDirectory + "\\hashes.txt";
            string hashesLog = "";

            //We write to this file saying what we don't compress
            string notcompressedsFile = Environment.CurrentDirectory + "\\nocompress.txt";
            string notcompressedsLog = "";

            string dumpDir = Environment.CurrentDirectory + "\\dump\\";
            String[] filesInDir = Directory.GetFiles(Environment.CurrentDirectory);
            String rafName = "";
            foreach (String fileName in filesInDir)
            {
                if (fileName.Split("\\").Last().EndsWith(".raf", StringComparison.InvariantCultureIgnoreCase))
                {
                    rafName = fileName;
                }
            }
            if (rafName == "")
            {
                ostream.WriteLine("Couldn't find RAF file!!");
                //ostream.WriteLine("This executable must be in the same folder as a *.raf and *.raf.dat file!");
                //ostream.WriteLine("Exiting... Press a key (or two) to exit");
                //ostream.ReadKey();
                return false;
            }
            ostream.WriteLine("Found RAF: " + rafName);
            RAFArchive raf = new RAFArchive(rafName);
            FileStream fStream = raf.GetDataFileContentStream();
            //DeflateStream dfStream = new DeflateStream(fStream, CompressionMode.Decompress);

            //int loggingOffset = 10; //No longer applicable since we aren't logging to system.out console directly
            List<RAFFileListEntry> files = raf.GetDirectoryFile().GetFileList().GetFileEntries();
            foreach (RAFFileListEntry entry in files)
            {
                //ostream.SetCursorPosition(0, 7);
                ostream.WriteLine("Dumping: " + entry.FileName.Split("\\").Last() + " ".Repeat(40));
                //ostream.SetCursorPosition(0, 8);
                ostream.WriteLine("  Data File Offset: $" + entry.FileOffset.ToString("x") + "; Size:" + entry.FileSize + " ($" + entry.FileSize.ToString("x") + ")" + " ".Repeat(40));
                //Console.SetCursorPosition(0, 7);
                //Console.WriteLine("  Expected FileName Checksum: $" + entry.StringNameHash.ToString("x") + "; Calculated:" + Adler32(entry.GetFileName).ToString("x")/*entry.GetFileName.GetHashCode().ToString("x")*/ + " ".Repeat(40));
                //Console.WriteLine("  To: " + dumpDir + entry.GetFileName+";;");
                hashesLog += entry.FileName + "|||" + entry.StringNameHash + "\n";
                //zlib.ad
                byte[] buffer = new byte[entry.FileSize];
                fStream.Seek(entry.FileOffset, SeekOrigin.Begin);
                fStream.Read(buffer, 0, (int)entry.FileSize);

                PrepareDirectory((dumpDir + entry.FileName).Replace("/", "\\"));
                try
                {
                    MemoryStream mStream = new MemoryStream(buffer);
                    zlib.ZInputStream zinput = new zlib.ZInputStream(mStream);

                    List<byte> dBuffer = new List<byte>(); //decompressed buffer, arraylist to my knowledge...
                    int data = 0;
                    while ((data = zinput.Read()) != -1)
                        dBuffer.Add((byte)data);
                    //ComponentAce.Compression.Libs.zlib.ZStream a = new ComponentAce.Compression.Libs.zlib.ZStream();

                    File.WriteAllBytes((dumpDir + entry.FileName).Replace("/", "\\"), dBuffer.ToArray());
                }
                catch
                {
                    notcompressedsLog += entry.FileName.ToLower() + "\n";
                    //Console.SetCursorPosition(2, loggingOffset++);
                    ostream.Write("UNABLE TO DECOMPRESS FILE, WRITING DEFLATED FILE:");
                    //Console.SetCursorPosition(4, loggingOffset++);
                    ostream.Write("  " + entry.FileName);
                    File.WriteAllBytes((dumpDir + entry.FileName).Replace("/", "\\"), buffer.ToArray());
                }
            }
            //Console.SetCursorPosition(0, 0);

            ostream.WriteLine("Write hashes and nocompress file");
            File.WriteAllText(hashesFile, hashesLog);
            File.WriteAllText(notcompressedsFile, notcompressedsLog);
            ostream.WriteLine("DONE!" + " ".Repeat(30));
            //fStream.Close();
            return true;
            //Application.EnableVisualStyles();
            //Application.SetCompatibleTextRenderingDefault(false);
            //Application.Run(new Form1());
        }
示例#2
0
        /// <summary>
        /// Dumps the content of the first .raf/.raf.dat archive seen in the given directory.
        /// Outputs to the given ostream
        /// </summary>
        public static bool Dump(string directory, StreamWriter ostream)
        {
            #region output_usage_header
            ostream.WriteLine("Experimental RAF Dumper by ItzWarty @ ItzWarty.com April 28 2011 10:00pm pst");
            ostream.WriteLine("RAF dogcumentation @ bit.ly/mSyYrR ");
            ostream.WriteLine("USAGE: RAF_DUMP (Or just double click executable)");
            ostream.WriteLine("Precondition: RAF_DUMP is sitting next to a Riot Archive File.");
            ostream.WriteLine("Postcondition: 'dump' folder created.  RAF extracted into folder.");
            #endregion
            //string dumpDir = @"C:\Riot Games\League of Legends\RADS\projects\lol_game_client\filearchives\0.0.0.28\dump\";

            //We write the file containing "name hash" next to our program.
            string hashesFile = Environment.CurrentDirectory + "\\hashes.txt";
            string hashesLog  = "";

            //We write to this file saying what we don't compress
            string notcompressedsFile = Environment.CurrentDirectory + "\\nocompress.txt";
            string notcompressedsLog  = "";

            string   dumpDir    = Environment.CurrentDirectory + "\\dump\\";
            String[] filesInDir = Directory.GetFiles(Environment.CurrentDirectory);
            String   rafName    = "";
            foreach (String fileName in filesInDir)
            {
                if (fileName.Split("\\").Last().EndsWith(".raf", StringComparison.InvariantCultureIgnoreCase))
                {
                    rafName = fileName;
                }
            }
            if (rafName == "")
            {
                ostream.WriteLine("Couldn't find RAF file!!");
                //ostream.WriteLine("This executable must be in the same folder as a *.raf and *.raf.dat file!");
                //ostream.WriteLine("Exiting... Press a key (or two) to exit");
                //ostream.ReadKey();
                return(false);
            }
            ostream.WriteLine("Found RAF: " + rafName);
            RAFArchive raf     = new RAFArchive(rafName);
            FileStream fStream = raf.GetDataFileContentStream();
            //DeflateStream dfStream = new DeflateStream(fStream, CompressionMode.Decompress);

            //int loggingOffset = 10; //No longer applicable since we aren't logging to system.out console directly
            List <RAFFileListEntry> files = raf.GetDirectoryFile().GetFileList().GetFileEntries();
            foreach (RAFFileListEntry entry in files)
            {
                //ostream.SetCursorPosition(0, 7);
                ostream.WriteLine("Dumping: " + entry.FileName.Split("\\").Last() + " ".Repeat(40));
                //ostream.SetCursorPosition(0, 8);
                ostream.WriteLine("  Data File Offset: $" + entry.FileOffset.ToString("x") + "; Size:" + entry.FileSize + " ($" + entry.FileSize.ToString("x") + ")" + " ".Repeat(40));
                //Console.SetCursorPosition(0, 7);
                //Console.WriteLine("  Expected FileName Checksum: $" + entry.StringNameHash.ToString("x") + "; Calculated:" + Adler32(entry.GetFileName).ToString("x")/*entry.GetFileName.GetHashCode().ToString("x")*/ + " ".Repeat(40));
                //Console.WriteLine("  To: " + dumpDir + entry.GetFileName+";;");
                hashesLog += entry.FileName + "|||" + entry.StringNameHash + "\n";
                //zlib.ad
                byte[] buffer = new byte[entry.FileSize];
                fStream.Seek(entry.FileOffset, SeekOrigin.Begin);
                fStream.Read(buffer, 0, (int)entry.FileSize);

                PrepareDirectory((dumpDir + entry.FileName).Replace("/", "\\"));
                try
                {
                    MemoryStream      mStream = new MemoryStream(buffer);
                    zlib.ZInputStream zinput  = new zlib.ZInputStream(mStream);

                    List <byte> dBuffer = new List <byte>(); //decompressed buffer, arraylist to my knowledge...
                    int         data    = 0;
                    while ((data = zinput.Read()) != -1)
                    {
                        dBuffer.Add((byte)data);
                    }
                    //ComponentAce.Compression.Libs.zlib.ZStream a = new ComponentAce.Compression.Libs.zlib.ZStream();

                    File.WriteAllBytes((dumpDir + entry.FileName).Replace("/", "\\"), dBuffer.ToArray());
                }
                catch
                {
                    notcompressedsLog += entry.FileName.ToLower() + "\n";
                    //Console.SetCursorPosition(2, loggingOffset++);
                    ostream.Write("UNABLE TO DECOMPRESS FILE, WRITING DEFLATED FILE:");
                    //Console.SetCursorPosition(4, loggingOffset++);
                    ostream.Write("  " + entry.FileName);
                    File.WriteAllBytes((dumpDir + entry.FileName).Replace("/", "\\"), buffer.ToArray());
                }
            }
            //Console.SetCursorPosition(0, 0);

            ostream.WriteLine("Write hashes and nocompress file");
            File.WriteAllText(hashesFile, hashesLog);
            File.WriteAllText(notcompressedsFile, notcompressedsLog);
            ostream.WriteLine("DONE!" + " ".Repeat(30));
            //fStream.Close();
            return(true);
            //Application.EnableVisualStyles();
            //Application.SetCompatibleTextRenderingDefault(false);
            //Application.Run(new Form1());
        }