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); }
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(); }
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); }
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); } }