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);