using System; using System.Collections.Generic; using System.Linq; using System.Text; using TwlBackupBlock; namespace FalsifyTwlBackup { partial class Program { static void FalsifyingDataCategory2xx(int improperNo, Properties prop, byte[] improperData) { Blocks blocksForFalsifying = (Blocks)prop.decryptedBlocks.Clone(); HeaderBody header; header = (HeaderBody)blocksForFalsifying.header.body; SignatureBody signature; signature = (SignatureBody)blocksForFalsifying.signature.body; byte[] outData; //[2xx] ヘッダブロック改ざん //------------------------------------ //[テンプレート] //case (番号): // header.(変更箇所)++; // outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, NONE, NC_MAC_AND_HASHSET); // OutputFalsifyingData(improperNo, prop.outFolderPath, outData); // break; switch (improperNo) { case 200: header.signature++; outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, NONE, NC_MAC_AND_HASHSET); OutputFalsifiedData(improperNo, prop.outFolderPath, outData); break; case 201: header.companyCode++; outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, NONE, NC_MAC_AND_HASHSET); OutputFalsifiedData(improperNo, prop.outFolderPath, outData); break; case 202: header.version++; outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, NONE, NC_MAC_AND_HASHSET); OutputFalsifiedData(improperNo, prop.outFolderPath, outData); break; case 203: header.uniqueId[0]++; outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, NONE, NC_MAC_AND_HASHSET); OutputFalsifiedData(improperNo, prop.outFolderPath, outData); break; case 204: header.hardwareId[0]++; outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, NONE, NC_MAC_AND_HASHSET); OutputFalsifiedData(improperNo, prop.outFolderPath, outData); break; case 205: header.titleId++; outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, NONE, NC_MAC_AND_HASHSET); OutputFalsifiedData(improperNo, prop.outFolderPath, outData); break; case 206: header.requiredSize++; outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, NONE, NC_MAC_AND_HASHSET); OutputFalsifiedData(improperNo, prop.outFolderPath, outData); break; // TMD の fileSize を変更 case 207: header.fileSizes[(int)Utility.SectionIndex.TMD]++; outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, NONE, NC_MAC_AND_HASHSET); OutputFalsifiedData(improperNo, prop.outFolderPath, outData); break; // コンテンツ[0] の fileSize を変更 case 208: header.fileSizes[(int)Utility.SectionIndex.CONTENT]++; outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, NONE, NC_MAC_AND_HASHSET); OutputFalsifiedData(improperNo, prop.outFolderPath, outData); break; // public save の fileSize を変更 case 209: header.fileSizes[prop.indexPublicSave]++; outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, NONE, NC_MAC_AND_HASHSET); OutputFalsifiedData(improperNo, prop.outFolderPath, outData); break; // sub banner の fileSize を変更 case 210: header.fileSizes[prop.indexSubBanner]++; outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, NONE, NC_MAC_AND_HASHSET); OutputFalsifiedData(improperNo, prop.outFolderPath, outData); break; // コンテンツ ID を変更 case 211: if (prop.bkpType != BkpType.LEGACY) { for (int i = 0; i < header.contentId.Length; i++) { header.contentId[i]++; } } else { header.contentIdForLegacy++; } outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, NONE, NC_MAC_AND_HASHSET); OutputFalsifiedData(improperNo, prop.outFolderPath, outData); break; case 212: header.tmdReserved.publicSaveSize++; outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, NONE, NC_MAC_AND_HASHSET); OutputFalsifiedData(improperNo, prop.outFolderPath, outData); break; case 213: header.tmdReserved.privateSaveSize++; outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, NONE, NC_MAC_AND_HASHSET); OutputFalsifiedData(improperNo, prop.outFolderPath, outData); break; // public save の fileSize, TMD Reserved の publicSaveSize を変更 case 214: header.fileSizes[prop.indexPublicSave]++; header.tmdReserved.publicSaveSize++; outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, NONE, NC_MAC_AND_HASHSET); OutputFalsifiedData(improperNo, prop.outFolderPath, outData); break; // ありえない default: throw new InvalidOperationException(); } } } }