From b7922c0dcb5803f022ebc4f6641b10a7c17a6048 Mon Sep 17 00:00:00 2001 From: nishikawa_takeshi Date: Thu, 4 Dec 2008 02:36:05 +0000 Subject: [PATCH] =?UTF-8?q?split=5Ftad=20=E7=A7=BB=E6=A4=8D=E7=89=88:?= =?UTF-8?q?=E5=87=BA=E5=8A=9Bsrl=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB?= =?UTF-8?q?=E3=82=92=E6=8C=87=E5=AE=9A=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=ABAPI=E3=82=92=E5=A4=89=E6=9B=B4=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@57 7061adef-622a-194b-ae81-725974e89856 --- .../split_tad_console/split_tad_console.ncb | Bin 6630400 -> 6630400 bytes .../split_tad_console/split_tad_console.suo | Bin 17920 -> 17920 bytes .../split_tad_console/Debug/BuildLog.htm | Bin 12816 -> 9996 bytes .../split_tad_console/split_tad.cpp | 45 +++++++++++++----- .../split_tad_console/split_tad.h | 15 ++++-- .../split_tad_console/split_tad_console.cpp | 20 +++++++- .../split_tad_console/split_tad_util.cpp | 2 +- 7 files changed, 64 insertions(+), 18 deletions(-) diff --git a/build/tools/MasterEditor/split_tad_console/split_tad_console.ncb b/build/tools/MasterEditor/split_tad_console/split_tad_console.ncb index a81423b96f7fe035213c6fdabc06bcca456501dd..6c46eaac389becbcbc46bd031343ad4fe2f7f05a 100644 GIT binary patch delta 7338 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 Qd69fb1vF*TGOCQmT#24HSGClQ9N^!R~N_ zv7}>TWhiLQUc1fB=?B5r`h2jA35tGkB5ofy26HgKC~SU+Fd1w2|Hpf~p77(G`+v?k z&%MucQar4ShxNsAOV>)uO4c1%_we!Tb2oLBg2`LfEjx;!T9WCMbXm1>HE7A3_IR)f z>O4#mLoHZvlO;ip?q*Dl*L8jhVwEU?lR@@l#XqhR?1Pf(i&+n?yu!o zq}@J%=tH>@`M|D0v}B>D8?BVvNvN;L=(WB#JJt0rV?sK3-Ss_T8xxJ~&0j(IZGS4xcP6}~QRVnVK4PfOYJZZdCMXczJ` zOgZ_yuFj~JAy&z?_6F}VG16UAG=Z$6jgubGHqU99 z-$~rI%3fOJQCmTOA#b!7mVARArvmJxd6N<=3Mu)S_T`7 zrJm72j>|{L{1|)!J_VnF&jGGcas5m9ufTEewWpnc{}#wpPji|{XYp_joCg=cMKA*{ z0R!e{c5cw7*!!JjcdIVdWj6QKX-lLtA^BXiz?bK^gh3kcIMxAbt3d`(>ju8I!P7Q+ zS{y#>X}LvOzo!j(+Eehufb&$DO{E4Zn~r+oc6e^m0k!~cyaQ0L= zy}fXiWqKN4U=3gi*#ic^KJS^@LC_0c@-)`G2S&jAp4JBcD&X2tPaA|!^Vnz{1vaB` zB$&vnr#1#S0yN%gB~Shx8gcY;JU03>?(l4<1G01Ln7OefrwhD(Ho6R0#G{-Av>$-K z;Vs0>yW?pV{4apre_f>AMcfR22drh@A7B-@2dD+XeSo{(qaG|0|3Tad`1kM=s}OK_ cYS#8~^|S delta 1339 zcmYk6No*5I6o#vu>P})3u*XXv!Ld!oSy&w~*a9cS5CT{Tj1(e38o>w&&1r-n>`N>T zkOLQZ37#Mi`^l^wFO+MIB79FrR2q~VZ{ z{+QvBUK*dFsXf?C|J9`EnTqJ6NmFVw)-H`2L{2W{Z^V**NK+h1{zM-d`{V`M-PAYf zGCWsYc;U1&sfBcLaZqQQkGQyi`r*usWmuJLm=h}vw#eli3Ie99vs)L}P2K)`3LH{#23(kRGz^~vuVE;w*m%soR z1gueiBGPglgB!MR3;k^{1ct#Kput^G99}<9Qa(1 z%-9;=F3!{pmH^Jq*NZj2k^#VNwOu+3~pK7l0AzNwfxzpE6y1W6e&CcDiVNMOKe3OH2N* z=xc=bJ>ZS*2hQfBu(=%utZ_R6IPMr=EennVZd_w0j%&?v1Gcsn{UG4RWpv_D&K@i9 oH(TV3Gzx;?@2|A`up{8XSK2u2TJXr$D$qX%T%i~GRcDj@488Xhh5!Hn diff --git a/build/tools/MasterEditor/split_tad_console/split_tad_console/Debug/BuildLog.htm b/build/tools/MasterEditor/split_tad_console/split_tad_console/Debug/BuildLog.htm index 51909dfa6034ec6cc16daa54c713d513dea6adc5..78a81bd8e82fc905698565f0c6d2bddecaea042b 100644 GIT binary patch delta 336 zcmbP`(&M+mflbta!HB_K;CWgKRKbv zdJ1xrH*kwg{vgLUIZQrga-Xow<_rY|90qTms|dBz35%V^n`4x{n82>Zl(y%U-h55f z1Y)o=y6(;L>hBp9K>>mx#h}NK#E{5P!l1;UG`SIIikGGk)8rf40>JR$*c_v~g#`d7 C%SHGA delta 928 zcmZ`&%}*0S9DUpHm8B)JbPJYR)-@#H$GSkpV2lx34ko4;66Ml_&<}(J-CBxhqJkG< zj0a`B^Dk&79z1BgdgH*^Kfs$8Pey&S+fZfcVKSND$D235_vTgpb@|=(4s#qiOkoV; zT$7kU1}-upmYk3;I=0(-7qNjlRRSm~rlg*fxyzW@gt+HcqGe z&&ey@DXql~d#ORW6D-t&{TGKr(pi%&~7h+f!^8*Lr@-m+=)%%~ae>Op1dfp-*->#YY$Lv|90aj4g{fn}SfOw$y%?98#7I`e<2pfnu$3!Zq%P U?LN`KJ&MRf(kR1`3-*V$zo=leDgXcg diff --git a/build/tools/MasterEditor/split_tad_console/split_tad_console/split_tad.cpp b/build/tools/MasterEditor/split_tad_console/split_tad_console/split_tad.cpp index 7cdca9b..9f00e7a 100644 --- a/build/tools/MasterEditor/split_tad_console/split_tad_console/split_tad.cpp +++ b/build/tools/MasterEditor/split_tad_console/split_tad_console/split_tad.cpp @@ -23,19 +23,23 @@ const u8 commonKey[] = // ------------------------------------------------------ -// tad外し処理本体(split_tad_dev.pl の移植) +// tad外し処理本体 // ------------------------------------------------------ // // tad ファイルから srl(0番目のコンテンツ)を抜き出す +// (split_tad_dev.pl の移植) +// +// @arg [in] 入力 tad ファイル名 +// @arg [out] 出力 srl ファイル名 // // @ret 成功したとき0 失敗したら負の値 // -int splitTad( System::String ^filename ) +int splitTad( System::String ^tadpath, System::String ^srlpath ) { FILE *fp = NULL; const char *pchFilename = - (const char*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi( filename ).ToPointer(); + (const char*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi( tadpath ).ToPointer(); if( fopen_s( &fp, pchFilename, "rb" ) != NULL ) { @@ -84,23 +88,31 @@ int splitTad( System::String ^filename ) cli::array ^tmd = subStr( fp, tmdOffset, tmdSize ); cli::array ^content = subStr( fp, contentOffset, contentSize ); - //saveFile( "cert.bin", subStr( fp, certOffset, certSize ) ); + //saveFile( "cert.bin", subStr( fp, certOffset, certSize ) ); //saveFile( "crl.bin", subStr( fp, crlOffset, crlSize ) ); //saveFile( "ticket.bin", ticket ); //saveFile( "tmd.bin", tmd ); //saveFile( "meta.bin", subStr( fp, metaOffset, metaSize ) ); - cli::array ^titleKey = readTitleKey( ticket ); + cli::array ^title_key = readTitleKey( ticket ); cli::array ^rci = readContentsInfo( tmd ); - dumpBytes( titleKey ); + dumpBytes( title_key ); + // 通常は tad は srl (コンテンツ No.0) しか含まないが + // マルチコンテンツ を含む場合のために No.1 以降も別ファイルとして保存する + // srl 名が out.srl のとき out_1.bin out_2.bin ... として出力する + System::String ^srl_dir = System::IO::Path::GetDirectoryName( srlpath ); // 格納ディレクトリ名 + System::String ^srl_prefix = System::IO::Path::GetFileNameWithoutExtension( srlpath ); // 拡張子よりも前のファイル名 + System::String ^srl_ext = System::IO::Path::GetExtension( srlpath ); // 拡張子 + + int result = 0; u32 offset = 0; for each( rcContentsInfo ^ci in rci ) { u32 size = roundUp( (u32)ci->size, 16 ); cli::array ^enc_content_x = subStr( content, offset, size ); cli::array ^content_x_iv = resizeBytes( pack16( reverseEndian(ci->idx) ), 14 ); // ビッグエンディアンにしておく - cli::array ^dec_content_x = decCBC( titleKey, content_x_iv, enc_content_x ); + cli::array ^dec_content_x = decCBC( title_key, content_x_iv, enc_content_x ); cli::array ^dec_content = subStr( dec_content_x, 0, ci->size ); System::Security::Cryptography::SHA1 ^sha1 = gcnew System::Security::Cryptography::SHA1Managed(); cli::array ^hash = sha1->ComputeHash( dec_content ); @@ -115,13 +127,24 @@ int splitTad( System::String ^filename ) else { printf( "hash mismatch\n" ); + result = -1; // エラーとする 中断はせず最後まで作成 + } + + //saveFile( "content_" + ci->idx.ToString() + ".encrypted.bin", enc_content_x ); + //saveFile( "content_" + ci->idx.ToString() + ".bin", dec_content ); + if( ci->idx == 0 ) + { + saveFile( srlpath, dec_content ); // コンテンツ No.0 が srl にあたる + } + else + { + System::String ^tmppath = srl_dir + "\\" + srl_prefix + "_" + ci->idx.ToString() + ".bin"; + saveFile( tmppath, dec_content ); } - saveFile( "content_" + ci->idx.ToString() + ".encrypted.bin", enc_content_x ); - saveFile( "content_" + ci->idx.ToString() + ".bin", dec_content ); offset += roundUp( size, 64 ); } fclose( fp ); - return 0; + return result; } // ------------------------------------------------------ @@ -149,7 +172,7 @@ cli::array^ readTitleKey( cli::array ^ticket ) } catch (System::Exception ^ e) { - System::Console::WriteLine("Error: {0}", e->Message); + System::Console::WriteLine("Exception in readTitleKey(): {0}", e->Message); } return plain; } diff --git a/build/tools/MasterEditor/split_tad_console/split_tad_console/split_tad.h b/build/tools/MasterEditor/split_tad_console/split_tad_console/split_tad.h index 9e21fe2..b08bdb0 100644 --- a/build/tools/MasterEditor/split_tad_console/split_tad_console/split_tad.h +++ b/build/tools/MasterEditor/split_tad_console/split_tad_console/split_tad.h @@ -9,13 +9,20 @@ // APIs // ------------------------------------------------------ +// // tad ファイルから srl(0番目のコンテンツ)を抜き出す // (split_tad_dev.pl の移植) -int splitTad( System::String ^filename ); +// +// @arg [in] 入力 tad ファイルのパス +// @arg [out] 出力 srl ファイルのパス +// +// @ret 成功したとき0 失敗したら負の値 +// +int splitTad( System::String ^tadpath, System::String ^srlpath ); // ------------------------------------------------------ -// 内部処理用の構造体(宣言だけできないのでヘッダに置く) +// 内部処理用の構造体(プロトタイプ宣言できないのでヘッダに置く) // ------------------------------------------------------ // コンテンツ情報の構造体 @@ -30,11 +37,11 @@ private: public: rcContentsInfo() { - this->h_cid = gcnew System::UInt32; + this->h_cid = gcnew System::UInt32; // 解放の必要なし this->h_idx = gcnew System::UInt16; this->h_type = gcnew System::UInt16; this->h_size = gcnew System::UInt32; - this->h_hash = gcnew cli::array(20); // 固定長 : 解放の必要なし + this->h_hash = gcnew cli::array(20); // 固定長 } public: property System::UInt32 cid diff --git a/build/tools/MasterEditor/split_tad_console/split_tad_console/split_tad_console.cpp b/build/tools/MasterEditor/split_tad_console/split_tad_console/split_tad_console.cpp index 943bff7..72b118d 100644 --- a/build/tools/MasterEditor/split_tad_console/split_tad_console/split_tad_console.cpp +++ b/build/tools/MasterEditor/split_tad_console/split_tad_console/split_tad_console.cpp @@ -10,8 +10,24 @@ using namespace System; int main(array ^args) { - splitTad( args[0] ); + if( args->Length < 1 ) + { + printf( "argument error\n" ); + return -1; + } + System::String ^tad = args[0]; + System::String ^srl = (args->Length >=2)?args[1]:"out.srl"; - return 0; + int result = splitTad( tad, srl ); + if( result < 0 ) + { + printf( "\nerror\n" ); + } + else + { + printf( "\nsucceeded\n" ); + } + + return result; } diff --git a/build/tools/MasterEditor/split_tad_console/split_tad_console/split_tad_util.cpp b/build/tools/MasterEditor/split_tad_console/split_tad_console/split_tad_util.cpp index 3b7ff04..7724f4f 100644 --- a/build/tools/MasterEditor/split_tad_console/split_tad_console/split_tad_util.cpp +++ b/build/tools/MasterEditor/split_tad_console/split_tad_console/split_tad_util.cpp @@ -56,7 +56,7 @@ int saveFile( System::String ^filename, cli::array ^bytes ) (const char*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi( filename ).ToPointer(); // ファイルにROMヘッダをライト - if( fopen_s( &fp, pchFilename, "wb" ) != NULL ) // 上書き・バイナリ + if( fopen_s( &fp, pchFilename, "wb" ) != NULL ) // 同名ファイルを削除して新規にライト・バイナリ { return -1; }