From 36d3312c57f4d1c8b334862b770fdb63068397b4 Mon Sep 17 00:00:00 2001 From: nishikawa_takeshi Date: Thu, 19 Feb 2009 10:36:38 +0000 Subject: [PATCH] =?UTF-8?q?=E5=87=BA=E5=8A=9B=E3=83=95=E3=82=A1=E3=82=A4?= =?UTF-8?q?=E3=83=AB=E3=83=81=E3=82=A7=E3=83=83=E3=82=AB:ROM=E3=83=81?= =?UTF-8?q?=E3=82=A7=E3=83=83=E3=82=AF=E3=82=92=E8=BF=BD=E5=8A=A0=E3=80=82?= =?UTF-8?q?=E3=82=AA=E3=83=BC=E3=83=AB=E3=83=99=E3=83=AA=E3=83=95=E3=82=A1?= =?UTF-8?q?=E3=82=A4=E5=87=A6=E7=90=86=E3=81=8C=E6=9C=AA=E5=AE=9F=E8=A3=85?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlToolsRED@166 7061adef-622a-194b-ae81-725974e89856 --- .../MasterEditorTWLChecker/Debug/config.xml | 6 +- .../MasterEditorTWLChecker.ncb | Bin 6958080 -> 7007232 bytes .../MasterEditorTWLChecker.suo | Bin 32768 -> 32768 bytes .../MasterEditorTWLChecker/Debug/BuildLog.htm | Bin 11002 -> 11054 bytes .../MasterEditorTWLChecker.cpp | 14 +- .../MasterEditorTWLChecker/check.cpp | 202 ++++++++++++++- .../MasterEditorTWLChecker/check.h | 28 ++- .../MasterEditorTWLChecker/check_rom.cpp | 201 ++++++++------- .../MasterEditorTWLChecker/check_sheet.cpp | 233 +++++++++--------- .../MasterEditorTWLChecker/Release/config.xml | 6 +- .../MasterEditorTWLChecker/config.xml | 6 +- 11 files changed, 447 insertions(+), 249 deletions(-) diff --git a/build/tools/MasterEditor/MasterEditorTWLChecker/Debug/config.xml b/build/tools/MasterEditor/MasterEditorTWLChecker/Debug/config.xml index 430c3b9..b6fe459 100644 --- a/build/tools/MasterEditor/MasterEditorTWLChecker/Debug/config.xml +++ b/build/tools/MasterEditor/MasterEditorTWLChecker/Debug/config.xml @@ -79,11 +79,11 @@ - + - + 荳榊庄 - + diff --git a/build/tools/MasterEditor/MasterEditorTWLChecker/MasterEditorTWLChecker.ncb b/build/tools/MasterEditor/MasterEditorTWLChecker/MasterEditorTWLChecker.ncb index da64d3052079c05e63ee4831d651323bc571587c..54ac40a5c06c5877a0ed98bf0ab5c18693462f50 100644 GIT binary patch delta 24348 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%0DvnYI3CzlW3N5PvF6-`bt4IjFs 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 XfR_RP1ndIrR{rYV_liPm*iZUD>rvpR delta 5628 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 diff --git a/build/tools/MasterEditor/MasterEditorTWLChecker/MasterEditorTWLChecker.suo b/build/tools/MasterEditor/MasterEditorTWLChecker/MasterEditorTWLChecker.suo index f3675917c89578ccffa14d9cec53931ffddcb81e..c19bc147a1d72d4ce68ea8eb32092a4837d9509a 100644 GIT binary patch delta 2713 zcmai$e@sx)qjMTW-;&b+%U1{E@lU(lYxeTU%_owe?4=q7qB#`#twuyt=lY?ZbKB@B6&( zdEV!J&U*<4wO~*?eOimnR}`fHECF&>D~c{hqXNXsMgP)+EmsEhIyG6mdS+aF)BaC; z2R~PB7*%}IqkpM7B(QF-TyW|}m;I*d)>TE>h`~)@GuQ%Rph;&`rG6V7`7p|(Pk~~5 zAJwkeCtx$oB|2mL;%h9Hu^7KY@xU{Rve7x^kS%%@x?I&Qu4y?ty=YYe+STC&38Qy^ znNYD}H2NiA?E^YzwgFnCzZ?A`Q@vkL!&;Rf#yBx;mg-RK@R@4HI2PZp4X8$stHvfi z7h+9pu%}}*HWX^oHHQ(b%2jO+Y;Wl*mny-TL0L94TY?#J(Ha~XVzTV3x;*GvrRt%5 zd%kk0iO^HobujohH0klynz_lO=zI)f0_ICccB1X)AMH4dL?dTbxhC6Ny_3RFcC02R zo5MnqF*4_E+hFBw)h7G$MrCPpJkBjnMoTM<3-g?++ziCaxB2r*Jy@ORO-;XGYsrAd>=_AFM^t^w#Emo= zX-hBV0Y3r)fWcuA^P_U%NoxSqX!J<}jmBuHO&zTEIaGcMDLiib;~2Ou-PL~8ZT7dK z-!J3UwQ@->w(myoMd@BXoSKw!rX8KhMcL+y6O4)#(Pp-d#+A96UXrZ5EF*!$Jcs4X zNT-5Kz~~qi(-Z}0na25={hA#qR}vV3bk_B&12SG0ieLlupmeYHt8wP&*y?nrhBaTneAY;4r+3{v1Y2m_k@N* zgVNdLcc`eD`#G*8h59LkBi4p3d^2y#p8swk)GX8QaY7)Eo)@VUk`2bHNZ`;u!oddSTSOV;OKrf)Z38;}z0R1joeFpLtpj~0{(a8(0 zTJ0NnTB-Xrqp$`&CYD|_Ua}fU2h@1^auphL9QMmI6-6n<(^_q)Hb&*itn4JG`=`LY?dkwdQM+ogcRE(Ct~6tA%dW zc0X@)W2`+TO3qh=f4CD3U&r!$laB5ANs}WPJ>tqOmZH1@X@2JLtP3?Sy#?qqpS%mh5rG=}Bwc`Y|ud$E(3LZbJ ihR2%(c${940v3R9wecDLiD8AARfH7^rN!A|vF2ZTd;Nz1 delta 1527 zcmZWpUrd`-6#wq+_kC?y3#Ds;ZiTg_TQP<1tJ;Z3w{9(iE{sxbn1iVxDj1UuYBOmU z&9{ZbWInA2jS&-Evg~CKZr&Fk&|tPbXtH7A%N|T*<--@UiG&UKyNzRhh&b^>rbr)Onjj$ef4=w_bFvKKc78W0K@W zPH4eddzDG_xZ&+VPZHPb0!(GpyuDh-G0V?OqEw$Y!Cg5DYpy|sGB#Jsx_?#89H|wT z9_u^C7=z>9e?f22A%EhCLj5+tbo2ePukTq!3ch7k+K0m)N~FGqUM+)?|CG{%u9t$A zH_`hFJBF#C%hc*sQEHb61-iMMP&FA=wdU>Ue9*Ql>K2tlH%($T%vm|H0eV=5e_~x? zsolaLmvg|Qj`mmw)kToKg1~ALiPnuE8$(bmjCdPCb^)@H{g8_^DQ09LF&!!Gs_hc3 z(cK-n#Ka4qF(0XGWHNqGI>She>IggxL_{K%;xA8OjO5KDs0|-t4ng)cf?_?04-sSn zVdM}$yp-f3+O^ECjYhxg{+7YvVsuL_YYo37MI}wrVC?xBF>~}PCqabs_!mrm{J8Tz zR3=<;l7;fqjjuzH^&u!mmPWV{0|<%{=xURE!(ugNV&znl?u_ydMt+21D#IG-T$MMF z+h9F)3X=6vWg1yO6nk#T^H)3{P-$it@sn2Lki<}L8&}3hbVb6Yd);)Qs1Ow)^~v_* zh+8bBXSs3!sX{fN&_Bx#!FqqS#_JfjK=E{j(d00!o%UMjwHYt2X`rw}<_3b*ceprE zsXE_e+OFj~;c_$qiNQyS+=#VJjF3$cWE*Ham>pJit2Y+b;rrI5l884dtykV!8 z1}o$K@~E~oOZ1M$**2LU>)2i|R>t3zm4jG^S1V6u?97jpc11>ifnsg4(Y*WJCZ~FK z@+{>4;_ziG2e}ak1ms3=wrPeUZ(aOc#rKZ|#Ky(igE@m4gE0^rG8i$KFc>hHGMG*7l{MbHjID!ha*L$iW+&bRM(pY~ zZ|CcVNSR|bqD#P!8>|yUdh=Ups7?!Xott}QmokBMVM@6xBtz`8#L%^0kr|>3Q|h|1 PIn(4OLA}jNYByK_6T&Ty delta 291 zcmZ1%_A7Kl9Gj>Cg8_ppgAs!{g9U>LkTwSLO(qu#m~LLd*2X57%#gv5%8<;E%@EH} z#E{RByE&3KnGw6L%@_H)AyRJW25v4CXygX#!jxi{0qZgZT8!xotxVlNMcBwEXXf8d4hn@W-g^mActX5xcQ^9ITIFN2CLm>0RWF%H3 ^args) { try { + setDebugPrint( true ); + + //FilenameItem ^fItem = gcnew FilenameItem; + //fItem->parseFilename( args[0] ); + //SheetItem ^sItem = gcnew SheetItem; + //sItem->readSheet( args[0] ); + //checkSheet( fItem, sItem ); + FilenameItem ^fItem = gcnew FilenameItem; fItem->parseFilename( args[0] ); - - SheetItem ^sItem = gcnew SheetItem; - sItem->readSheet( args[0] ); - - checkSheet( fItem, sItem ); + checkRom( fItem, args[0] ); } catch( System::Exception ^ex ) { diff --git a/build/tools/MasterEditor/MasterEditorTWLChecker/MasterEditorTWLChecker/check.cpp b/build/tools/MasterEditor/MasterEditorTWLChecker/MasterEditorTWLChecker/check.cpp index d8bb09e..5ad8ddb 100644 --- a/build/tools/MasterEditor/MasterEditorTWLChecker/MasterEditorTWLChecker/check.cpp +++ b/build/tools/MasterEditor/MasterEditorTWLChecker/MasterEditorTWLChecker/check.cpp @@ -1,8 +1,54 @@ #include "stdafx.h" #include "check.h" +#include +#include +#include +#include using namespace System; +// ------------------------------------------------------------------ +// デバッグ表示 +// ------------------------------------------------------------------ + +static System::Boolean gbDebugPrint = false; +void setDebugPrint( System::Boolean b ) +{ + gbDebugPrint = b; +} + +void DebugPrint( System::String ^str ) +{ + if( gbDebugPrint ) + { + Console::WriteLine( str ); + } +} + +void DebugPrint( System::String ^fmt, System::Object ^arg0 ) +{ + if( gbDebugPrint ) + { + Console::WriteLine( fmt, arg0 ); + } +} + +void DebugPrint( System::String ^fmt, System::Object ^arg0, System::Object ^arg1 ) +{ + if( gbDebugPrint ) + { + Console::WriteLine( fmt, arg0, arg1 ); + } +} + +void DebugPrint( System::String ^fmt, System::Object ^arg0, System::Object ^arg1, System::Object ^arg2 ) +{ + if( gbDebugPrint ) + { + Console::WriteLine( fmt, arg0, arg1, arg2 ); + } +} + // ------------------------------------------------------------------ // ファイル名の解析 // ------------------------------------------------------------------ @@ -17,10 +63,156 @@ System::Void FilenameItem::parseFilename( System::String ^filepath ) this->rating = System::String::Copy(list[2]); this->lang = System::String::Copy(list[3]); - Console::WriteLine( "[In Filename]" ); - Console::WriteLine( "Region: " + this->region ); - Console::WriteLine( "Ogn: " + this->ogn ); - Console::WriteLine( "Rating: " + this->rating ); - Console::WriteLine( "Lang: " + this->lang ); + DebugPrint( "--------------------------------------------------------" ); + DebugPrint( "{0,-10} {1,-20}", "Filename",filename ); + DebugPrint( "{0,-10} {1,-20}", "Region", this->region ); + DebugPrint( "{0,-10} {1,-20}", "Ogn", this->ogn ); + DebugPrint( "{0,-10} {1,-20}", "Rating", this->rating ); + DebugPrint( "{0,-10} {1,-20}", "Language",this->lang ); + DebugPrint( "--------------------------------------------------------" ); return; } + +// ----------------------------------------------------------------- +// ファイル名の文字列をROMヘッダ中の値に変換 +// ----------------------------------------------------------------- + +u32 FilenameItem::getRegionBitmap() +{ + u32 bitmap = 0; + if( this->region == "JP" ) + { + bitmap = METWL_MASK_REGION_JAPAN; + } + else if( this->region == "US" ) + { + bitmap = METWL_MASK_REGION_AMERICA; + } + else if( this->region == "EU" ) + { + bitmap = METWL_MASK_REGION_EUROPE; + } + else if( this->region == "AU" ) + { + bitmap = METWL_MASK_REGION_AUSTRALIA; + } + else if( this->region == "EUAU" ) + { + bitmap = (METWL_MASK_REGION_EUROPE | METWL_MASK_REGION_AUSTRALIA); + } + else if( this->region == "USAU" ) + { + bitmap = (METWL_MASK_REGION_AMERICA | METWL_MASK_REGION_AUSTRALIA); + } + else if( this->region == "USEUAU" ) + { + bitmap = (METWL_MASK_REGION_AMERICA | METWL_MASK_REGION_EUROPE | METWL_MASK_REGION_AUSTRALIA); + } + else if( this->region == "CN" ) + { + bitmap = (METWL_MASK_REGION_CHINA); + } + else if( this->region == "KR" ) + { + bitmap = (METWL_MASK_REGION_KOREA); + } + else if( this->region == "ALL" ) + { + bitmap = METWL_MASK_REGION_ALL; + } + return bitmap; +} + +int FilenameItem::getOgnNumber() +{ + int num = -1; + if( this->ogn == "CERO" ) + { + num = OS_TWL_PCTL_OGN_CERO; + } + else if( this->ogn == "ESRB" ) + { + num = OS_TWL_PCTL_OGN_ESRB; + } + else if( this->ogn == "USK" ) + { + num = OS_TWL_PCTL_OGN_USK; + } + else if( this->ogn == "PEGI" ) + { + num = OS_TWL_PCTL_OGN_PEGI_GEN; + } + else if( this->ogn == "PRT" ) + { + num = OS_TWL_PCTL_OGN_PEGI_PRT; + } + else if( this->ogn == "BBFC" ) + { + num = OS_TWL_PCTL_OGN_PEGI_BBFC; + } + else if( this->ogn == "OFLC" ) + { + num = OS_TWL_PCTL_OGN_OFLC; + } + //else if( this->ogn == "GRB" ) + //{ + // num = OS_TWL_PCTL_OGN_GRB; + //} + return num; +} + +System::String ^FilenameItem::getOgnString(int ogn) +{ + System::String ^str = nullptr; + if( ogn == OS_TWL_PCTL_OGN_CERO ) + { + str = "CERO"; + } + else if( ogn == OS_TWL_PCTL_OGN_ESRB ) + { + str = "ESRB"; + } + else if( ogn == OS_TWL_PCTL_OGN_USK ) + { + str = "USK"; + } + else if( ogn == OS_TWL_PCTL_OGN_PEGI_GEN ) + { + str = "PEGI"; + } + else if( ogn == OS_TWL_PCTL_OGN_PEGI_PRT ) + { + str = "PRT"; + } + else if( ogn == OS_TWL_PCTL_OGN_PEGI_BBFC ) + { + str = "BBFC"; + } + else if( ogn == OS_TWL_PCTL_OGN_OFLC ) + { + str = "OFLC"; + } + //else if( ogn == OS_TWL_PCTL_OGN_GRB ) + //{ + // str = "GRB"; + //} + else if( ogn < 0 ) + { + str = "UN"; + } + return str; +} + +u8 FilenameItem::getRatingValue() +{ + u8 val = 0; + if( this->rating == "RP" ) + { + val = OS_TWL_PCTL_OGNINFO_ENABLE_MASK | OS_TWL_PCTL_OGNINFO_ALWAYS_MASK; + } + else + { + val = OS_TWL_PCTL_OGNINFO_ENABLE_MASK | (System::Byte::Parse(this->rating)); + } + return val; +} \ No newline at end of file diff --git a/build/tools/MasterEditor/MasterEditorTWLChecker/MasterEditorTWLChecker/check.h b/build/tools/MasterEditor/MasterEditorTWLChecker/MasterEditorTWLChecker/check.h index ef1d826..435afe2 100644 --- a/build/tools/MasterEditor/MasterEditorTWLChecker/MasterEditorTWLChecker/check.h +++ b/build/tools/MasterEditor/MasterEditorTWLChecker/MasterEditorTWLChecker/check.h @@ -1,7 +1,9 @@ #pragma once +#include + // -// ファイル名から抽出されるファイル情報の構造体 +// ファイル名から抽出される真値の構造体 // ref class FilenameItem { @@ -14,6 +16,12 @@ public: FilenameItem(){} public: System::Void parseFilename( System::String ^filepath ); +public: + // 各メンバをROMヘッダの値に変換 + u32 getRegionBitmap(); + int getOgnNumber(); + System::String ^getOgnString(int ogn); + u8 getRatingValue(); }; // @@ -23,13 +31,7 @@ ref class SheetItem { public: property System::String ^region; - property System::String ^CERO; - property System::String ^ESRB; - property System::String ^USK; - property System::String ^PEGI; - property System::String ^PEGIPRT; - property System::String ^PEGIBBFC; - property System::String ^OFLC; + property cli::array ^ratings; property System::Boolean IsUnnecessaryRating; public: SheetItem(){} @@ -37,5 +39,15 @@ public: System::Void readSheet( System::String ^sheetfile ); }; +// ROMヘッダの値と真値(ファイル名)を比較 +System::Void checkRom( FilenameItem ^fItem, System::String ^srlpath ); + // 提出確認書の文字列と真値を比較 System::Void checkSheet( FilenameItem ^fItem, SheetItem ^sItem ); + +// デバッグ表示 +void setDebugPrint( System::Boolean b ); +void DebugPrint( System::String ^str ); +void DebugPrint( System::String ^fmt, System::Object ^arg0 ); +void DebugPrint( System::String ^fmt, System::Object ^arg0, System::Object ^arg1 ); +void DebugPrint( System::String ^fmt, System::Object ^arg0, System::Object ^arg1, System::Object ^arg2 ); diff --git a/build/tools/MasterEditor/MasterEditorTWLChecker/MasterEditorTWLChecker/check_rom.cpp b/build/tools/MasterEditor/MasterEditorTWLChecker/MasterEditorTWLChecker/check_rom.cpp index 63ff894..e3efc8d 100644 --- a/build/tools/MasterEditor/MasterEditorTWLChecker/MasterEditorTWLChecker/check_rom.cpp +++ b/build/tools/MasterEditor/MasterEditorTWLChecker/MasterEditorTWLChecker/check_rom.cpp @@ -1,118 +1,22 @@ #include "stdafx.h" #include "check.h" +#include +#include #include #include #include #include #include +#include #include #include -// -// ファイル名の文字列とリージョン/レーティングの値の対応づけ -// +System::Void checkRomHeaderSign( ROM_Header *prh ); -u32 getRegionBitmap( System::String ^region ) -{ - u32 bitmap = 0; - if( region == "JP" ) - { - bitmap = METWL_MASK_REGION_JAPAN; - } - else if( region == "US" ) - { - bitmap = METWL_MASK_REGION_AMERICA; - } - else if( region == "EU" ) - { - bitmap = METWL_MASK_REGION_EUROPE; - } - else if( region == "AU" ) - { - bitmap = METWL_MASK_REGION_AUSTRALIA; - } - else if( region == "EUAU" ) - { - bitmap = (METWL_MASK_REGION_EUROPE | METWL_MASK_REGION_AUSTRALIA); - } - else if( region == "USAU" ) - { - bitmap = (METWL_MASK_REGION_AMERICA | METWL_MASK_REGION_AUSTRALIA); - } - else if( region == "USEUAU" ) - { - bitmap = (METWL_MASK_REGION_AMERICA | METWL_MASK_REGION_EUROPE | METWL_MASK_REGION_AUSTRALIA); - } - else if( region == "CN" ) - { - bitmap = (METWL_MASK_REGION_CHINA); - } - else if( region == "KR" ) - { - bitmap = (METWL_MASK_REGION_KOREA); - } - else if( region == "ALL" ) - { - bitmap = METWL_MASK_REGION_ALL; - } - return bitmap; -} -int getOgnNumber( System::String ^ogn ) -{ - int num = -1; - if( ogn == "CERO" ) - { - num = OS_TWL_PCTL_OGN_CERO; - } - if( ogn == "ESRB" ) - { - num = OS_TWL_PCTL_OGN_ESRB; - } - if( ogn == "USK" ) - { - num = OS_TWL_PCTL_OGN_USK; - } - if( ogn == "PEGI_GEN" ) - { - num = OS_TWL_PCTL_OGN_PEGI_GEN; - } - if( ogn == "PEGI_PRT" ) - { - num = OS_TWL_PCTL_OGN_PEGI_PRT; - } - if( ogn == "PEGI_BBFC" ) - { - num = OS_TWL_PCTL_OGN_PEGI_BBFC; - } - if( ogn == "OFLC" ) - { - num = OS_TWL_PCTL_OGN_OFLC; - } - if( ogn == "GRB" ) - { - num = OS_TWL_PCTL_OGN_GRB; - } - return num; -} - -u8 getRatingValue( System::String ^rating ) -{ - u8 val = 0; - if( rating == "RP" ) - { - val = OS_TWL_PCTL_OGNINFO_ENABLE_MASK | OS_TWL_PCTL_OGNINFO_ALWAYS_MASK; - } - else - { - val = OS_TWL_PCTL_OGNINFO_ENABLE_MASK | (System::Byte::Parse(rating)); - } - return val; -} - -// +// ------------------------------------------------------------------- // 出力SRLのチェック -// +// ------------------------------------------------------------------- System::Void checkRom( FilenameItem ^fItem, System::String ^srlpath ) { const char *chpath = @@ -136,8 +40,17 @@ System::Void checkRom( FilenameItem ^fItem, System::String ^srlpath ) } fclose(fp); + // 署名のチェック + checkRomHeaderSign( &rh ); + + DebugPrint( "--------------------------------------------------------" ); + DebugPrint( "{0,-10} {1,-20}", nullptr, "RomHeader" ); + DebugPrint( "--" ); + // リージョンのチェック - u32 region = getRegionBitmap( fItem->region ); + u32 region = fItem->getRegionBitmap(); // ファイル名に対応する真値を取得 + DebugPrint( "{0,-10} {1,-20:X04}", "Region", rh.s.card_region_bitmap ); + DebugPrint( "--" ); if( rh.s.card_region_bitmap != region ) { throw (gcnew System::Exception("Illegal Region in ROM Header.")); @@ -156,8 +69,8 @@ System::Void checkRom( FilenameItem ^fItem, System::String ^srlpath ) } // 設定したレーティングが正しいかどうかをチェック - int ogn = getOgnNumber( fItem->ogn ); // ファイル名から団体とレーティング値の真値を決定 - u8 rating = getRatingValue( fItem->rating ); + int ogn = fItem->getOgnNumber(); // ファイル名に対応する真値を取得 + u8 rating = fItem->getRatingValue(); if( rh.s.parental_control_rating_info[ ogn ] != rating ) { throw (gcnew System::Exception("Mismatch Rating Ogn " + ogn.ToString() + ". " @@ -166,6 +79,22 @@ System::Void checkRom( FilenameItem ^fItem, System::String ^srlpath ) return; } + // 表示 + System::Collections::Generic::List ^alllist = gcnew System::Collections::Generic::List(); + alllist->Clear(); + alllist->Add( OS_TWL_PCTL_OGN_CERO ); + alllist->Add( OS_TWL_PCTL_OGN_ESRB ); + alllist->Add( OS_TWL_PCTL_OGN_USK ); + alllist->Add( OS_TWL_PCTL_OGN_PEGI_GEN ); + alllist->Add( OS_TWL_PCTL_OGN_PEGI_PRT ); + alllist->Add( OS_TWL_PCTL_OGN_PEGI_BBFC ); + alllist->Add( OS_TWL_PCTL_OGN_OFLC ); + //alllist->Add( OS_TWL_PCTL_OGN_GRB ); + for each ( int ogn in alllist ) + { + DebugPrint( "{0,-10} {1,-20:X02}", fItem->getOgnString(ogn), rh.s.parental_control_rating_info[ogn] ); + } + // リージョンに含まれない団体のレーティングがクリアされているかチェック int i; for( i=0; i < PARENTAL_CONTROL_INFO_SIZE; i++ ) @@ -176,4 +105,66 @@ System::Void checkRom( FilenameItem ^fItem, System::String ^srlpath ) return; } } + DebugPrint( "--------------------------------------------------------" ); +} + +// ------------------------------------------------------------------- +// ROMヘッダの署名を外す +// ------------------------------------------------------------------- +System::Void checkRomHeaderSign( ROM_Header *prh ) +{ + u8 original[ RSA_KEY_LENGTH ]; // 署名外した後のデータ格納先 + s32 pos = 0; // ブロックの先頭アドレス + u8 digest[ DIGEST_SIZE_SHA1 ]; // ROMヘッダのダイジェスト + u8 *publicKey = (u8*)MasterEditorTWL::g_devPubKey_DER; + + // <データの流れ> + // (1) 公開鍵で復号した結果(ブロック)をローカル変数(original)に格納 + // (2) ブロックから余分な部分を取り除いて引数(pDst)にコピー + + u8 *idL = prh->s.titleID_Lo; + u32 idH = prh->s.titleID_Hi; + + if( (idL[3]=='H') && (idL[2]=='N') && (idL[1]=='A') ) // ランチャアプリかどうかはTitleID_Loの値で決定 + { + publicKey = (u8*)MasterEditorTWL::g_devPubKey_DER_launcher; + } + else if( idH & TITLE_ID_HI_SECURE_FLAG_MASK ) // 各ビットは排他的とは限らないのでelse ifにはならない + { + publicKey = (u8*)MasterEditorTWL::g_devPubKey_DER_secure; + } + else if( (idH & TITLE_ID_HI_APP_TYPE_MASK) == 1 ) + { + publicKey = (u8*)MasterEditorTWL::g_devPubKey_DER_system; + } + else if( (idH & TITLE_ID_HI_APP_TYPE_MASK) == 0 ) + { + publicKey = (u8*)MasterEditorTWL::g_devPubKey_DER; + } + + // 署名の解除 = 公開鍵で復号 + if( !ACSign_Decrypto( original, publicKey, prh->signature, RSA_KEY_LENGTH ) ) + { + throw (gcnew System::Exception("Fail to decrypt sign.")); + return; + } + // 署名前データを復号後ブロックからゲット + for( pos=0; pos < (RSA_KEY_LENGTH-2); pos++ ) // 本来ブロックの先頭は0x00だが復号化の内部処理によって消える仕様 + { + // 暗号ブロック形式 = 0x00, BlockType, Padding, 0x00, 実データ + if( original[pos] == 0x00 ) // 実データの直前の0x00をサーチ + { + break; + } + } + // ベリファイ + // ROMヘッダのダイジェストを算出(先頭から証明書領域の直前までが対象) + ROM_Header tmprh; // マネージヒープ上にある場合実アドレスを取得できないのでサイズ計算用のROMヘッダを用意 + ACSign_DigestUnit( digest, prh, (u32)&(tmprh.certificate) - (u32)&(tmprh) ); + if( memcmp( &(original[pos+1]), digest, DIGEST_SIZE_SHA1 ) != 0 ) + { + throw (gcnew System::Exception("Fail to verify sign.")); + return; + } + return; } diff --git a/build/tools/MasterEditor/MasterEditorTWLChecker/MasterEditorTWLChecker/check_sheet.cpp b/build/tools/MasterEditor/MasterEditorTWLChecker/MasterEditorTWLChecker/check_sheet.cpp index 518250a..f1c958b 100644 --- a/build/tools/MasterEditor/MasterEditorTWLChecker/MasterEditorTWLChecker/check_sheet.cpp +++ b/build/tools/MasterEditor/MasterEditorTWLChecker/MasterEditorTWLChecker/check_sheet.cpp @@ -5,16 +5,21 @@ #include "stdafx.h" #include "check.h" #include +#include +#include +#include using namespace System; - // ------------------------------------------------------------------ // 提出確認書の読み込み // ------------------------------------------------------------------ System::Void SheetItem::readSheet( System::String ^sheetfile ) { + // メンバの初期化 + this->ratings = gcnew cli::array(PARENTAL_CONTROL_INFO_SIZE); + // XSLによってXML変換 System::String ^tmpfile = ".\\temp" + System::DateTime::Now.ToString("yyyyMMddHHmmss") + ".xml"; System::Xml::Xsl::XslCompiledTransform ^xslt = gcnew System::Xml::Xsl::XslCompiledTransform; @@ -33,13 +38,14 @@ System::Void SheetItem::readSheet( System::String ^sheetfile ) System::Xml::XmlElement ^root = doc->DocumentElement; { this->region = MasterEditorTWL::getXPathText( root, "/Sheet/Region" ); - this->CERO = MasterEditorTWL::getXPathText( root, "/Sheet/RatingCERO" ); - this->ESRB = MasterEditorTWL::getXPathText( root, "/Sheet/RatingESRB" ); - this->USK = MasterEditorTWL::getXPathText( root, "/Sheet/RatingUSK" ); - this->PEGI = MasterEditorTWL::getXPathText( root, "/Sheet/RatingPEGI" ); - this->PEGIPRT = MasterEditorTWL::getXPathText( root, "/Sheet/RatingPEGIPRT" ); - this->PEGIBBFC = MasterEditorTWL::getXPathText( root, "/Sheet/RatingPEGIBBFC" ); - this->OFLC = MasterEditorTWL::getXPathText( root, "/Sheet/RatingOFLC" ); + this->ratings[ OS_TWL_PCTL_OGN_CERO ] = MasterEditorTWL::getXPathText( root, "/Sheet/RatingCERO" ); + this->ratings[ OS_TWL_PCTL_OGN_ESRB ] = MasterEditorTWL::getXPathText( root, "/Sheet/RatingESRB" ); + this->ratings[ OS_TWL_PCTL_OGN_USK ] = MasterEditorTWL::getXPathText( root, "/Sheet/RatingUSK" ); + this->ratings[ OS_TWL_PCTL_OGN_PEGI_GEN ] = MasterEditorTWL::getXPathText( root, "/Sheet/RatingPEGI" ); + this->ratings[ OS_TWL_PCTL_OGN_PEGI_PRT ] = MasterEditorTWL::getXPathText( root, "/Sheet/RatingPEGIPRT" ); + this->ratings[ OS_TWL_PCTL_OGN_PEGI_BBFC ] = MasterEditorTWL::getXPathText( root, "/Sheet/RatingPEGIBBFC" ); + this->ratings[ OS_TWL_PCTL_OGN_OFLC ] = MasterEditorTWL::getXPathText( root, "/Sheet/RatingOFLC" ); + //this->ratings[ OS_TWL_PCTL_OGN_GRB ] = MasterEditorTWL::getXPathText( root, "/Sheet/RatingGRB" ); System::String ^text = MasterEditorTWL::getXPathText( root, "/Sheet/IsUnnecessaryRating" ); if( !System::String::IsNullOrEmpty( text ) && text->Equals( "○" ) ) @@ -51,16 +57,18 @@ System::Void SheetItem::readSheet( System::String ^sheetfile ) this->IsUnnecessaryRating = false; } - Console::WriteLine( "[In Sheet]" ); - Console::WriteLine( "Region: " + this->region ); - Console::WriteLine( "CERO: " + this->CERO ); - Console::WriteLine( "ESRB: " + this->ESRB ); - Console::WriteLine( "USK: " + this->USK ); - Console::WriteLine( "PEGI: " + this->PEGI ); - Console::WriteLine( "PEGIPRT: " + this->PEGIPRT ); - Console::WriteLine( "PEGIBBFC: " + this->PEGIBBFC ); - Console::WriteLine( "OFLC: " + this->OFLC ); - Console::WriteLine( "Unnecessary: " + this->IsUnnecessaryRating.ToString() ); + //Console::WriteLine( "[In Sheet]" ); + //Console::WriteLine( "Region: " + this->region ); + //Console::WriteLine( "Region: {0,-20} {1,-20}", this->region, this->region ); + //Console::WriteLine( "CERO: " + this->ratings[ OS_TWL_PCTL_OGN_CERO ] ); + //Console::WriteLine( "ESRB: " + this->ratings[ OS_TWL_PCTL_OGN_ESRB ] ); + //Console::WriteLine( "USK: " + this->ratings[ OS_TWL_PCTL_OGN_USK ] ); + //Console::WriteLine( "PEGI: " + this->ratings[ OS_TWL_PCTL_OGN_PEGI_GEN ] ); + //Console::WriteLine( "PEGIPRT: " + this->ratings[ OS_TWL_PCTL_OGN_PEGI_PRT ] ); + //Console::WriteLine( "PEGIBBFC: " + this->ratings[ OS_TWL_PCTL_OGN_PEGI_BBFC ] ); + //Console::WriteLine( "OFLC: " + this->ratings[ OS_TWL_PCTL_OGN_OFLC ] ); + ////Console::WriteLine( "GRB: " + this->ratings[ OS_TWL_PCTL_OGN_GRB ] ); + //Console::WriteLine( "Unnecessary: " + this->IsUnnecessaryRating.ToString() ); } // 中間ファイルを削除 @@ -87,126 +95,117 @@ System::Void checkSheet( FilenameItem ^fItem, SheetItem ^sItem ) // XMLからデータを抽出 System::Xml::XmlElement ^root = doc->DocumentElement; + DebugPrint( "--------------------------------------------------------" ); + DebugPrint( "{0,-10} {1,-20} {2,-20}", nullptr, "Config", "Sheet" ); + DebugPrint( "--" ); + // 設定ファイル中の真値と提出確認書の記述を比較 // (設定ファイルにはファイル名と対応させたタグ名で真値が記述されている) - System::String ^region = MasterEditorTWL::getXPathText( root, "/Config/Region/" + fItem->region + "/" + fItem->lang ); - System::String ^undef = MasterEditorTWL::getXPathText( root, "/Config/Rating/Undefined/" + fItem->lang ); - System::String ^rating = MasterEditorTWL::getXPathText( root, "/Config/Rating/" + fItem->ogn + "/r" + fItem->rating + "/" + fItem->lang ); - Console::WriteLine( "[In Config file]" ); - Console::WriteLine( "Region: " + region ); - Console::WriteLine( "Rating: " + rating ); - Console::WriteLine( "Undefined: " + undef ); - System::String ^errmsg = nullptr; + // リージョンの文字列をチェック + System::String ^region = MasterEditorTWL::getXPathText( root, "/Config/Region/" + fItem->region + "/" + fItem->lang ); + + DebugPrint( "{0,-10} {1,-20} {2,-20}", "Region", region, sItem->region ); + DebugPrint( "--" ); + if( sItem->region != region ) { - throw (gcnew System::Exception("In Sheet, region is illegal string.")); + throw (gcnew System::Exception("In Sheet, region is an Illegal String.")); + return; } - // レーティングの文字列をチェック - if( fItem->region == "JP" ) + + // レーティングの文字列のチェック + System::Collections::Generic::List ^ognlist = MasterEditorTWL::getOgnListInRegion( fItem->getRegionBitmap() ); + if( fItem->ogn != fItem->getOgnString(-1) ) { - if( sItem->CERO != rating ) + // 「レーティング表示不要」でないとき + + // 対象のレーティングの文字列を真値と比較 + System::String ^rating = MasterEditorTWL::getXPathText( root, "/Config/Rating/" + fItem->ogn + "/r" + fItem->rating + "/" + fItem->lang ); + DebugPrint( "{0,-10} {1,-20} {2,-20}", fItem->ogn, rating, sItem->ratings[fItem->getOgnNumber()] ); + if( sItem->ratings[fItem->getOgnNumber()] != rating ) { - errmsg = "In Sheet, CERO is illegal string."; + throw (gcnew System::Exception("In Sheet, " + fItem->ogn + " is an Illegal String.")); + return; } - if( (sItem->ESRB != undef) || - (sItem->USK != undef) || - (sItem->PEGI != undef) || - (sItem->PEGIPRT != undef) || - (sItem->PEGIBBFC != undef) || - (sItem->OFLC != undef) ) + + // その他のリージョンに含まれる団体が「全年齢」になっているかチェック + for each ( int ogn in ognlist ) { - errmsg = "In Sheet, Other Ogn is illegal string."; + if( ogn != fItem->getOgnNumber() ) + { + // 設定ファイルから 00 (全年齢)のときの文字列を抜き出す + System::String ^str = fItem->getOgnString( ogn ); + System::String ^other = MasterEditorTWL::getXPathText( root, "/Config/Rating/" + str + "/r00/" + fItem->lang ); + + DebugPrint( "{0,-10} {1,-20} {2,-20}", str, other, sItem->ratings[ogn] ); + + // 提出確認書の文字列をチェック + if( sItem->ratings[ogn] != other ) + { + throw (gcnew System::Exception("In Sheet, " + str + " is not a String for \"All ages\"")); + return; + } + } } } - else if( fItem->region == "US" ) + else { - if( sItem->ESRB != rating ) + // 「レーティング表示不要」のとき + + // リージョンに含まれるすべての団体が「レーティング不要」になっているかチェック + for each ( int ogn in ognlist ) { - errmsg = "In Sheet, ESRB is illegal string."; + // 設定ファイルから「レーティング表示不要」のときの文字列を抜き出す + System::String ^str = fItem->getOgnString(-1); + System::String ^unnecessary = MasterEditorTWL::getXPathText( root, "/Config/Rating/" + str + "/" + fItem->lang ); + + DebugPrint( "{0,-10} {1,-20} {2,-20}", fItem->getOgnString(ogn), unnecessary, sItem->ratings[ogn] ); + + // 提出確認書の文字列をチェック + if( sItem->ratings[ogn] != unnecessary ) + { + throw (gcnew System::Exception("In Sheet, " + str + " is not a String for \"Unnecessary\"")); + return; + } } - if( (sItem->CERO != undef) || - (sItem->USK != undef) || - (sItem->PEGI != undef) || - (sItem->PEGIPRT != undef) || - (sItem->PEGIBBFC != undef) || - (sItem->OFLC != undef) ) + + // フラグをチェック + if( !sItem->IsUnnecessaryRating ) { - errmsg = "In Sheet, Other Ogn is illegal string."; + throw (gcnew System::Exception("In Sheet, \"Unnecessary\" Flag is Negated.")); + return; } } - else if( fItem->region == "EU" ) + + // リージョン設定可能な団体(Reservedでない団体)をリストアップ(ここに含まれない団体はチェックしなくてよい) + System::Collections::Generic::List ^alllist = gcnew System::Collections::Generic::List(); + alllist->Clear(); + alllist->Add( OS_TWL_PCTL_OGN_CERO ); + alllist->Add( OS_TWL_PCTL_OGN_ESRB ); + alllist->Add( OS_TWL_PCTL_OGN_USK ); + alllist->Add( OS_TWL_PCTL_OGN_PEGI_GEN ); + alllist->Add( OS_TWL_PCTL_OGN_PEGI_PRT ); + alllist->Add( OS_TWL_PCTL_OGN_PEGI_BBFC ); + alllist->Add( OS_TWL_PCTL_OGN_OFLC ); + //alllist->Add( OS_TWL_PCTL_OGN_GRB ); + + // リージョンに含まれない団体が「不可」になっているかチェック + System::String ^disable = MasterEditorTWL::getXPathText( root, "/Config/Rating/DISABLE/" + fItem->lang ); + int i; + for( i=0; i < PARENTAL_CONTROL_INFO_SIZE; i++ ) { - if( sItem->USK != rating ) + // Reserved の団体は調べない + if( (alllist->IndexOf(i) >=0 ) && (ognlist->IndexOf(i) < 0) ) { - errmsg = "In Sheet, USK is illegal string."; - } - if( sItem->PEGI != rating ) - { - errmsg = "In Sheet, PEGI is illegal string."; - } - if( sItem->PEGIPRT != rating ) - { - errmsg = "In Sheet, PEGIPRT is illegal string."; - } - if( sItem->PEGIBBFC != rating ) - { - errmsg = "In Sheet, PEGIBBFC is illegal string."; - } - if( (sItem->CERO != undef) || - (sItem->ESRB != undef) || - (sItem->OFLC != undef) ) - { - errmsg = "In Sheet, Other Ogn is illegal string."; + DebugPrint( "{0,-10} {1,-20} {2,-20}", fItem->getOgnString(i), disable, sItem->ratings[i] ); + if( sItem->ratings[i] != disable ) + { + throw (gcnew System::Exception("In Sheet, " + fItem->getOgnString(i) + " is not a String for \"Disable\"")); + return; + } } } - else if( fItem->region == "AU" ) - { - if( sItem->OFLC != rating ) - { - errmsg = "In Sheet, OFLC is illegal string."; - } - if( (sItem->CERO != undef) || - (sItem->ESRB != undef) || - (sItem->USK != undef) || - (sItem->PEGI != undef) || - (sItem->PEGIPRT != undef) || - (sItem->PEGIBBFC != undef) ) - { - errmsg = "In Sheet, Other Ogn is illegal string."; - } - } - else if( fItem->region == "EUAU" ) - { - if( sItem->USK != rating ) - { - errmsg = "In Sheet, USK is illegal string."; - } - if( sItem->PEGI != rating ) - { - errmsg = "In Sheet, PEGI is illegal string."; - } - if( sItem->PEGIPRT != rating ) - { - errmsg = "In Sheet, PEGIPRT is illegal string."; - } - if( sItem->PEGIBBFC != rating ) - { - errmsg = "In Sheet, PEGIBBFC is illegal string."; - } - if( sItem->OFLC != rating ) - { - errmsg = "In Sheet, OFLC is illegal string."; - } - if( (sItem->CERO != undef) || - (sItem->ESRB != undef) ) - { - errmsg = "In Sheet, Other Ogn is illegal string."; - } - } - if( errmsg != nullptr ) - { - throw (gcnew System::Exception(errmsg)); - } + DebugPrint( "--------------------------------------------------------" ); return; } \ No newline at end of file diff --git a/build/tools/MasterEditor/MasterEditorTWLChecker/Release/config.xml b/build/tools/MasterEditor/MasterEditorTWLChecker/Release/config.xml index 430c3b9..b6fe459 100644 --- a/build/tools/MasterEditor/MasterEditorTWLChecker/Release/config.xml +++ b/build/tools/MasterEditor/MasterEditorTWLChecker/Release/config.xml @@ -79,11 +79,11 @@ - + - + 荳榊庄 - + diff --git a/build/tools/MasterEditor/MasterEditorTWLChecker/config.xml b/build/tools/MasterEditor/MasterEditorTWLChecker/config.xml index 430c3b9..b6fe459 100644 --- a/build/tools/MasterEditor/MasterEditorTWLChecker/config.xml +++ b/build/tools/MasterEditor/MasterEditorTWLChecker/config.xml @@ -79,11 +79,11 @@ - + - + 荳榊庄 - +