using System; using System.Collections.Generic; using System.Linq; using System.Text; using TwlBackupBlock; namespace FalsifyTwlBackup { partial class Program { static void FalsifyingDataCategory4xx(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; //[4xx] 不正データ挿入+サイズ整合対応 //------------------------------------ //[テンプレート] //case (番号): // header.(変更箇所) += IMPROPER_DATA_SIZE; // outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, (不正データ挿入箇所), NC_MAC_AND_HASHSET); // OutputFalsifyingData(improperNo, prop.outFolderPath, outData); // break; switch (improperNo) { case 400: header.requiredSize += IMPROPER_DATA_SIZE; outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, FRONT_BANNER, NC_MAC_AND_HASHSET); OutputFalsifiedData(improperNo, prop.outFolderPath, outData); break; case 401: header.requiredSize += IMPROPER_DATA_SIZE; outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, REAR_DATA, NC_MAC_AND_HASHSET); OutputFalsifiedData(improperNo, prop.outFolderPath, outData); break; // TMD の fileSize を大きくした上で、コンテンツデータの前に不正なデータを入れる case 402: header.fileSizes[(int)Utility.SectionIndex.TMD] += IMPROPER_DATA_SIZE; outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, FRONT_TMD, NC_MAC_AND_HASHSET); OutputFalsifiedData(improperNo, prop.outFolderPath, outData); break; // TMD の fileSize を大きくした上で、コンテンツデータの後ろに不正なデータを入れる case 403: header.fileSizes[(int)Utility.SectionIndex.TMD] += IMPROPER_DATA_SIZE; outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, REAR_TMD, NC_MAC_AND_HASHSET); OutputFalsifiedData(improperNo, prop.outFolderPath, outData); break; // コンテンツ[0] の fileSize を大きくした上で、コンテンツデータの前に不正なデータを入れる case 404: header.fileSizes[(int)Utility.SectionIndex.CONTENT] += IMPROPER_DATA_SIZE; outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, FRONT_CONTENT, NC_MAC_AND_HASHSET); OutputFalsifiedData(improperNo, prop.outFolderPath, outData); break; // コンテンツ[0] の fileSize を大きくした上で、コンテンツデータの後ろに不正なデータを入れる case 405: header.fileSizes[(int)Utility.SectionIndex.CONTENT] += IMPROPER_DATA_SIZE; outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, REAR_CONTENT, NC_MAC_AND_HASHSET); OutputFalsifiedData(improperNo, prop.outFolderPath, outData); break; // public save の fileSize を大きくした上で、public save の前に不正なデータを入れる case 406: header.fileSizes[(int)Utility.SectionIndex.PUBLIC_SAVE] += IMPROPER_DATA_SIZE; outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, FRONT_PUBLIC_SAVE, NC_MAC_AND_HASHSET); OutputFalsifiedData(improperNo, prop.outFolderPath, outData); break; // public save の fileSize を大きくした上で、public save の後ろに不正なデータを入れる case 407: header.fileSizes[(int)Utility.SectionIndex.PUBLIC_SAVE] += IMPROPER_DATA_SIZE; outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, REAR_PUBLIC_SAVE, NC_MAC_AND_HASHSET); OutputFalsifiedData(improperNo, prop.outFolderPath, outData); break; // サブバナーの fileSize を大きくした上で、サブバナーの前に不正なデータを入れる case 408: header.fileSizes[(int)Utility.SectionIndex.SUB_BANNER] += IMPROPER_DATA_SIZE; outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, FRONT_SUB_BANNER, NC_MAC_AND_HASHSET); OutputFalsifiedData(improperNo, prop.outFolderPath, outData); break; // サブバナーの fileSize を大きくした上で、サブバナーの後ろに不正なデータを入れる case 409: header.fileSizes[(int)Utility.SectionIndex.SUB_BANNER] += IMPROPER_DATA_SIZE; outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, REAR_SUB_BANNER, NC_MAC_AND_HASHSET); OutputFalsifiedData(improperNo, prop.outFolderPath, outData); break; case 410: header.tmdReserved.publicSaveSize += IMPROPER_DATA_SIZE; outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, FRONT_PUBLIC_SAVE, NC_MAC_AND_HASHSET); OutputFalsifiedData(improperNo, prop.outFolderPath, outData); break; case 411: header.tmdReserved.publicSaveSize += IMPROPER_DATA_SIZE; outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, REAR_PUBLIC_SAVE, NC_MAC_AND_HASHSET); OutputFalsifiedData(improperNo, prop.outFolderPath, outData); break; // public save の fileSize, TMD Reserved の publicSave を変更し、public save の前にデータを入れる case 412: header.fileSizes[(int)Utility.SectionIndex.PUBLIC_SAVE] += IMPROPER_DATA_SIZE; header.tmdReserved.publicSaveSize += IMPROPER_DATA_SIZE; outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, FRONT_PUBLIC_SAVE, NC_MAC_AND_HASHSET); OutputFalsifiedData(improperNo, prop.outFolderPath, outData); break; // public save の fileSize, TMD Reserved の publicSave を変更し、public save の後ろにデータを入れる case 413: header.fileSizes[(int)Utility.SectionIndex.PUBLIC_SAVE] += IMPROPER_DATA_SIZE; header.tmdReserved.publicSaveSize += IMPROPER_DATA_SIZE; outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, REAR_PUBLIC_SAVE, NC_MAC_AND_HASHSET); OutputFalsifiedData(improperNo, prop.outFolderPath, outData); break; case 414: header.tmdReserved.privateSaveSize += IMPROPER_DATA_SIZE; outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, FRONT_PUBLIC_SAVE, NC_MAC_AND_HASHSET); OutputFalsifiedData(improperNo, prop.outFolderPath, outData); break; case 415: header.tmdReserved.privateSaveSize += IMPROPER_DATA_SIZE; outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, REAR_PUBLIC_SAVE, NC_MAC_AND_HASHSET); OutputFalsifiedData(improperNo, prop.outFolderPath, outData); break; // ありえない default: throw new InvalidOperationException(); } } } }