ctr_test_tools/TwlBkpCheck/Windows/FalsifyTwlBackup/Category4xx.cs
n2460 279357adf6 FalsifyTwlBackup:BkpType Legacy に対応。
(こっちがFalsifyTwlBackup で、 r38 は TWLBackupBlock)

git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_test_tools@39 6b0af911-cb57-b745-895f-eec5701120e1
2011-10-27 11:53:02 +00:00

148 lines
7.7 KiB
C#

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[prop.indexPublicSave] += 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[prop.indexPublicSave] += 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[prop.indexPublicSave] += 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[prop.indexSubBanner] += 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[prop.indexPublicSave] += 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[prop.indexPublicSave] += 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();
}
}
}
}