// one function is used for Xbox & Xbox 360 depending of the SkipSector parameter
        private void GetXBOXFST(string sPath)
        {
            byte[] buffer = ReadCDTracks(32 + m_SkipSector);

            m_FST.FST_Session.Add(new FST.cSession(1, System.IO.Path.GetFileName(sPath), 0, System.IO.Path.GetFileName(sPath)));
            m_FST.FST_Folder.Add(new FST.cFolder(1, 0, 1, "\\", 0x800));
            int Sector     = (int)MemoryReader.ReadLong(ref buffer, 0x14);
            int SectorSize = (int)MemoryReader.ReadLong(ref buffer, 0x18);

            buffer = ReadCDBuffer(Sector + m_SkipSector, (UInt64)(SectorSize * 2048));
            ParseXBOX(buffer, 0, 1, sPath, m_SkipSector);
        }
Exemple #2
0
        public bool IsNGCISO(string sPath)
        {
            byte[] buffer = m_FileReader.Read(0, 0x800);

            if (buffer.Length == 0x800)
            {
                if ((buffer[0] != 0) && (MemoryReader.ReadLong(ref buffer, 0x1C) == 0x3D9F33C2))
                {
                    this.ISOType = ISO_Type.NGC;
                    return(true);
                }
            }
            return(false);
        }
        private void ParseXBOX(byte[] buffer, uint Offset, uint ParentID, string sPath, int SkipSector)
        {
            if ((Offset > buffer.Length) || (buffer.Length == 0))
            {
                return;
            }

            // Date Stamp is unused on XBOX & XBOX 360
            byte[] dateStamp = { 0, 0, 0, 0, 0, 0, 0 };

            uint skip     = (uint)MemoryReader.ReadInt(ref buffer, Offset + 0);
            uint Forwards = (uint)MemoryReader.ReadInt(ref buffer, Offset + 2);

            if (skip > 0)
            {
                ParseXBOX(buffer, skip * 4, ParentID, sPath, SkipSector);
            }

            if ((buffer[Offset + 0x0C] == 0x10) || (buffer[Offset + 0x0C] == 0x90))
            {
                uint Sector     = MemoryReader.ReadLong(ref buffer, Offset + 0x04);
                long SectorSize = MemoryReader.ReadLong(ref buffer, Offset + 0x08) * 2048;

                if (Sector != 0)
                {
                    string folderName = Encoding.Default.GetString(buffer, (int)(Offset + 0x0E), buffer[Offset + 0x0D]);
                    m_FST.FST_Folder.Add(new FST.cFolder(1, ParentID, Sector, folderName, 0));
                    byte[] newFolder = ReadCDBuffer(Sector + m_SkipSector, (UInt64)SectorSize);
                    ParseXBOX(newFolder, 0, Sector, sPath, SkipSector);
                }
            }
            else
            {
                string fileName   = Encoding.Default.GetString(buffer, (int)(Offset + 0x0E), buffer[Offset + 0x0D]);
                UInt64 fileOffset = (UInt64)((MemoryReader.ReadLong(ref buffer, Offset + 0x04) + SkipSector) * 0x800);
                UInt64 fileSize   = MemoryReader.ReadLong(ref buffer, Offset + 0x08);
                m_FST.FST_File.Add(new FST.cFile(1, ParentID, ParentID, fileName, sPath, sPath, fileOffset, fileSize, dateStamp, true));
            }

            if (Forwards > 0)
            {
                ParseXBOX(buffer, Forwards * 4, ParentID, sPath, SkipSector);
            }
        }
Exemple #4
0
        public bool IsWII(string sPath)
        {
            byte[] buffer = m_FileReader.Read(0, 0x800);

            if (buffer.Length == 0x800)
            {
                if (((buffer[0] == 'R') || (buffer[0] == 'S')) && (MemoryReader.ReadLong(ref buffer, 0x18) == 0xA39E1C5D))
                {
                    if (System.IO.Directory.Exists("decryption_keys"))
                    {
                        if (System.IO.File.Exists("decryption_keys\\ckeys.bin"))
                        {
                            this.ISOType = ISO_Type.WII;
                            InitWII(sPath);
                            return(true);
                        }
                    }
                }
            }
            return(false);
        }
 public UInt32 Read_32bits(UInt64 Offset)
 {
     byte[] buffer = new byte[4];
     buffer = this.Read(Offset, 4);
     return(MemoryReader.ReadLong(ref buffer, 0));
 }
Exemple #6
0
        public bool IsWIIU(string sPath)
        {
            byte[] buffer = m_FileReader.Read(0, 0x800);

            if (buffer.Length == 0x800)
            {
                if (((buffer[0] == 'W') && (buffer[1] == 'U') && (buffer[2] == 'P')) && (MemoryReader.ReadLong(ref buffer, 0x18) == 0x00000000))
                {
                    if (System.IO.File.Exists("decrypted_keys\\ckeysu.bin"))
                    {
                        this.ISOType = ISO_Type.WIIU;
                        //InitWIIU(sPath);
                        return(true);
                    }
                }
            }
            return(false);
        }