マスタエディタ:バイト表示の単位間違い修正。ファイルサイズチェックをNANDアプリに対応。読み込み時の署名チェック機能を追加(ビルドスイッチでひとまずOFFにしておく)。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@2416 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
nishikawa_takeshi 2008-09-05 10:25:53 +00:00
parent d8c9687cf5
commit f4817b0a57
12 changed files with 287 additions and 193 deletions

View File

@ -362,12 +362,12 @@ private: System::Windows::Forms::Label^ labShared2Size3;
private: System::Windows::Forms::Label^ labShared2Size2;
private: System::Windows::Forms::Label^ labShared2Size1;
private: System::Windows::Forms::Label^ labShared2Size0;
private: System::Windows::Forms::Label^ labKB5;
private: System::Windows::Forms::Label^ labKB4;
private: System::Windows::Forms::Label^ labKB3;
private: System::Windows::Forms::Label^ labKB2;
private: System::Windows::Forms::Label^ labKB1;
private: System::Windows::Forms::Label^ labKB0;
private: System::Windows::Forms::TextBox^ tboxShared2Size5;
private: System::Windows::Forms::TextBox^ tboxShared2Size4;
private: System::Windows::Forms::TextBox^ tboxShared2Size3;
@ -383,7 +383,7 @@ private: System::Windows::Forms::Label^ labSDK;
private: System::Windows::Forms::GroupBox^ gboxTWLExInfo;
private: System::Windows::Forms::Label^ labByte2;
private: System::Windows::Forms::Label^ labByte1;
private: System::Windows::Forms::Label^ labHex4;
private: System::Windows::Forms::Label^ labHex3;
@ -469,9 +469,9 @@ private: System::Windows::Forms::TabPage^ tabCompanyInfo;
private: System::Windows::Forms::GroupBox^ gboxForeign;
private: System::Windows::Forms::GroupBox^ gboxExFlags;
private: System::Windows::Forms::Label^ labByte3;
private: System::Windows::Forms::Label^ labByte5;
private: System::Windows::Forms::Label^ labByte4;
private: System::Windows::Forms::GroupBox^ gboxEULA;
private: System::Windows::Forms::GroupBox^ gboxIcon;
private: System::Windows::Forms::GroupBox^ gboxParental;
@ -538,6 +538,10 @@ private: System::Windows::Forms::DataGridViewTextBoxColumn^ colErrorBegin;
private: System::Windows::Forms::DataGridViewTextBoxColumn^ colErrorEnd;
private: System::Windows::Forms::DataGridViewTextBoxColumn^ colErrorCause;
private: System::Windows::Forms::Label^ labAssemblyVersion;
private: System::Windows::Forms::Label^ labArbit4;
private: System::Windows::Forms::Label^ labArbit3;
private: System::Windows::Forms::Label^ labArbit2;
private: System::Windows::Forms::Label^ labArbit1;
@ -681,7 +685,7 @@ private: System::Windows::Forms::Label^ labAssemblyVersion;
/// </summary>
void InitializeComponent(void)
{
System::Windows::Forms::DataGridViewCellStyle^ dataGridViewCellStyle2 = (gcnew System::Windows::Forms::DataGridViewCellStyle());
System::Windows::Forms::DataGridViewCellStyle^ dataGridViewCellStyle1 = (gcnew System::Windows::Forms::DataGridViewCellStyle());
this->tboxFile = (gcnew System::Windows::Forms::TextBox());
this->gboxSrl = (gcnew System::Windows::Forms::GroupBox());
this->tboxRemasterVer = (gcnew System::Windows::Forms::TextBox());
@ -750,6 +754,8 @@ private: System::Windows::Forms::Label^ labAssemblyVersion;
this->numEULA = (gcnew System::Windows::Forms::NumericUpDown());
this->cboxIsInputPerson2 = (gcnew System::Windows::Forms::CheckBox());
this->gboxPerson2 = (gcnew System::Windows::Forms::GroupBox());
this->labArbit4 = (gcnew System::Windows::Forms::Label());
this->labArbit3 = (gcnew System::Windows::Forms::Label());
this->labNTSC2Sur = (gcnew System::Windows::Forms::Label());
this->tboxNTSC2 = (gcnew System::Windows::Forms::TextBox());
this->labFax2 = (gcnew System::Windows::Forms::Label());
@ -768,6 +774,8 @@ private: System::Windows::Forms::Label^ labAssemblyVersion;
this->labPerson2 = (gcnew System::Windows::Forms::Label());
this->labCompany2 = (gcnew System::Windows::Forms::Label());
this->gboxPerson1 = (gcnew System::Windows::Forms::GroupBox());
this->labArbit2 = (gcnew System::Windows::Forms::Label());
this->labArbit1 = (gcnew System::Windows::Forms::Label());
this->labNTSC1Sur = (gcnew System::Windows::Forms::Label());
this->labFax1 = (gcnew System::Windows::Forms::Label());
this->labNTSC1Pre = (gcnew System::Windows::Forms::Label());
@ -826,12 +834,6 @@ private: System::Windows::Forms::Label^ labAssemblyVersion;
this->labShared2Size2 = (gcnew System::Windows::Forms::Label());
this->labShared2Size1 = (gcnew System::Windows::Forms::Label());
this->labShared2Size0 = (gcnew System::Windows::Forms::Label());
this->labKB5 = (gcnew System::Windows::Forms::Label());
this->labKB4 = (gcnew System::Windows::Forms::Label());
this->labKB3 = (gcnew System::Windows::Forms::Label());
this->labKB2 = (gcnew System::Windows::Forms::Label());
this->labKB1 = (gcnew System::Windows::Forms::Label());
this->labKB0 = (gcnew System::Windows::Forms::Label());
this->tboxShared2Size5 = (gcnew System::Windows::Forms::TextBox());
this->tboxShared2Size4 = (gcnew System::Windows::Forms::TextBox());
this->tboxShared2Size3 = (gcnew System::Windows::Forms::TextBox());
@ -843,10 +845,6 @@ private: System::Windows::Forms::Label^ labAssemblyVersion;
this->tboxSDK = (gcnew System::Windows::Forms::TextBox());
this->labSDK = (gcnew System::Windows::Forms::Label());
this->gboxTWLExInfo = (gcnew System::Windows::Forms::GroupBox());
this->labByte5 = (gcnew System::Windows::Forms::Label());
this->labByte4 = (gcnew System::Windows::Forms::Label());
this->labByte3 = (gcnew System::Windows::Forms::Label());
this->labByte2 = (gcnew System::Windows::Forms::Label());
this->labByte1 = (gcnew System::Windows::Forms::Label());
this->labHex4 = (gcnew System::Windows::Forms::Label());
this->labHex3 = (gcnew System::Windows::Forms::Label());
@ -1611,6 +1609,8 @@ private: System::Windows::Forms::Label^ labAssemblyVersion;
//
// gboxPerson2
//
this->gboxPerson2->Controls->Add(this->labArbit4);
this->gboxPerson2->Controls->Add(this->labArbit3);
this->gboxPerson2->Controls->Add(this->labNTSC2Sur);
this->gboxPerson2->Controls->Add(this->tboxNTSC2);
this->gboxPerson2->Controls->Add(this->labFax2);
@ -1636,6 +1636,24 @@ private: System::Windows::Forms::Label^ labAssemblyVersion;
this->gboxPerson2->TabStop = false;
this->gboxPerson2->Text = L"担当者2";
//
// labArbit4
//
this->labArbit4->AutoSize = true;
this->labArbit4->Location = System::Drawing::Point(209, 207);
this->labArbit4->Name = L"labArbit4";
this->labArbit4->Size = System::Drawing::Size(37, 12);
this->labArbit4->TabIndex = 15;
this->labArbit4->Text = L"(任意)";
//
// labArbit3
//
this->labArbit3->AutoSize = true;
this->labArbit3->Location = System::Drawing::Point(210, 156);
this->labArbit3->Name = L"labArbit3";
this->labArbit3->Size = System::Drawing::Size(37, 12);
this->labArbit3->TabIndex = 13;
this->labArbit3->Text = L"(任意)";
//
// labNTSC2Sur
//
this->labNTSC2Sur->AutoSize = true;
@ -1650,7 +1668,7 @@ private: System::Windows::Forms::Label^ labAssemblyVersion;
this->tboxNTSC2->Location = System::Drawing::Point(66, 200);
this->tboxNTSC2->MaxLength = 50;
this->tboxNTSC2->Name = L"tboxNTSC2";
this->tboxNTSC2->Size = System::Drawing::Size(268, 19);
this->tboxNTSC2->Size = System::Drawing::Size(140, 19);
this->tboxNTSC2->TabIndex = 11;
//
// labFax2
@ -1783,6 +1801,8 @@ private: System::Windows::Forms::Label^ labAssemblyVersion;
//
// gboxPerson1
//
this->gboxPerson1->Controls->Add(this->labArbit2);
this->gboxPerson1->Controls->Add(this->labArbit1);
this->gboxPerson1->Controls->Add(this->labNTSC1Sur);
this->gboxPerson1->Controls->Add(this->labFax1);
this->gboxPerson1->Controls->Add(this->labNTSC1Pre);
@ -1807,6 +1827,24 @@ private: System::Windows::Forms::Label^ labAssemblyVersion;
this->gboxPerson1->TabStop = false;
this->gboxPerson1->Text = L"担当者1";
//
// labArbit2
//
this->labArbit2->AutoSize = true;
this->labArbit2->Location = System::Drawing::Point(201, 207);
this->labArbit2->Name = L"labArbit2";
this->labArbit2->Size = System::Drawing::Size(37, 12);
this->labArbit2->TabIndex = 12;
this->labArbit2->Text = L"(任意)";
//
// labArbit1
//
this->labArbit1->AutoSize = true;
this->labArbit1->Location = System::Drawing::Point(201, 156);
this->labArbit1->Name = L"labArbit1";
this->labArbit1->Size = System::Drawing::Size(37, 12);
this->labArbit1->TabIndex = 11;
this->labArbit1->Text = L"(任意)";
//
// labNTSC1Sur
//
this->labNTSC1Sur->AutoSize = true;
@ -1839,7 +1877,7 @@ private: System::Windows::Forms::Label^ labAssemblyVersion;
this->tboxNTSC1->Location = System::Drawing::Point(66, 200);
this->tboxNTSC1->MaxLength = 50;
this->tboxNTSC1->Name = L"tboxNTSC1";
this->tboxNTSC1->Size = System::Drawing::Size(261, 19);
this->tboxNTSC1->Size = System::Drawing::Size(131, 19);
this->tboxNTSC1->TabIndex = 8;
//
// tboxFax1
@ -2282,12 +2320,6 @@ private: System::Windows::Forms::Label^ labAssemblyVersion;
this->gboxShared2Size->Controls->Add(this->labShared2Size2);
this->gboxShared2Size->Controls->Add(this->labShared2Size1);
this->gboxShared2Size->Controls->Add(this->labShared2Size0);
this->gboxShared2Size->Controls->Add(this->labKB5);
this->gboxShared2Size->Controls->Add(this->labKB4);
this->gboxShared2Size->Controls->Add(this->labKB3);
this->gboxShared2Size->Controls->Add(this->labKB2);
this->gboxShared2Size->Controls->Add(this->labKB1);
this->gboxShared2Size->Controls->Add(this->labKB0);
this->gboxShared2Size->Controls->Add(this->tboxShared2Size5);
this->gboxShared2Size->Controls->Add(this->tboxShared2Size4);
this->gboxShared2Size->Controls->Add(this->tboxShared2Size3);
@ -2297,7 +2329,7 @@ private: System::Windows::Forms::Label^ labAssemblyVersion;
this->gboxShared2Size->Controls->Add(this->cboxIsShared2);
this->gboxShared2Size->Location = System::Drawing::Point(547, 54);
this->gboxShared2Size->Name = L"gboxShared2Size";
this->gboxShared2Size->Size = System::Drawing::Size(175, 220);
this->gboxShared2Size->Size = System::Drawing::Size(164, 220);
this->gboxShared2Size->TabIndex = 1;
this->gboxShared2Size->TabStop = false;
this->gboxShared2Size->Text = L"Shared2ファイルサイズ";
@ -2356,60 +2388,6 @@ private: System::Windows::Forms::Label^ labAssemblyVersion;
this->labShared2Size0->TabIndex = 15;
this->labShared2Size0->Text = L"File 0";
//
// labKB5
//
this->labKB5->AutoSize = true;
this->labKB5->Location = System::Drawing::Point(142, 180);
this->labKB5->Name = L"labKB5";
this->labKB5->Size = System::Drawing::Size(20, 12);
this->labKB5->TabIndex = 14;
this->labKB5->Text = L"KB";
//
// labKB4
//
this->labKB4->AutoSize = true;
this->labKB4->Location = System::Drawing::Point(142, 155);
this->labKB4->Name = L"labKB4";
this->labKB4->Size = System::Drawing::Size(20, 12);
this->labKB4->TabIndex = 13;
this->labKB4->Text = L"KB";
//
// labKB3
//
this->labKB3->AutoSize = true;
this->labKB3->Location = System::Drawing::Point(142, 130);
this->labKB3->Name = L"labKB3";
this->labKB3->Size = System::Drawing::Size(20, 12);
this->labKB3->TabIndex = 12;
this->labKB3->Text = L"KB";
//
// labKB2
//
this->labKB2->AutoSize = true;
this->labKB2->Location = System::Drawing::Point(142, 105);
this->labKB2->Name = L"labKB2";
this->labKB2->Size = System::Drawing::Size(20, 12);
this->labKB2->TabIndex = 11;
this->labKB2->Text = L"KB";
//
// labKB1
//
this->labKB1->AutoSize = true;
this->labKB1->Location = System::Drawing::Point(142, 80);
this->labKB1->Name = L"labKB1";
this->labKB1->Size = System::Drawing::Size(20, 12);
this->labKB1->TabIndex = 10;
this->labKB1->Text = L"KB";
//
// labKB0
//
this->labKB0->AutoSize = true;
this->labKB0->Location = System::Drawing::Point(142, 55);
this->labKB0->Name = L"labKB0";
this->labKB0->Size = System::Drawing::Size(20, 12);
this->labKB0->TabIndex = 9;
this->labKB0->Text = L"KB";
//
// tboxShared2Size5
//
this->tboxShared2Size5->Location = System::Drawing::Point(46, 177);
@ -2505,10 +2483,6 @@ private: System::Windows::Forms::Label^ labAssemblyVersion;
//
// gboxTWLExInfo
//
this->gboxTWLExInfo->Controls->Add(this->labByte5);
this->gboxTWLExInfo->Controls->Add(this->labByte4);
this->gboxTWLExInfo->Controls->Add(this->labByte3);
this->gboxTWLExInfo->Controls->Add(this->labByte2);
this->gboxTWLExInfo->Controls->Add(this->labByte1);
this->gboxTWLExInfo->Controls->Add(this->labHex4);
this->gboxTWLExInfo->Controls->Add(this->labHex3);
@ -2529,42 +2503,6 @@ private: System::Windows::Forms::Label^ labAssemblyVersion;
this->gboxTWLExInfo->TabStop = false;
this->gboxTWLExInfo->Text = L"TWL拡張情報";
//
// labByte5
//
this->labByte5->AutoSize = true;
this->labByte5->Location = System::Drawing::Point(261, 121);
this->labByte5->Name = L"labByte5";
this->labByte5->Size = System::Drawing::Size(29, 12);
this->labByte5->TabIndex = 34;
this->labByte5->Text = L"Byte";
//
// labByte4
//
this->labByte4->AutoSize = true;
this->labByte4->Location = System::Drawing::Point(261, 96);
this->labByte4->Name = L"labByte4";
this->labByte4->Size = System::Drawing::Size(29, 12);
this->labByte4->TabIndex = 33;
this->labByte4->Text = L"Byte";
//
// labByte3
//
this->labByte3->AutoSize = true;
this->labByte3->Location = System::Drawing::Point(261, 71);
this->labByte3->Name = L"labByte3";
this->labByte3->Size = System::Drawing::Size(29, 12);
this->labByte3->TabIndex = 32;
this->labByte3->Text = L"Byte";
//
// labByte2
//
this->labByte2->AutoSize = true;
this->labByte2->Location = System::Drawing::Point(585, 54);
this->labByte2->Name = L"labByte2";
this->labByte2->Size = System::Drawing::Size(29, 12);
this->labByte2->TabIndex = 31;
this->labByte2->Text = L"Byte";
//
// labByte1
//
this->labByte1->AutoSize = true;
@ -2599,6 +2537,7 @@ private: System::Windows::Forms::Label^ labAssemblyVersion;
this->tboxIsCodec->ReadOnly = true;
this->tboxIsCodec->Size = System::Drawing::Size(87, 19);
this->tboxIsCodec->TabIndex = 28;
this->tboxIsCodec->TextAlign = System::Windows::Forms::HorizontalAlignment::Right;
//
// labIsCodec
//
@ -2779,7 +2718,7 @@ private: System::Windows::Forms::Label^ labAssemblyVersion;
//
this->cboxIsNAND->AutoSize = true;
this->cboxIsNAND->Enabled = false;
this->cboxIsNAND->Location = System::Drawing::Point(8, 48);
this->cboxIsNAND->Location = System::Drawing::Point(9, 47);
this->cboxIsNAND->Name = L"cboxIsNAND";
this->cboxIsNAND->Size = System::Drawing::Size(121, 16);
this->cboxIsNAND->TabIndex = 1;
@ -3416,8 +3355,8 @@ private: System::Windows::Forms::Label^ labAssemblyVersion;
//
// gridError
//
dataGridViewCellStyle2->BackColor = System::Drawing::Color::White;
this->gridError->AlternatingRowsDefaultCellStyle = dataGridViewCellStyle2;
dataGridViewCellStyle1->BackColor = System::Drawing::Color::White;
this->gridError->AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1;
this->gridError->BackgroundColor = System::Drawing::SystemColors::Control;
this->gridError->ColumnHeadersHeightSizeMode = System::Windows::Forms::DataGridViewColumnHeadersHeightSizeMode::AutoSize;
this->gridError->Columns->AddRange(gcnew cli::array< System::Windows::Forms::DataGridViewColumn^ >(4) {this->colErrorName,
@ -3685,9 +3624,14 @@ private: System::Windows::Forms::Label^ labAssemblyVersion;
{
case ECSrlResult::ERROR_PLATFORM:
this->errMsg( "本ツールはTWL対応ROM専用です。NTR専用ROMなどのTWL非対応ROMを読み込むことはできません。",
"This tool can only read TWL ROM. This can't read Other data e.g. NTR limited ROM." );
"This tool can only read TWL ROM. This can't read an other data e.g. NTR limited ROM." );
break;
case ECSrlResult::ERROR_SIGN_DECRYPT:
case ECSrlResult::ERROR_SIGN_VERIFY:
this->errMsg( "本ツールはTWL対応ROM専用です。不正なデータを読み込むことはできません。",
"This tool can only read TWL ROM. This can't read an illegal data." );
default:
this->errMsg( "ROMデータファイルの読み込みに失敗しました。", "Reading the ROM data file failed." );
break;
@ -3845,8 +3789,8 @@ private: System::Windows::Forms::Label^ labAssemblyVersion;
this->tboxTitleIDHi->Text = this->hSrl->hTitleIDHi->ToString("X8");
this->tboxNormalRomOffset->Text = this->hSrl->hNormalRomOffset->ToString("X8");
this->tboxKeyTableRomOffset->Text = this->hSrl->hKeyTableRomOffset->ToString("X8");
this->tboxPublicSize->Text = this->hSrl->hPublicSize->ToString();
this->tboxPrivateSize->Text = this->hSrl->hPrivateSize->ToString();
this->tboxPublicSize->Text = MasterEditorTWL::transSizeToString( this->hSrl->hPublicSize );
this->tboxPrivateSize->Text = MasterEditorTWL::transSizeToString( this->hSrl->hPrivateSize );
this->cboxIsNormalJump->Checked = *(this->hSrl->hIsNormalJump);
this->cboxIsTmpJump->Checked = *(this->hSrl->hIsTmpJump);
this->cboxIsSubBanner->Checked = *(this->hSrl->hIsSubBanner);
@ -3878,12 +3822,12 @@ private: System::Windows::Forms::Label^ labAssemblyVersion;
this->tboxIsGameCardOn->Text = gcnew System::String( "OFF" );
}
this->cboxIsShared2->Checked = *(this->hSrl->hIsShared2);
this->tboxShared2Size0->Text = this->hSrl->hShared2SizeArray[0]->ToString();
this->tboxShared2Size1->Text = this->hSrl->hShared2SizeArray[1]->ToString();
this->tboxShared2Size2->Text = this->hSrl->hShared2SizeArray[2]->ToString();
this->tboxShared2Size3->Text = this->hSrl->hShared2SizeArray[3]->ToString();
this->tboxShared2Size4->Text = this->hSrl->hShared2SizeArray[4]->ToString();
this->tboxShared2Size5->Text = this->hSrl->hShared2SizeArray[5]->ToString();
this->tboxShared2Size0->Text = MasterEditorTWL::transSizeToString( this->hSrl->hShared2SizeArray[0] );
this->tboxShared2Size1->Text = MasterEditorTWL::transSizeToString( this->hSrl->hShared2SizeArray[1] );
this->tboxShared2Size2->Text = MasterEditorTWL::transSizeToString( this->hSrl->hShared2SizeArray[2] );
this->tboxShared2Size3->Text = MasterEditorTWL::transSizeToString( this->hSrl->hShared2SizeArray[3] );
this->tboxShared2Size4->Text = MasterEditorTWL::transSizeToString( this->hSrl->hShared2SizeArray[4] );
this->tboxShared2Size5->Text = MasterEditorTWL::transSizeToString( this->hSrl->hShared2SizeArray[5] );
// アプリ種別
System::String ^app = gcnew System::String("");
@ -3968,6 +3912,7 @@ private: System::Windows::Forms::Label^ labAssemblyVersion;
this->tboxSDK->Text += ver->Version + "\r\n";
}
}
this->gridLibrary->Rows->Clear();
if( this->hSrl->hLicenseList != nullptr )
{
for each( RCLicense ^lic in this->hSrl->hLicenseList )
@ -3978,7 +3923,7 @@ private: System::Windows::Forms::Label^ labAssemblyVersion;
// ペアレンタルコントロール関連
this->setParentalForms();
}
} //setSrlForms()
// SRLの特殊な設定をフォームにセットする(言語切り替えで表示を変えたいので独立させる)
void setSrlFormsCaptionEx()
@ -4153,7 +4098,7 @@ private: System::Windows::Forms::Label^ labAssemblyVersion;
this->hSrl->hArrayParentalRating[OS_TWL_PCTL_OGN_OFLC] = gcnew System::Byte( rating );
this->hSrl->hArrayParentalEffect[OS_TWL_PCTL_OGN_OFLC] = gcnew System::Boolean( this->cboxOFLC->Checked );
this->hSrl->hArrayParentalAlways[OS_TWL_PCTL_OGN_OFLC] = gcnew System::Boolean( this->cboxAlwaysOFLC->Checked );
}
} //setParentalSrlProperties()
// SRL内のペアレンタルコントロール情報を抜き出してフォームに反映させる
void setParentalForms(void)
@ -4310,7 +4255,7 @@ private: System::Windows::Forms::Label^ labAssemblyVersion;
this->combOFLC->SelectedIndex = index;
this->cboxOFLC->Checked = *(hSrl->hArrayParentalEffect[ OS_TWL_PCTL_OGN_OFLC ]);
this->cboxAlwaysOFLC->Checked = *(hSrl->hArrayParentalAlways[ OS_TWL_PCTL_OGN_OFLC ]);
}
} //setParentalForms()
// リージョン情報からペアレンタルコントロールの編集可能団体をマスクする
void maskParentalForms(void)
@ -4383,7 +4328,7 @@ private: System::Windows::Forms::Label^ labAssemblyVersion;
default:
break;
}
}
} //maskParentalForms()
// ----------------------------------------------
// SRL関連のフォームのチェック
@ -4945,11 +4890,22 @@ private: System::Windows::Forms::Label^ labAssemblyVersion;
this->labCompany2->Text = gcnew System::String( LANG_COMPANY_J );
this->labDepart2->Text = gcnew System::String( LANG_DEPART_J );
this->labPerson2->Text = gcnew System::String( LANG_PERSON_J );
this->labArbit1->Text = gcnew System::String( "(任意)" );
this->labArbit2->Text = gcnew System::String( "(任意)" );
this->labArbit3->Text = gcnew System::String( "(任意)" );
this->labArbit4->Text = gcnew System::String( "(任意)" );
// ふりがな情報を有効にする
this->tboxFurigana1->Enabled = true;
this->labFurigana1->Text = gcnew System::String( LANG_FURIGANA_J );
this->tboxFurigana2->Enabled = true;
this->labFurigana2->Text = gcnew System::String( LANG_FURIGANA_J );
// NTSC-UserIDも日本語版のみ
this->tboxNTSC1->Enabled = true;
this->tboxNTSC2->Enabled = true;
this->labNTSC1Pre->Text = gcnew System::String( LANG_NTSC_1_J );
this->labNTSC1Sur->Text = gcnew System::String( LANG_NTSC_2_J );
this->labNTSC2Pre->Text = gcnew System::String( LANG_NTSC_1_J );
this->labNTSC2Sur->Text = gcnew System::String( LANG_NTSC_2_J );
// TWL仕様
this->gboxTWLExInfo->Text = gcnew System::String( "TWL拡張情報" );
@ -5148,13 +5104,25 @@ private: System::Windows::Forms::Label^ labAssemblyVersion;
this->labCompany2->Text = gcnew System::String( LANG_COMPANY_E );
this->labDepart2->Text = gcnew System::String( LANG_DEPART_E );
this->labPerson2->Text = gcnew System::String( LANG_PERSON_E );
this->labArbit1->Text = gcnew System::String( "(Arbitrary)" );
this->labArbit2->Text = gcnew System::String( "(Arbitrary)" );
this->labArbit3->Text = gcnew System::String( "(Arbitrary)" );
this->labArbit4->Text = gcnew System::String( "(Arbitrary)" );
// ふりがな情報を削除
this->tboxFurigana1->Clear();
this->tboxFurigana1->Enabled = false;
this->labFurigana1->Text = gcnew System::String("");
this->labFurigana1->Text = gcnew System::String( LANG_FURIGANA_E );
this->tboxFurigana2->Clear();
this->tboxFurigana2->Enabled = false;
this->labFurigana2->Text = gcnew System::String("");
this->labFurigana2->Text = gcnew System::String( LANG_FURIGANA_E );
this->tboxNTSC1->Enabled = false;
this->tboxNTSC1->Text = gcnew System::String("");
this->tboxNTSC2->Enabled = false;
this->tboxNTSC2->Text = gcnew System::String("");
this->labNTSC1Pre->Text = gcnew System::String( LANG_NTSC_1_E );
this->labNTSC1Sur->Text = gcnew System::String( LANG_NTSC_2_E );
this->labNTSC2Pre->Text = gcnew System::String( LANG_NTSC_1_E );
this->labNTSC2Sur->Text = gcnew System::String( LANG_NTSC_2_E );
// TWL仕様
this->gboxTWLExInfo->Text = gcnew System::String( "TWL Extended Info" );

View File

@ -126,24 +126,6 @@
<metadata name="colLibName.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colLibPublisher.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colLibName.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colWarnName.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colWarnBegin.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colWarnEnd.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colWarnCause.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="colWarnName.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>

View File

@ -14,6 +14,9 @@
#define METWL_ERRLIST_NORANGE 0 // エラーのアドレス範囲を指定しないことを表す特別な値
#define METWL_ROMSIZE_MIN 256 // 最小のデバイス容量 256Mbit
#define METWL_ROMSIZE_MAX 4096 // 最大の.. 4Gbit
#define METWL_ROMSIZE_MIN_NAND 1
#define METWL_ROMSIZE_MAX_NAND 256
#define METWL_ALLSIZE_MAX_NAND (32*1024*1024) // Public/Privateセーブデータのサイズを含めたNANDアプリの容量制限(単位Byte)
#define METWL_MASK_REGION_JAPAN 0x00000001
#define METWL_MASK_REGION_AMERICA 0x00000002
#define METWL_MASK_REGION_EUROPE 0x00000004

View File

@ -75,12 +75,12 @@
#define LANG_COMPANY_E ("Company")
#define LANG_DEPART_E ("Dept.")
#define LANG_PERSON_E ("Name")
//#define LANG_FURIGANA_E ("ふりがな")
#define LANG_FURIGANA_E ("")
#define LANG_TEL_E ("Tel")
#define LANG_FAX_E ("Fax")
#define LANG_MAIL_E ("e-mail")
//#define LANG_NTSC_1_E ("NTSC")
//#define LANG_NTSC_2_E ("User ID")
#define LANG_NTSC_1_E ("")
#define LANG_NTSC_2_E ("")
#define LANG_EULA_E ("Agree EULA")
#define LANG_EULA_VER_E ("EULA agreement ver.")

View File

@ -55,9 +55,20 @@ ECSrlResult RCSrl::readFromFile( System::String ^filename )
{
return (ECSrlResult::ERROR_FILE_READ);
}
// ファイルを閉じる前にROMヘッダ以外の領域から設定を取り出す
{
ECSrlResult r;
#ifdef METWL_WHETHER_SIGN_DECRYPT
// 署名チェック
r = this->decryptRomHeader();
if( r != ECSrlResult::NOERROR )
{
(void)fclose(fp);
return r;
}
#endif //#ifdef METWL_WHETHER_SIGN_DECRYPT
// ファイルを閉じる前にROMヘッダ以外の領域から設定を取り出す
(void)this->hasDSDLPlaySign( fp );
r = this->searchSDKVersion( fp );
if( r != ECSrlResult::NOERROR )
@ -453,6 +464,45 @@ ECSrlResult RCSrl::signRomHeader(void)
return (ECSrlResult::NOERROR);
} // ECSrlResult RCSrl::signRomHeader(void)
//
// ROMヘッダの署名を外す
//
ECSrlResult RCSrl::decryptRomHeader(void)
{
u8 original[ RSA_KEY_LENGTH ]; // 署名外した後のデータ格納先
s32 pos = 0; // ブロックの先頭アドレス
u8 digest[ DIGEST_SIZE_SHA1 ]; // ROMヘッダのダイジェスト
ROM_Header rh;
// <データの流れ>
// (1) 公開鍵で復号した結果(ブロック)をローカル変数(original)に格納
// (2) ブロックから余分な部分を取り除いて引数(pDst)にコピー
// 署名の解除 = 公開鍵で復号
if( !ACSign_Decrypto( original, g_devPubKey_DER, this->pRomHeader->signature, RSA_KEY_LENGTH ) )
{
return ECSrlResult::ERROR_SIGN_DECRYPT;
}
// 署名前データを復号後ブロックからゲット
for( pos=0; pos < (RSA_KEY_LENGTH-2); pos++ ) // 本来ブロックの先頭は0x00だが復号化の内部処理によって消える仕様
{
// 暗号ブロック形式 = 0x00, BlockType, Padding, 0x00, 実データ
if( original[pos] == 0x00 ) // 実データの直前の0x00をサーチ
{
break;
}
}
// ベリファイ
// ROMヘッダのダイジェストを算出(先頭から証明書領域の直前までが対象)
ACSign_DigestUnit( digest, this->pRomHeader, (u32)&(rh.certificate) - (u32)&(rh) );
// this->pRomHeader はマネージヒープ上にあるので実アドレスを取得できない
if( memcmp( &(original[pos+1]), digest, DIGEST_SIZE_SHA1 ) != 0 )
{
return ECSrlResult::ERROR_SIGN_VERIFY;
}
return (ECSrlResult::NOERROR);
}
//
// DSダウンロード署名がSRLに格納されているか調べる
//
@ -611,9 +661,8 @@ ECSrlResult RCSrl::searchLicenses(FILE *fp)
//System::Diagnostics::Debug::WriteLine( "license " + spl[0] + " " + spl[1] );
}
}
return ECSrlResult::NOERROR;
}
} //RCSrl::searchLicenses
//
// MRC
@ -706,33 +755,14 @@ ECSrlResult RCSrl::mrcNTR( FILE *fp )
}
// 値チェック
if( this->pRomHeader->s.rom_type != 0x00 )
{
this->hErrorList->Add( gcnew RCMrcError(
"デバイスタイプ", 0x13, 0x13, "不正な値です。00hを設定してください。",
"Device Type", "Invalid data. Please set 00h.", false, true ) );
}
fseek( fp, 0, SEEK_END );
u32 filesize = ftell(fp); // 実ファイルサイズ(単位Mbit)
u32 romsize = 1 << (this->pRomHeader->s.rom_size); // ROM容量
if( (romsize*1024*1024/8) < filesize )
{
this->hErrorList->Add( gcnew RCMrcError(
"デバイス容量", 0x14, 0x14, "実ファイルサイズよりも小さい値が指定されています。",
"Device Capacity", "Setting data is less than the actual file size.", false, true ) );
}
else if( filesize < (romsize*1024*1024/8) )
{
this->hWarnList->Add( gcnew RCMrcError( // 警告
"デバイス容量", 0x14, 0x14, "実ファイルサイズに比べて無駄のある値が設定されています。",
"Device Capacity", "Setting data is larger than the actual file size.", false, true ) );
}
if( (filesize % 2) != 0 )
{
this->hErrorList->Add( gcnew RCMrcError(
"実ファイルサイズ", METWL_ERRLIST_NORANGE, METWL_ERRLIST_NORANGE, "中途半端な値です。通常では2のべき乗の値です。",
"Actual File Size", "Invalid size. This size is usually power of 2.", false, true ) );
}
u8 romver = this->pRomHeader->s.rom_version;
if( ((romver < 0x00) || (0x09 < romver)) && (romver != 0xE0) )
{
@ -866,13 +896,56 @@ ECSrlResult RCSrl::mrcTWL( FILE *fp )
#endif
// 値チェック
fseek( fp, 0, SEEK_END );
u32 filesize = ftell(fp); // 実ファイルサイズ(単位Mbit)
u32 romsize = 1 << (this->pRomHeader->s.rom_size); // ROM容量
if( (romsize < METWL_ROMSIZE_MIN) || (METWL_ROMSIZE_MAX < romsize) )
if( *(this->hIsMediaNand) == false ) // カードアプリのときのみのチェック
{
this->hErrorList->Add( gcnew RCMrcError(
"デバイス容量", 0x14, 0x14, "指定可能な容量ではありません。",
"Device Capacity", "Invalid capacity.", false, true ) );
if( (romsize*1024*1024/8) < filesize )
{
this->hErrorList->Add( gcnew RCMrcError(
"デバイス容量", 0x14, 0x14, "実ファイルサイズよりも小さい値が指定されています。",
"Device Capacity", "Setting data is less than the actual file size.", false, true ) );
}
else if( filesize < (romsize*1024*1024/8) )
{
this->hWarnList->Add( gcnew RCMrcError( // 警告
"デバイス容量", 0x14, 0x14, "実ファイルサイズに比べて無駄のある値が設定されています。",
"Device Capacity", "Setting data is larger than the actual file size.", false, true ) );
}
if( (romsize < METWL_ROMSIZE_MIN) || (METWL_ROMSIZE_MAX < romsize) )
{
this->hErrorList->Add( gcnew RCMrcError(
"デバイス容量", 0x14, 0x14, "指定可能な容量ではありません。",
"Device Capacity", "Invalid capacity.", false, true ) );
}
if( (filesize % 2) != 0 )
{
this->hErrorList->Add( gcnew RCMrcError(
"実ファイルサイズ", METWL_ERRLIST_NORANGE, METWL_ERRLIST_NORANGE, "中途半端な値です。通常では2のべき乗の値です。",
"Actual File Size", "Invalid size. This size is usually power of 2.", false, true ) );
}
} //if( *(this->hIsNAND) == false )
else
{
if( (romsize < METWL_ROMSIZE_MIN_NAND) || (METWL_ROMSIZE_MAX_NAND < romsize) )
{
this->hErrorList->Add( gcnew RCMrcError(
"デバイス容量", 0x14, 0x14, "NANDアプリに対して指定可能な容量ではありません。",
"Device Capacity", "Invalid capacity.", false, true ) );
}
u32 allsizeMB = (filesize*1024*1024/8) + this->pRomHeader->s.public_save_data_size + this->pRomHeader->s.private_save_data_size;
if( allsizeMB > METWL_ALLSIZE_MAX_NAND )
{
this->hErrorList->Add( gcnew RCMrcError(
"実ファイルサイズ", METWL_ERRLIST_NORANGE, METWL_ERRLIST_NORANGE,
"ROMデータの実ファイルサイズとPublicセーブデータおよびPrivateセーブデータのサイズの総和が32MByteを超えています。",
"Actual File Size",
"The sum of this size, the public save data size and private save data size exceed 32MByte.", false, true ) );
}
}
if( this->pRomHeader->s.warning_no_spec_rom_speed != 0 )
{
this->hWarnList->Add( gcnew RCMrcError(

View File

@ -26,8 +26,9 @@ namespace MasterEditorTWL
ERROR_FILE_READ,
ERROR_FILE_WRITE,
// 署名でのエラー
ERROR_SIGN_ENCRYPT,
ERROR_SIGN_DECRYPT,
ERROR_SIGN_ENCRYPT, // 署名できない
ERROR_SIGN_DECRYPT, // 署名解除できない
ERROR_SIGN_VERIFY, // 署名解除した後のダイジェストが合わない
// CRC算出でのエラー
ERROR_SIGN_CRC,
// SDKバージョン取得でのエラー
@ -356,6 +357,7 @@ namespace MasterEditorTWL
// ROMヘッダの更新
ECSrlResult calcRomHeaderCRC(void); // ROMヘッダのCRCを再計算
ECSrlResult signRomHeader(void); // ROMヘッダ更新後の再署名
ECSrlResult decryptRomHeader(void); // ROMヘッダの署名を外す
// SRLバイナリから特殊な設定を調べる
ECSrlResult hasDSDLPlaySign( FILE *fp );

View File

@ -56,6 +56,63 @@ System::String^ MasterEditorTWL::transRomSizeToString( System::Byte ^byte )
return (size.ToString() + unit);
}
//
// サイズから単位つきの文字列を取得
//
// @arg [in] バイト数
//
// @ret 文字列(単位つき)
//
System::String^ MasterEditorTWL::transSizeToString( System::UInt32 ^size )
{
if( size == nullptr )
{
return (gcnew System::String(""));
}
System::UInt32 val = *size;
// Byte単位
if( val == 0 )
{
return val.ToString();
}
if( val < 1024 )
{
return (val.ToString() + " Byte");
}
// KB単位に変換
if( (val % 1024) != 0 )
{
return (val.ToString() + " Byte"); // 端数のときは単位変換しない
}
val = val / 1024;
if( val < 1024 )
{
return (val.ToString() + " KB");
}
// MB単位に変換
if( (val % 1024) != 0 )
{
return (val.ToString() + " KB");
}
val = val / 1024;
if( val < 1024)
{
return (val.ToString() + " MB");
}
// GB単位に変換
if( (val % 1024) != 0 )
{
return (val.ToString() + " MB");
}
val = val / 1024;
return (val.ToString() + " GB");
}
//
// ペアレンタルコントロールのレーティング値から文字列を取得
//

View File

@ -32,6 +32,15 @@ namespace MasterEditorTWL
//
System::String^ transRomSizeToString( System::Byte ^byte );
//
// サイズから単位つきの文字列を取得
//
// @arg [in] バイト数
//
// @ret 文字列(単位つき)
//
System::String^ transSizeToString( System::UInt32 ^size );
//
// ペアレンタルコントロールのレーティング値から文字列を取得
//