From 279357adf6ce3e75387759c4f028113b964f38c4 Mon Sep 17 00:00:00 2001 From: n2460 Date: Thu, 27 Oct 2011 11:53:02 +0000 Subject: [PATCH] =?UTF-8?q?FalsifyTwlBackup:BkpType=20Legacy=20=E3=81=AB?= =?UTF-8?q?=E5=AF=BE=E5=BF=9C=E3=80=82=20(=E3=81=93=E3=81=A3=E3=81=A1?= =?UTF-8?q?=E3=81=8CFalsifyTwlBackup=20=E3=81=A7=E3=80=81=20r38=20?= =?UTF-8?q?=E3=81=AF=20TWLBackupBlock)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_test_tools@39 6b0af911-cb57-b745-895f-eec5701120e1 --- .../Windows/FalsifyTwlBackup/Category2xx.cs | 18 ++++++++++----- .../Windows/FalsifyTwlBackup/Category4xx.cs | 12 +++++----- .../Windows/FalsifyTwlBackup/Category5xx.cs | 12 +++++----- .../Windows/FalsifyTwlBackup/Falsify.cs | 22 +++++++++++++++---- .../Windows/FalsifyTwlBackup/Properties.cs | 2 ++ TwlBkpCheck/Windows/FalsifyTwlBackup/main.cs | 9 ++++++++ 6 files changed, 54 insertions(+), 21 deletions(-) diff --git a/TwlBkpCheck/Windows/FalsifyTwlBackup/Category2xx.cs b/TwlBkpCheck/Windows/FalsifyTwlBackup/Category2xx.cs index 0109aca..f1bf715 100644 --- a/TwlBkpCheck/Windows/FalsifyTwlBackup/Category2xx.cs +++ b/TwlBkpCheck/Windows/FalsifyTwlBackup/Category2xx.cs @@ -88,22 +88,30 @@ partial class Program // public save の fileSize を変更 case 209: - header.fileSizes[(int)Utility.SectionIndex.PUBLIC_SAVE]++; + 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[(int)Utility.SectionIndex.SUB_BANNER]++; + header.fileSizes[prop.indexSubBanner]++; outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, NONE, NC_MAC_AND_HASHSET); OutputFalsifiedData(improperNo, prop.outFolderPath, outData); break; + // コンテンツ ID を変更 case 211: - for (int i = 0; i < header.contentId.Length; i++) + if (prop.bkpType != BkpType.LEGACY) { - header.contentId[i]++; + 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); @@ -123,7 +131,7 @@ partial class Program // public save の fileSize, TMD Reserved の publicSaveSize を変更 case 214: - header.fileSizes[(int)Utility.SectionIndex.PUBLIC_SAVE]++; + header.fileSizes[prop.indexPublicSave]++; header.tmdReserved.publicSaveSize++; outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, NONE, NC_MAC_AND_HASHSET); OutputFalsifiedData(improperNo, prop.outFolderPath, outData); diff --git a/TwlBkpCheck/Windows/FalsifyTwlBackup/Category4xx.cs b/TwlBkpCheck/Windows/FalsifyTwlBackup/Category4xx.cs index 610a40e..0e98923 100644 --- a/TwlBkpCheck/Windows/FalsifyTwlBackup/Category4xx.cs +++ b/TwlBkpCheck/Windows/FalsifyTwlBackup/Category4xx.cs @@ -72,28 +72,28 @@ partial class Program // public save の fileSize を大きくした上で、public save の前に不正なデータを入れる case 406: - header.fileSizes[(int)Utility.SectionIndex.PUBLIC_SAVE] += IMPROPER_DATA_SIZE; + 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[(int)Utility.SectionIndex.PUBLIC_SAVE] += IMPROPER_DATA_SIZE; + 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[(int)Utility.SectionIndex.SUB_BANNER] += IMPROPER_DATA_SIZE; + 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[(int)Utility.SectionIndex.SUB_BANNER] += IMPROPER_DATA_SIZE; + 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; @@ -112,7 +112,7 @@ partial class Program // public save の fileSize, TMD Reserved の publicSave を変更し、public save の前にデータを入れる case 412: - header.fileSizes[(int)Utility.SectionIndex.PUBLIC_SAVE] += IMPROPER_DATA_SIZE; + 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); @@ -120,7 +120,7 @@ partial class Program // public save の fileSize, TMD Reserved の publicSave を変更し、public save の後ろにデータを入れる case 413: - header.fileSizes[(int)Utility.SectionIndex.PUBLIC_SAVE] += IMPROPER_DATA_SIZE; + 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); diff --git a/TwlBkpCheck/Windows/FalsifyTwlBackup/Category5xx.cs b/TwlBkpCheck/Windows/FalsifyTwlBackup/Category5xx.cs index dafc6cf..8b839c2 100644 --- a/TwlBkpCheck/Windows/FalsifyTwlBackup/Category5xx.cs +++ b/TwlBkpCheck/Windows/FalsifyTwlBackup/Category5xx.cs @@ -77,7 +77,7 @@ partial class Program // public save の fileSize を大きくした上で、public save の前に不正なデータを入れる // public save ブロックの MAC を更新し、署名ブロック内ハッシュも更新する case 506: - header.fileSizes[(int)Utility.SectionIndex.PUBLIC_SAVE] += IMPROPER_DATA_SIZE; + header.fileSizes[prop.indexPublicSave] += IMPROPER_DATA_SIZE; outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, FRONT_PUBLIC_SAVE, CHG_MAC_AND_HASHSET); OutputFalsifiedData(improperNo, prop.outFolderPath, outData); break; @@ -85,7 +85,7 @@ partial class Program // public save の fileSize を大きくした上で、public save の後ろに不正なデータを入れる // public save ブロックの MAC を更新し、署名ブロック内ハッシュも更新する case 507: - header.fileSizes[(int)Utility.SectionIndex.PUBLIC_SAVE] += IMPROPER_DATA_SIZE; + header.fileSizes[prop.indexPublicSave] += IMPROPER_DATA_SIZE; outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, REAR_PUBLIC_SAVE, CHG_MAC_AND_HASHSET); OutputFalsifiedData(improperNo, prop.outFolderPath, outData); break; @@ -93,7 +93,7 @@ partial class Program // サブバナーの fileSize を大きくした上で、サブバナーの前に不正なデータを入れる // サブバナーブロックの MAC を更新し、署名ブロック内ハッシュも更新する case 508: - header.fileSizes[(int)Utility.SectionIndex.SUB_BANNER] += IMPROPER_DATA_SIZE; + header.fileSizes[prop.indexSubBanner] += IMPROPER_DATA_SIZE; outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, FRONT_SUB_BANNER, CHG_MAC_AND_HASHSET); OutputFalsifiedData(improperNo, prop.outFolderPath, outData); break; @@ -101,7 +101,7 @@ partial class Program // サブバナーの fileSize を大きくした上で、サブバナーの後ろに不正なデータを入れる // サブバナーブロックの MAC を更新し、署名ブロック内ハッシュも更新する case 509: - header.fileSizes[(int)Utility.SectionIndex.SUB_BANNER] += IMPROPER_DATA_SIZE; + header.fileSizes[prop.indexSubBanner] += IMPROPER_DATA_SIZE; outData = MergeEncryptBody(blocksForFalsifying, prop, improperData, REAR_SUB_BANNER, CHG_MAC_AND_HASHSET); OutputFalsifiedData(improperNo, prop.outFolderPath, outData); break; @@ -121,7 +121,7 @@ partial class Program // public save の fileSize, TMD Reserved の publicSave を変更し、public save の前にデータを入れる // public save ブロックの MAC を更新し、署名ブロック内ハッシュも更新する case 512: - header.fileSizes[(int)Utility.SectionIndex.PUBLIC_SAVE] += IMPROPER_DATA_SIZE; + header.fileSizes[prop.indexPublicSave] += 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); @@ -130,7 +130,7 @@ partial class Program // public save の fileSize, TMD Reserved の publicSave を変更し、public save の後ろにデータを入れる // public save ブロックの MAC を更新し、署名ブロック内ハッシュも更新する case 513: - header.fileSizes[(int)Utility.SectionIndex.PUBLIC_SAVE] += IMPROPER_DATA_SIZE; + header.fileSizes[prop.indexPublicSave] += 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); diff --git a/TwlBkpCheck/Windows/FalsifyTwlBackup/Falsify.cs b/TwlBkpCheck/Windows/FalsifyTwlBackup/Falsify.cs index 1ce4a65..834f47c 100644 --- a/TwlBkpCheck/Windows/FalsifyTwlBackup/Falsify.cs +++ b/TwlBkpCheck/Windows/FalsifyTwlBackup/Falsify.cs @@ -71,7 +71,7 @@ partial class Program /// 変更対象となる署名ブロックを有するBlocks /// 新しいハッシュ値 /// 変更するブロックセクション - static void ChangeHashSet(Blocks dataBlocks, byte[] hash, int section) + static void ChangeHashSet(Blocks dataBlocks, byte[] hash, int section, BkpType type) { Debug.Assert((section <= BLOCK_NUM - 1) && (section >= 0)); @@ -98,11 +98,25 @@ partial class Program break; case SECTION_PUBLIC_SAVE: - hash.CopyTo(signature.digest.section[(int)Utility.SectionIndex.PUBLIC_SAVE], 0); + if (type != BkpType.LEGACY) + { + hash.CopyTo(signature.digest.section[(int)Utility.SectionIndex.PUBLIC_SAVE], 0); + } + else + { + hash.CopyTo(signature.digest.section[(int)Utility.SectionIndexLegacy.PUBLIC_SAVE], 0); + } break; case SECTION_SUB_BANNER: - hash.CopyTo(signature.digest.section[(int)Utility.SectionIndex.SUB_BANNER], 0); + if (type != BkpType.LEGACY) + { + hash.CopyTo(signature.digest.section[(int)Utility.SectionIndex.SUB_BANNER], 0); + } + else + { + hash.CopyTo(signature.digest.section[(int)Utility.SectionIndexLegacy.SUB_BANNER], 0); + } break; case SECTION_PRIVATE_SAVE: @@ -227,7 +241,7 @@ partial class Program if (dataBlocks[i].body != null) { encryptedBlocks[i] = EncryptBlock(dataBlocks, i, prop, impData, insertPos, byteMac[i], byteHash[i]); // ブロックを暗号化&結合 - ChangeHashSet(dataBlocks, byteHash[i], i); // ハッシュセットを更新 + ChangeHashSet(dataBlocks, byteHash[i], i, prop.bkpType); // ハッシュセットを更新 } else { diff --git a/TwlBkpCheck/Windows/FalsifyTwlBackup/Properties.cs b/TwlBkpCheck/Windows/FalsifyTwlBackup/Properties.cs index fafb379..b5771df 100644 --- a/TwlBkpCheck/Windows/FalsifyTwlBackup/Properties.cs +++ b/TwlBkpCheck/Windows/FalsifyTwlBackup/Properties.cs @@ -14,6 +14,8 @@ namespace FalsifyTwlBackup public byte[] macKeyData; // MAC生成のための鍵データ public BkpType bkpType; // バックアップの形式。 + public int indexPublicSave; // パブリックセーブデータのインデックス + public int indexSubBanner; // サブバナーのインデックス public string outFolderPath; // 出力フォルダ名 diff --git a/TwlBkpCheck/Windows/FalsifyTwlBackup/main.cs b/TwlBkpCheck/Windows/FalsifyTwlBackup/main.cs index 7d6969c..e7e6961 100644 --- a/TwlBkpCheck/Windows/FalsifyTwlBackup/main.cs +++ b/TwlBkpCheck/Windows/FalsifyTwlBackup/main.cs @@ -229,6 +229,8 @@ partial class Program return; } else + + { // 拡張子の判定 CheckExtension(args[0], ".bin"); // 入力ファイル名 @@ -258,10 +260,17 @@ partial class Program int argTypeIndex = (isSpecifyMode) ? 6 : 4; prop.bkpType = BkpType.NORMAL; + prop.indexPublicSave = (int)Utility.SectionIndex.PUBLIC_SAVE; + prop.indexSubBanner = (int)Utility.SectionIndex.SUB_BANNER; if (args.Length >= argTypeIndex + 1 && args[argTypeIndex - 1].ToUpper().TrimStart('-') == "TYPE") { prop.bkpType = GetBackupType(args[argTypeIndex]); } + if (prop.bkpType == BkpType.LEGACY) + { + prop.indexPublicSave = (int)Utility.SectionIndexLegacy.PUBLIC_SAVE; + prop.indexSubBanner = (int)Utility.SectionIndexLegacy.SUB_BANNER; + } // バックアップデータの読み込み byte[] twlBackupData = File.ReadAllBytes(twlBackupName);