Exemple #1
0
        private void removeDuplicateTickets()
        {
            ObservableCollection <Title> newTitleList = new ObservableCollection <Title>();

            foreach (Title tik in ticketlist)
            {
                string titleid = tik.TitleID, consoleid = tik.ConsoleID;

                if (!ConvertingTools.ByteArrayToString(ConvertingTools.copyOfRange(tik.data, 0x00, 0x04)).Contains("00010004"))
                {
                    continue;
                }

                if (newTitleList.Count > 0)
                {
                    foreach (Title tik2 in newTitleList)
                    {
                        string titleid2 = tik2.TitleID, consoleid2 = tik2.ConsoleID;
                        if (titleid2.Equals(titleid) && consoleid2.Equals(consoleid))
                        {
                            tik2.data = tik.data;

                            goto outerloop;
                        }
                    }
                    newTitleList.Add(tik);
                }
                else
                {
                    newTitleList.Add(tik);
                }
                outerloop :;
            }
            ticketlist = newTitleList;
        }
        private byte[] createTicketData(string TitleID, string TitleKey)
        {
            byte[] ticket = TICKETTEMPLATE;

            ticket = ConvertingTools.connectByteArray(ConvertingTools.copyOfRange(ticket, 0, TK + 0x9C), ConvertingTools.HexStringToByteArray(TitleID), ConvertingTools.copyOfRange(ticket, TK + 0xA4, ticket.Length));
            ticket = ConvertingTools.connectByteArray(ConvertingTools.copyOfRange(ticket, 0, TK + 0x7F), ConvertingTools.HexStringToByteArray(TitleKey), ConvertingTools.copyOfRange(ticket, TK + 0x8F, ticket.Length));

            return(ticket);
        }
Exemple #3
0
        public void countTickets()
        {
            List <string> counter           = new List <string>();
            List <Title>  not_eshop_tickets = new List <Title>();
            List <Title>  eshop_tickets     = new List <Title>();
            int           systik            = 0;

            ticketCount.Add(ticketlist.Count);

            foreach (Title tik in ticketlist)
            {
                counter.Add(tik.TitleID);
            }

            ticketCount.Add(ConvertingTools.removeDuplicates(counter).Count);
            ticketCount.Add(counter.Count - ticketCount[1]);

            counter.Clear();

            foreach (Title tik in ticketlist)
            {
                if (tik.Type.Equals("System") || tik.Type.Equals("DSiSysApp") || tik.Type.Equals("DSiSysData"))
                {
                    systik++;
                }
            }

            ticketCount.Add(systik);

            foreach (Title tik in ticketlist)
            {
                if (tik.commonKeyIndex == 0)
                {
                    if (tik.ConsoleID.Equals("00000000"))
                    {
                        not_eshop_tickets.Add(tik);
                    }
                    else
                    {
                        eshop_tickets.Add(tik);
                        counter.Add(tik.TitleID);
                    }
                }
            }

            ticketCount.Add(eshop_tickets.Count);
            ticketCount.Add(ConvertingTools.removeDuplicates(counter).Count);
            ticketCount.Add(eshop_tickets.Count - ticketCount[5]);
            ticketCount.Add(not_eshop_tickets.Count);

            removeDuplicateTickets();
        }
Exemple #4
0
        public bool readTicketFile()
        {
            int        tmp = 0, commonKeyIndex = 0;
            List <int> ticketOffsets = new List <int>();

            while (tmp != -1)
            {
                tmp = ConvertingTools.IndexOf(fileData, TICKET_HEADER, tmp + 1);
                if (tmp != -1)
                {
                    ticketOffsets.Add(tmp);
                }
            }

            if (ticketOffsets.Count == 0)
            {
                return(false);
            }

            foreach (int offs in ticketOffsets)
            {
                commonKeyIndex = fileData[offs + 0xB1];

                if (fileData[offs + 0x7C] != 0x1)
                {
                    continue;
                }

                if (commonKeyIndex > 5)
                {
                    continue;
                }

                byte[] ticketData = ConvertingTools.copyOfRange(fileData, offs - 0x140, offs + 0x210);
                byte[] titleID = ConvertingTools.copyOfRange(ticketData, tk + 0x9C, tk + 0xA4);
                byte[] consoleID = ConvertingTools.copyOfRange(ticketData, tk + 0x98, tk + 0x9C);
                string titleid, consoleid;
                int    cki = fileData[offs + 0xB1];

                titleid   = ConvertingTools.ByteArrayToString(titleID);
                consoleid = ConvertingTools.ByteArrayToString(consoleID);

                ticketlist.Add(new Title(ticketData, titleid, consoleid, cki));
            }

            return(true);
        }
Exemple #5
0
        private byte[] PatchData(byte[] data, string type)
        {
            if (blank_id)
            {
                data = ConvertingTools.connectByteArray(ConvertingTools.copyOfRange(data, 0x00, TK + 0x98), ConvertingTools.HexStringToByteArray("00000000"), ConvertingTools.copyOfRange(data, TK + 0x9C, data.Length));
                data = ConvertingTools.connectByteArray(ConvertingTools.copyOfRange(data, 0x00, TK + 0xDC), ConvertingTools.HexStringToByteArray("00000000"), ConvertingTools.copyOfRange(data, TK + 0xE0, data.Length));
            }

            if (type.Equals("Demo") && patch_demo)
            {
                data = ConvertingTools.connectByteArray(ConvertingTools.copyOfRange(data, 0x00, TK + 0x124), ConvertingTools.HexStringToByteArray("00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"), ConvertingTools.copyOfRange(data, TK + 0x164, data.Length));
            }
            else if (type.Equals("DLC") && patch_dlc)
            {
                data = ConvertingTools.connectByteArray(ConvertingTools.copyOfRange(data, 0x00, TK + 0x164), ConvertingTools.HexStringToByteArray("00010014000000ac000000140001001400000000000000280000000100000084000000840003000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"), ConvertingTools.copyOfRange(data, TK + 0x210, data.Length));
            }

            return(data);
        }
        public void readEncTitleKeyFile()
        {
            long datalen = fileData.Length;

            byte[] titleid  = new byte[0x8];
            byte[] titlekey = new byte[0x16];

            for (long i = 16; i < datalen; i += TICKETLEN)
            {
                Title title = new Title();
                title.Name   = "";
                title.Region = "";
                title.Serial = "";

                Array.Copy(fileData, i + 8, titleid, 0, 8);
                Array.Copy(fileData, i + 16, titlekey, 0, 16);

                title.TitleID  = ConvertingTools.ByteArrayToString(titleid);
                title.TitleKey = ConvertingTools.ByteArrayToString(titlekey);
                title.data     = createTicketData(title.TitleID, title.TitleKey);

                titlelist.Add(title);
            }
        }