mirror of
https://github.com/rvtr/ctr_test_tools.git
synced 2025-10-31 13:41:24 -04:00
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_test_tools@30 6b0af911-cb57-b745-895f-eec5701120e1
158 lines
9.0 KiB
C#
158 lines
9.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using TwlBackupBlock;
|
|
|
|
namespace FalsifyTwlBackup
|
|
{
|
|
partial class Program
|
|
{
|
|
static void FalsifyingDataCategory5xx(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;
|
|
|
|
// [5xx] 不正データ挿入+サイズ整合対応 (MAC、ハッシュセット対応)
|
|
//--------------------------------------------------------------------
|
|
//[テンプレート]
|
|
//case (番号):
|
|
// header.(変更箇所) += IMPROPER_DATA_SIZE;
|
|
// outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, (不正データ挿入箇所), CHG_MAC_AND_HASHSET);
|
|
// OutputFalsifyingData(improperNo, prop.outFolderPath, outData);
|
|
// break;
|
|
switch (improperNo)
|
|
{
|
|
case 500:
|
|
header.requiredSize += IMPROPER_DATA_SIZE;
|
|
outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, FRONT_BANNER, CHG_MAC_AND_HASHSET);
|
|
OutputFalsifiedData(improperNo, prop.outFolderPath, outData);
|
|
break;
|
|
|
|
case 501:
|
|
header.requiredSize += IMPROPER_DATA_SIZE;
|
|
outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, REAR_DATA, CHG_MAC_AND_HASHSET);
|
|
OutputFalsifiedData(improperNo, prop.outFolderPath, outData);
|
|
break;
|
|
|
|
// TMD の fileSize を大きくした上で、コンテンツデータの前に不正なデータを入れる
|
|
// TMD ブロックの MAC を更新し、署名ブロック内ハッシュも更新する
|
|
case 502:
|
|
header.fileSizes[(int)Utility.SectionIndex.TMD] += IMPROPER_DATA_SIZE;
|
|
outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, FRONT_TMD, CHG_MAC_AND_HASHSET);
|
|
OutputFalsifiedData(improperNo, prop.outFolderPath, outData);
|
|
break;
|
|
|
|
// TMD の fileSize を大きくした上で、コンテンツデータの後ろに不正なデータを入れる
|
|
// TMD ブロックの MAC を更新し、署名ブロック内ハッシュも更新する
|
|
case 503:
|
|
header.fileSizes[(int)Utility.SectionIndex.TMD] += IMPROPER_DATA_SIZE;
|
|
outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, REAR_TMD, CHG_MAC_AND_HASHSET);
|
|
OutputFalsifiedData(improperNo, prop.outFolderPath, outData);
|
|
break;
|
|
|
|
// コンテンツ[0] の fileSize を大きくした上で、コンテンツデータの前に不正なデータを入れる
|
|
// コンテンツ[0] ブロックの MAC を更新し、署名ブロック内ハッシュも更新する
|
|
case 504:
|
|
header.fileSizes[(int)Utility.SectionIndex.CONTENT] += IMPROPER_DATA_SIZE;
|
|
outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, FRONT_CONTENT, CHG_MAC_AND_HASHSET);
|
|
OutputFalsifiedData(improperNo, prop.outFolderPath, outData);
|
|
break;
|
|
|
|
// コンテンツ[0] の fileSize を大きくした上で、コンテンツデータの後ろに不正なデータを入れる
|
|
// コンテンツ[0] ブロックの MAC を更新し、署名ブロック内ハッシュも更新する
|
|
case 505:
|
|
header.fileSizes[(int)Utility.SectionIndex.CONTENT] += IMPROPER_DATA_SIZE;
|
|
outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, REAR_CONTENT, CHG_MAC_AND_HASHSET);
|
|
OutputFalsifiedData(improperNo, prop.outFolderPath, outData);
|
|
break;
|
|
|
|
// public save の fileSize を大きくした上で、public save の前に不正なデータを入れる
|
|
// public save ブロックの MAC を更新し、署名ブロック内ハッシュも更新する
|
|
case 506:
|
|
header.fileSizes[(int)Utility.SectionIndex.PUBLIC_SAVE] += IMPROPER_DATA_SIZE;
|
|
outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, FRONT_PUBLIC_SAVE, CHG_MAC_AND_HASHSET);
|
|
OutputFalsifiedData(improperNo, prop.outFolderPath, outData);
|
|
break;
|
|
|
|
// public save の fileSize を大きくした上で、public save の後ろに不正なデータを入れる
|
|
// public save ブロックの MAC を更新し、署名ブロック内ハッシュも更新する
|
|
case 507:
|
|
header.fileSizes[(int)Utility.SectionIndex.PUBLIC_SAVE] += IMPROPER_DATA_SIZE;
|
|
outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, REAR_PUBLIC_SAVE, CHG_MAC_AND_HASHSET);
|
|
OutputFalsifiedData(improperNo, prop.outFolderPath, outData);
|
|
break;
|
|
|
|
// サブバナーの fileSize を大きくした上で、サブバナーの前に不正なデータを入れる
|
|
// サブバナーブロックの MAC を更新し、署名ブロック内ハッシュも更新する
|
|
case 508:
|
|
header.fileSizes[(int)Utility.SectionIndex.SUB_BANNER] += IMPROPER_DATA_SIZE;
|
|
outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, FRONT_SUB_BANNER, CHG_MAC_AND_HASHSET);
|
|
OutputFalsifiedData(improperNo, prop.outFolderPath, outData);
|
|
break;
|
|
|
|
// サブバナーの fileSize を大きくした上で、サブバナーの後ろに不正なデータを入れる
|
|
// サブバナーブロックの MAC を更新し、署名ブロック内ハッシュも更新する
|
|
case 509:
|
|
header.fileSizes[(int)Utility.SectionIndex.SUB_BANNER] += IMPROPER_DATA_SIZE;
|
|
outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, REAR_SUB_BANNER, CHG_MAC_AND_HASHSET);
|
|
OutputFalsifiedData(improperNo, prop.outFolderPath, outData);
|
|
break;
|
|
|
|
case 510:
|
|
header.tmdReserved.publicSaveSize += IMPROPER_DATA_SIZE;
|
|
outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, FRONT_PUBLIC_SAVE, CHG_MAC_AND_HASHSET);
|
|
OutputFalsifiedData(improperNo, prop.outFolderPath, outData);
|
|
break;
|
|
|
|
case 511:
|
|
header.tmdReserved.publicSaveSize += IMPROPER_DATA_SIZE;
|
|
outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, REAR_PUBLIC_SAVE, CHG_MAC_AND_HASHSET);
|
|
OutputFalsifiedData(improperNo, prop.outFolderPath, outData);
|
|
break;
|
|
|
|
// public save の fileSize, TMD Reserved の publicSave を変更し、public save の前にデータを入れる
|
|
// public save ブロックの MAC を更新し、署名ブロック内ハッシュも更新する
|
|
case 512:
|
|
header.fileSizes[(int)Utility.SectionIndex.PUBLIC_SAVE] += IMPROPER_DATA_SIZE;
|
|
header.tmdReserved.publicSaveSize += IMPROPER_DATA_SIZE;
|
|
outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, FRONT_PUBLIC_SAVE, CHG_MAC_AND_HASHSET);
|
|
OutputFalsifiedData(improperNo, prop.outFolderPath, outData);
|
|
break;
|
|
|
|
// public save の fileSize, TMD Reserved の publicSave を変更し、public save の後ろにデータを入れる
|
|
// public save ブロックの MAC を更新し、署名ブロック内ハッシュも更新する
|
|
case 513:
|
|
header.fileSizes[(int)Utility.SectionIndex.PUBLIC_SAVE] += IMPROPER_DATA_SIZE;
|
|
header.tmdReserved.publicSaveSize += IMPROPER_DATA_SIZE;
|
|
outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, REAR_PUBLIC_SAVE, CHG_MAC_AND_HASHSET);
|
|
OutputFalsifiedData(improperNo, prop.outFolderPath, outData);
|
|
break;
|
|
|
|
case 514:
|
|
header.tmdReserved.privateSaveSize += IMPROPER_DATA_SIZE;
|
|
outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, FRONT_PUBLIC_SAVE, CHG_MAC_AND_HASHSET);
|
|
OutputFalsifiedData(improperNo, prop.outFolderPath, outData);
|
|
break;
|
|
|
|
case 515:
|
|
header.tmdReserved.privateSaveSize += IMPROPER_DATA_SIZE;
|
|
outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, REAR_PUBLIC_SAVE, CHG_MAC_AND_HASHSET);
|
|
OutputFalsifiedData(improperNo, prop.outFolderPath, outData);
|
|
break;
|
|
|
|
// ありえない
|
|
default:
|
|
throw new InvalidOperationException();
|
|
}
|
|
}
|
|
}
|
|
}
|