diff --git a/build/tools/sctools/common/src/my_fs_util.c b/build/tools/sctools/common/src/my_fs_util.c index 435468b..edebc61 100644 --- a/build/tools/sctools/common/src/my_fs_util.c +++ b/build/tools/sctools/common/src/my_fs_util.c @@ -1081,7 +1081,6 @@ static BOOL CheckSystemApp(char path[]) } } -//BOOL GetUserAppTitleList( MY_DIR_ENTRY_LIST *head, u64 **pBuffer, int *size, char *log_file_name ) BOOL GetUserAppTitleList( MY_DIR_ENTRY_LIST *head, MY_USER_APP_TID **pBuffer, int *size, char *log_file_name ) { int i; @@ -2031,7 +2030,7 @@ BOOL MydataSaveEncrypt(const char *path, void *pData, int size, FSFile *log_fd) } -BOOL TitleIDLoad(const char *path, MY_USER_APP_TID **pBuffer, int *count, char *log_file_name) +BOOL UserTitleIDLoad(const char *path, MY_USER_APP_TID **pBuffer, int *count, char *log_file_name) { FSFile f; BOOL bSuccess; @@ -2080,6 +2079,7 @@ BOOL TitleIDLoad(const char *path, MY_USER_APP_TID **pBuffer, int *count, char * if( (id_count < 0 ) || (128 < id_count) ) { + /* バッファオーバーフロー防止 */ ret_flag = FALSE; miya_log_fprintf(log_fd, "%s Failed suspicous data id_count=%d\n",__FUNCTION__, id_count ); goto function_end; @@ -2126,7 +2126,7 @@ BOOL TitleIDLoad(const char *path, MY_USER_APP_TID **pBuffer, int *count, char * return ret_flag; } -BOOL TitleIDSave(const char *path, MY_USER_APP_TID *pData, int count, char *log_file_name ) +BOOL UserTitleIDSave(const char *path, MY_USER_APP_TID *pData, int count, char *log_file_name ) { FSFile f; BOOL bSuccess; @@ -2259,7 +2259,7 @@ BOOL TitleIDSave(const char *path, MY_USER_APP_TID *pData, int count, char *log_ } -BOOL TitleIDLoadETicketOnly(const char *path, MY_USER_ETICKET_TID **pBuffer, int *count, char *log_file_name) +BOOL UserTitleIDLoadETicketOnly(const char *path, MY_USER_ETICKET_TID **pBuffer, int *count, char *log_file_name) { FSFile f; BOOL bSuccess; @@ -2347,7 +2347,7 @@ BOOL TitleIDLoadETicketOnly(const char *path, MY_USER_ETICKET_TID **pBuffer, int return ret_flag; } -BOOL TitleIDSaveETicketOnly(const char *path, MY_USER_ETICKET_TID *pData, int count, char *log_file_name ) +BOOL UserTitleIDSaveETicketOnly(const char *path, MY_USER_ETICKET_TID *pData, int count, char *log_file_name ) { FSFile f; BOOL bSuccess; diff --git a/build/tools/sctools/common/src/my_fs_util.h b/build/tools/sctools/common/src/my_fs_util.h index 273549d..fd0422e 100644 --- a/build/tools/sctools/common/src/my_fs_util.h +++ b/build/tools/sctools/common/src/my_fs_util.h @@ -22,7 +22,8 @@ typedef struct { u64 tid; int is_personalized; int version; - BOOL install_success_flag; + int common_and_download; + BOOL install_success_flag; /* バックアップしたセーブデータを復活してやるかどうか。 */ } MY_USER_APP_TID; typedef struct { @@ -76,13 +77,11 @@ BOOL MydataLoadDecrypt(const char *path, void *pBuffer, int size, FSFile *log_fd BOOL MydataSaveEncrypt(const char *path, void *pData, int size, FSFile *log_fd); -// BOOL TitleIDSave(const char *path, u64 *pData, int count, char *log_file_name); -// BOOL TitleIDLoad(const char *path, u64 **pBuffer, int *count, char *log_file_name); -BOOL TitleIDSave(const char *path, MY_USER_APP_TID *pData, int count, char *log_file_name); -BOOL TitleIDLoad(const char *path, MY_USER_APP_TID **pBuffer, int *count, char *log_file_name); +BOOL UserTitleIDSave(const char *path, MY_USER_APP_TID *pData, int count, char *log_file_name); +BOOL UserTitleIDLoad(const char *path, MY_USER_APP_TID **pBuffer, int *count, char *log_file_name); -BOOL TitleIDSaveETicketOnly(const char *path, MY_USER_ETICKET_TID *pData, int count, char *log_file_name ); -BOOL TitleIDLoadETicketOnly(const char *path, MY_USER_ETICKET_TID **pBuffer, int *count, char *log_file_name); +BOOL UserTitleIDSaveETicketOnly(const char *path, MY_USER_ETICKET_TID *pData, int count, char *log_file_name ); +BOOL UserTitleIDLoadETicketOnly(const char *path, MY_USER_ETICKET_TID **pBuffer, int *count, char *log_file_name); BOOL CopyFile(const char *dst_path, const char *src_path, FSFile *log_fd ); diff --git a/build/tools/sctools/common/src/mydata.h b/build/tools/sctools/common/src/mydata.h index fcb5440..1067cf3 100644 --- a/build/tools/sctools/common/src/mydata.h +++ b/build/tools/sctools/common/src/mydata.h @@ -3,7 +3,7 @@ #define MY_DATA_VERSION_MAJOR 1 -#define MY_DATA_VERSION_MINOR 8 +#define MY_DATA_VERSION_MINOR 9 typedef struct { u8 version_major; @@ -18,7 +18,8 @@ typedef struct { BOOL wireless_lan_param_flag; BOOL user_settings_flag; BOOL shop_record_flag; - int num_of_user_download_app; + // int num_of_user_download_app; + int num_of_user_app; int num_of_user_pre_installed_app; int num_of_user_pre_installed_eticket_only; int num_of_app_save_data; diff --git a/build/tools/sctools/common/src/myfilename.c b/build/tools/sctools/common/src/myfilename.c index 327a02f..25244e7 100644 --- a/build/tools/sctools/common/src/myfilename.c +++ b/build/tools/sctools/common/src/myfilename.c @@ -196,49 +196,49 @@ char *MyFile_GetSaveDataListLogFileName(void) return path; } -char *MyFile_GetDownloadTitleIDLogFileName(void) +char *MyFile_GetUserTitleIDLogFileName(void) { STD_StrCpy( path_log , path_base ); STD_StrCat( path_log , MY_FILE_NAME_DOWNLOAD_TITLE_ID_LOG ); return path_log; } -char *MyFile_GetDownloadTitleIDRestoreLogFileName(void) +char *MyFile_GetUserTitleIDRestoreLogFileName(void) { STD_StrCpy( path_log , path_base ); STD_StrCat( path_log , MY_FILE_NAME_DOWNLOAD_TITLE_ID_RESTORE_LOG ); return path_log; } -char *MyFile_GetDownloadTitleIDSaveLogFileName(void) +char *MyFile_GetUserTitleIDSaveLogFileName(void) { STD_StrCpy( path_log , path_base ); STD_StrCat( path_log , MY_FILE_NAME_DOWNLOAD_TITLE_ID_SAVE_LOG ); return path_log; } -char *MyFile_GetDownloadTitleIDFileName(void) +char *MyFile_GetUserTitleIDFileName(void) { STD_StrCpy( path , path_base ); STD_StrCat( path , MY_FILE_NAME_DOWNLOAD_TITLE_ID_DATA ); return path; } -char *MyFile_GetDownloadTitleIDTicketOnlyFileName(void) +char *MyFile_GetUserTitleIDTicketOnlyFileName(void) { STD_StrCpy( path , path_base ); STD_StrCat( path , MY_FILE_NAME_DOWNLOAD_TITLE_ID_TICKET_DATA ); return path; } -char *MyFile_GetDownloadTitleIDTicketOnlyRestoreLogFileName(void) +char *MyFile_GetUserTitleIDTicketOnlyRestoreLogFileName(void) { STD_StrCpy( path_log , path_base ); STD_StrCat( path_log , MY_FILE_NAME_DOWNLOAD_TITLE_ID_TICKET_RESTORE_LOG ); return path_log; } -char *MyFile_GetDownloadTitleIDTicketOnlySaveLogFileName(void) +char *MyFile_GetUserTitleIDTicketOnlySaveLogFileName(void) { STD_StrCpy( path_log , path_base ); STD_StrCat( path_log , MY_FILE_NAME_DOWNLOAD_TITLE_ID_TICKET_SAVE_LOG ); diff --git a/build/tools/sctools/common/src/myfilename.h b/build/tools/sctools/common/src/myfilename.h index ef17c0f..2289d8d 100644 --- a/build/tools/sctools/common/src/myfilename.h +++ b/build/tools/sctools/common/src/myfilename.h @@ -94,14 +94,14 @@ char *MyFile_GetSaveDataListLogFileName(void); char *MyFile_GetSaveDataRestoreLogFileName(void); char *MyFile_GetSaveDataSaveLogFileName(void); -char *MyFile_GetDownloadTitleIDLogFileName(void); -char *MyFile_GetDownloadTitleIDFileName(void); -char *MyFile_GetDownloadTitleIDRestoreLogFileName(void); -char *MyFile_GetDownloadTitleIDSaveLogFileName(void); +char *MyFile_GetUserTitleIDLogFileName(void); +char *MyFile_GetUserTitleIDFileName(void); +char *MyFile_GetUserTitleIDRestoreLogFileName(void); +char *MyFile_GetUserTitleIDSaveLogFileName(void); -char *MyFile_GetDownloadTitleIDTicketOnlyFileName(void); -char *MyFile_GetDownloadTitleIDTicketOnlySaveLogFileName(void); -char *MyFile_GetDownloadTitleIDTicketOnlyRestoreLogFileName(void); +char *MyFile_GetUserTitleIDTicketOnlyFileName(void); +char *MyFile_GetUserTitleIDTicketOnlySaveLogFileName(void); +char *MyFile_GetUserTitleIDTicketOnlyRestoreLogFileName(void); char *MyFile_GetGlobalInformationFileName(void); char *MyFile_GetGlobalInformationRestoreFileName(void); diff --git a/build/tools/sctools/common/src/pre_install.c b/build/tools/sctools/common/src/pre_install.c index 402dbf1..46cc8bd 100644 --- a/build/tools/sctools/common/src/pre_install.c +++ b/build/tools/sctools/common/src/pre_install.c @@ -27,8 +27,10 @@ static PRE_INSTALL_FILE *pre_install_file_list = NULL; #if 1 //char *pre_install_search_tid(u64 tid, FSFile *log_fd); -static BOOL pre_install_discard_list(void); static void pre_install_print_list(FSFile *log_fd); +static BOOL pre_install_discard_list(void); +static BOOL pre_install_load_file(char *path, FSFile *log_fd, BOOL encrypt_flag); + #endif @@ -201,8 +203,13 @@ static char *pre_install_search_tid(u64 tid, FSFile *log_fd, BOOL *is_in_sd) // OS_TPrintf("%s\n",__FUNCTION__); // pre_install_print_list(log_fd); + if( pre_install_file_list == NULL) { + goto end; + } + latest_list = NULL; + for( temp_list = pre_install_file_list ; temp_list != NULL ; temp_list = temp_list->next ) { if( temp_list->tid == tid ) { if( latest_list == NULL ) { @@ -234,7 +241,7 @@ static char *pre_install_search_tid(u64 tid, FSFile *log_fd, BOOL *is_in_sd) return latest_list->file_name; } - + end: miya_log_fprintf(log_fd,"\n%s:No entry\ntid 0x%08x%08x\n",__FUNCTION__, (u32)(tid >> 32) , (u32)(tid & 0xffffffff)); @@ -262,11 +269,17 @@ static void pre_install_print_list(FSFile *log_fd) PRE_INSTALL_FILE *temp_list; u64 tid; + if( pre_install_file_list == NULL ) { + miya_log_fprintf(log_fd,"no tad file entry\n"); + return; + } + for( temp_list = pre_install_file_list ; temp_list != NULL ; temp_list = temp_list->next ) { tid = temp_list->tid; miya_log_fprintf(log_fd,"tad file entry tid=0x%08x%08x %s\n", (u32)(tid >> 32) , (u32)(tid & 0xffffffff), temp_list->file_name ); } + } static int ReadLine(FSFile *f, char *buf, int buf_size) @@ -912,7 +925,9 @@ BOOL pre_install_process( FSFile *log_fd, MY_USER_APP_TID *title_id_buf_ptr, int pTitleIds[i].is_personalized = 1 -> common (pre installed) pTitleIds[i].is_personalized = 2 -> personalized */ - if( title_id_buf_ptr[i].is_personalized == 1 /* commonの場合 */ ) { + if( (title_id_buf_ptr[i].is_personalized == 1 /* commonの場合 */) && + (title_id_buf_ptr[i].common_and_download == 0 ) ) { + /* commonだけどユーザーが最新バージョンを持ってる場合はダウンロードに切り替えてる。 */ /* 0x00030004484E474A "rom:/tads/TWL-KGUJ-v257.tad.out" 0x000300044B32444A "rom:/tads/TWL-K2DJ-v0.tad.out" @@ -968,3 +983,119 @@ BOOL pre_install_process( FSFile *log_fd, MY_USER_APP_TID *title_id_buf_ptr, int (void)pre_install_discard_list(); return ret_flag; } + + + +int pre_install_check_tad_version(FSFile *log_fd, MY_USER_APP_TID *title_id_buf_ptr, int title_id_count, + BOOL development_version_flag ) +{ + int ret_count = 0; + BOOL is_in_sd = FALSE; + int i; + u64 tid; + int version; + // char game_code_buf[5]; + PRE_INSTALL_FILE *temp_list; + PRE_INSTALL_FILE *latest_list; + char *tad_file_name; + BOOL ret_flag = TRUE; + + + miya_log_fprintf(log_fd, "%s start\n",__FUNCTION__); + + if( development_version_flag ) { + (void)pre_install_load_file(PRE_INSTALL_TABLE_DEV_FILE_SD, log_fd, TRUE); + (void)pre_install_load_file(PRE_INSTALL_TABLE_DEV_FILE_NAND, log_fd, FALSE); + } + else { + (void)pre_install_load_file(PRE_INSTALL_TABLE_FILE_SD, log_fd, TRUE); + (void)pre_install_load_file(PRE_INSTALL_TABLE_FILE_NAND, log_fd, FALSE); + } + + if( pre_install_file_list == NULL ) { + goto end; + } + + for( i = 0 ; i < title_id_count ; i++ ) { + /* + pTitleIds[i].is_personalized = 1 -> common (pre installed) + pTitleIds[i].is_personalized = 2 -> personalized + */ + if( title_id_buf_ptr[i].is_personalized == 1 /* commonの場合 */ ) { + tid = title_id_buf_ptr[i].tid; + version = title_id_buf_ptr[i].version; + + latest_list = NULL; + for( temp_list = pre_install_file_list ; temp_list != NULL ; temp_list = temp_list->next ) { + if( temp_list->tid == tid ) { + if( latest_list == NULL ) { + latest_list = temp_list; + } + else { + if( latest_list->version < temp_list->version ) { + latest_list = temp_list; + } + } + } + } + if( latest_list != NULL ) { + + /* カードやSDに持ってるTADよりユーザーの方が新しいのを持ってた場合 */ + if( version > latest_list->version ) { + title_id_buf_ptr[i].common_and_download = 1; + miya_log_fprintf(log_fd," Pre->Dwn tid=0x%08x%08x usr.ver=0x%04x tad.ver=0x%04x\n", + (u32)(tid >> 32) , (u32)(tid & 0xffffffff), version, latest_list->version ); + + mprintf(" Pre->Dwn tid=0x%08x%08x usr.ver=0x%04x tad.ver=0x%04x ", + (u32)(tid >> 32) , (u32)(tid & 0xffffffff), version, latest_list->version ); + + ret_flag = FALSE; +#if 1 /* miya 20091021 */ +#define ONLY_TICKET 1 + + /* とりあえずEチケットだけインストール? */ + tad_file_name = latest_list->file_name; + if( tad_file_name ) { + if( !STD_StrNCmp( tad_file_name, "sdmc:" , STD_StrLen("sdmc:")) ) { +#ifdef ONLY_TICKET + ret_flag = my_NAM_ImportTadTicketOnly_sign( tad_file_name ); +#else + ret_flag = myImportTad_sign( tad_file_name , 0, log_fd); +#endif + } + else { +#ifdef ONLY_TICKET + ret_flag = my_NAM_ImportTadTicketOnly( tad_file_name ); +#else + ret_flag = myImportTad( tad_file_name , 0, log_fd); +#endif + } + } +#endif + if( ret_flag == TRUE ) { + m_set_palette(tc[0], M_TEXT_COLOR_GREEN ); /* green */ + mprintf("OK.\n"); + m_set_palette(tc[0], M_TEXT_COLOR_WHITE ); + miya_log_fprintf(log_fd, "OK.\n"); + } + else { + m_set_palette(tc[0], M_TEXT_COLOR_RED ); /* green */ + mprintf("NG.\n"); + m_set_palette(tc[0], M_TEXT_COLOR_WHITE ); + miya_log_fprintf(log_fd, "NG.\n"); + } + ret_count++; + } + } + else { + } + } + else { + /* personalized e-ticketのやつ */ + } + } + (void)pre_install_discard_list(); + end: + miya_log_fprintf(log_fd, "%s end: num=%d\n",__FUNCTION__,ret_count); + return ret_count; +} diff --git a/build/tools/sctools/common/src/pre_install.h b/build/tools/sctools/common/src/pre_install.h index 2f0908d..3d35405 100644 --- a/build/tools/sctools/common/src/pre_install.h +++ b/build/tools/sctools/common/src/pre_install.h @@ -25,6 +25,10 @@ BOOL pre_install_get_version(u64 tid, u16 *version); BOOL pre_install_debug(FSFile *log_fd, BOOL development_version_flag ); BOOL pre_install_command(FSFile *log_fd, u64 *tid_array, int tid_count, int command, BOOL development_version_flag ); +int pre_install_check_tad_version(FSFile *log_fd, MY_USER_APP_TID *title_id_buf_ptr, + int title_id_count, BOOL development_version_flag ); + + #ifdef __cplusplus } #endif diff --git a/build/tools/sctools/copy_dst/src/hatamotolib.cpp b/build/tools/sctools/copy_dst/src/hatamotolib.cpp index 3928f72..81dd6fc 100644 --- a/build/tools/sctools/copy_dst/src/hatamotolib.cpp +++ b/build/tools/sctools/copy_dst/src/hatamotolib.cpp @@ -301,7 +301,11 @@ static void Dummy_WWW_AddJSPlugin() { } -static BOOL LoadCert(void** ppCert, u32* pSize, const char* name) + +static void* miya_pCert[2]; +static u32 miya_certSize[2]; + +static BOOL PreLoadCert(const char* name, int no) { FSFile f; BOOL bSuccess; @@ -309,6 +313,62 @@ static BOOL LoadCert(void** ppCert, u32* pSize, const char* name) s32 result; char path[64]; + FS_InitFile(&f); + + STD_TSNPrintf(path, sizeof(path), "verdata:/%s", name); + + bSuccess = FS_OpenFile(&f, path); + if( ! bSuccess ) + { + miya_log_fprintf(log_fd, "%s Cannot open %s\n", __FUNCTION__, path); + mprintf("%s Cannot open %s\n", __FUNCTION__,path); + return FALSE; + } + + miya_certSize[no] = FS_GetFileLength(&f); + miya_pCert[no] = OS_Alloc(miya_certSize[no]); + if ( miya_pCert[no] == NULL ) + { + miya_log_fprintf(log_fd, "%s Cannot allocate work memroy\n",__FUNCTION__); + mprintf("%s Cannot allocate work memroy \n",__FUNCTION__); + return FALSE; + } + + readSize = FS_ReadFile(&f, miya_pCert[no], static_cast(miya_certSize[no])); + if( readSize != miya_certSize[no] ) + { + miya_log_fprintf(log_fd, "%s fail to read file\n", __FUNCTION__); + mprintf("%s fail to read file\n",__FUNCTION__); + return FALSE; + } + + FS_CloseFile(&f); + + + result = NA_DecodeVersionData(miya_pCert[no], miya_certSize[no], miya_pCert[no], miya_certSize[no]); + if( result <= 0 ) + { + miya_log_fprintf(log_fd, "%s fail to decode version info %d\n",__FUNCTION__,result); + mprintf("%s fail to decode version info %d\n", __FUNCTION__,result); + return FALSE; + } + + // *ppCert = pCert; + // *pSize = certSize; + return TRUE; +} + + +static BOOL LoadCert(void** ppCert, u32* pSize, const char* name, int no) +{ +#pragma unused(name) +#if 0 + FSFile f; + BOOL bSuccess; + s32 readSize; + s32 result; + char path[64]; + void* pCert; u32 certSize; @@ -344,42 +404,6 @@ static BOOL LoadCert(void** ppCert, u32* pSize, const char* name) FS_CloseFile(&f); - // LoadCert(&pClientCert, &clientCertSize, ".twl-nup-cert.der"); - // LoadCert(&pClientKey, &clientKeySize, ".twl-nup-prvkey.der"); - - // static inline s32 NA_DecodeVersionData(const void* src, u32 srcSize, void* dst, u32 dstSize) - // { return OS_IsRunOnTwl() ? NAi_DecodeVersionData(src, srcSize, dst, dstSize): -4; } - - /* - s32 NAi_DecodeVersionData(const void* src, u32 srcSize, void* dst, u32 dstSize) - { - u32 decryptedSize; - AESResult result; - - if ( !SEAi_IsHWInitialized() ) - { - return -1; - } - - decryptedSize = srcSize - AES_SIGN_HEADER_SIZE; - - if ( src == NULL || dst == NULL || decryptedSize > dstSize ) - { - return -2; - } - - SEA_UseWeakKeyTemporary(SEA_WEAK_KEY_VERSION); - result = SEA_Decrypt(src, srcSize, dst); - - if( result != AES_RESULT_SUCCESS ) - { - return -3; - } - - return (s32)decryptedSize; - } - */ - result = NA_DecodeVersionData(pCert, certSize, pCert, certSize); if( result <= 0 ) { @@ -387,12 +411,18 @@ static BOOL LoadCert(void** ppCert, u32* pSize, const char* name) mprintf("%s fail to decode version info %d\n", __FUNCTION__,result); return FALSE; } - - *ppCert = pCert; - *pSize = certSize; +#endif + *ppCert = miya_pCert[no]; + *pSize = miya_certSize[no]; return TRUE; } +BOOL SetupEC_pre(void) +{ + PreLoadCert(".twl-nup-cert.der", 0); + PreLoadCert(".twl-nup-prvkey.der", 1); + return TRUE; +} BOOL SetupEC(void) { @@ -419,8 +449,11 @@ BOOL SetupEC(void) // logLevel = EC_LOG_FINE; logLevel = EC_LOG_WARN; - LoadCert(&pClientCert, &clientCertSize, ".twl-nup-cert.der"); - LoadCert(&pClientKey, &clientKeySize, ".twl-nup-prvkey.der"); + // ここだけ先にできへんか? + // SetupEC_pre(); + + LoadCert(&pClientCert, &clientCertSize, ".twl-nup-cert.der", 0); + LoadCert(&pClientKey, &clientKeySize, ".twl-nup-prvkey.der",1); GetDeviceCode(deviceCode, sizeof(deviceCode)); ECNameValue initArgs[] = @@ -823,12 +856,13 @@ static BOOL DownloadTitles(MY_USER_APP_TID* pTitleIds, u32 numTitleIds) for( u32 i = 0; i < numTitleIds; i++ ) { // tid = pTitleIds[i]; - if( pTitleIds[i].is_personalized == 1 ) { + if( (pTitleIds[i].is_personalized == 1) && (pTitleIds[i].common_and_download == 0) ) { /* personalized ticketのときは何もしない、というかプリンストールもの pTitleIds[i].is_personalized = 1 -> common pTitleIds[i].is_personalized = 2 -> personalized */ + /* でもpTitleIds[i].common_and_download == 1 のときはダウンロードする。 */ } else { tid = pTitleIds[i].tid; diff --git a/build/tools/sctools/copy_dst/src/hatamotolib.h b/build/tools/sctools/copy_dst/src/hatamotolib.h index 6a91e80..38b05a9 100644 --- a/build/tools/sctools/copy_dst/src/hatamotolib.h +++ b/build/tools/sctools/copy_dst/src/hatamotolib.h @@ -27,7 +27,7 @@ void SetupNSSL(void); BOOL SetupNHTTP(void); BOOL SetupEC(void); void DeleteECDirectory(void); - +BOOL SetupEC_pre(void); // void SetupTitlesDataFile(const NAMTitleId* pTitleIds, u32 numTitleIds); void SetupTitlesDataFile(const MY_USER_APP_TID * pTitleIds, u32 numTitleIds); diff --git a/build/tools/sctools/copy_dst/src/main.c b/build/tools/sctools/copy_dst/src/main.c index 59687df..ffc511f 100644 --- a/build/tools/sctools/copy_dst/src/main.c +++ b/build/tools/sctools/copy_dst/src/main.c @@ -59,6 +59,8 @@ #include "pre_install.h" +#include + // #define PRE_INSTALL 1 //================================================================================ @@ -659,74 +661,94 @@ static BOOL RestoreFromSDCard7(void) log_fd = hatamotolib_log_start( MyFile_GetEcDownloadLogFileName() ); - if( mydata.num_of_user_download_app > 0 ) { - if( mydata.num_of_user_download_app > 0 ) { - miya_log_fprintf(log_fd,"User title list loading\n"); - mprintf("User title list load "); - if( TRUE == TitleIDLoad( MyFile_GetDownloadTitleIDFileName(), &title_id_buf_ptr, - &title_id_count, MyFile_GetDownloadTitleIDRestoreLogFileName()) ) { + if( mydata.num_of_user_app > 0 ) { + miya_log_fprintf(log_fd,"User title list loading\n"); + mprintf("User title list load "); + if( TRUE == UserTitleIDLoad( MyFile_GetUserTitleIDFileName(), &title_id_buf_ptr, + &title_id_count, MyFile_GetUserTitleIDRestoreLogFileName()) ) { + + m_set_palette(tc[0], M_TEXT_COLOR_GREEN ); /* green */ + mprintf("OK.\n"); + m_set_palette(tc[0], M_TEXT_COLOR_WHITE ); + for( i = 0; i < title_id_count ; i++ ) { + /* + インストール成功フラグの初期化 + とりあえず全部失敗状態にする。 + */ + title_id_buf_ptr[i].install_success_flag = FALSE; + tid = title_id_buf_ptr[i].tid; + is_personalized = title_id_buf_ptr[i].is_personalized; - m_set_palette(tc[0], M_TEXT_COLOR_GREEN ); /* green */ - mprintf("OK.\n"); - m_set_palette(tc[0], M_TEXT_COLOR_WHITE ); - for( i = 0; i < title_id_count ; i++ ) { - /* - インストール成功フラグの初期化 - とりあえず全部失敗状態にする。 - */ - title_id_buf_ptr[i].install_success_flag = FALSE; - tid = title_id_buf_ptr[i].tid; - is_personalized = title_id_buf_ptr[i].is_personalized; - - (void)my_fs_Tid_To_GameCode(tid, game_code_buf); - mprintf(" id %08X %08X [%s] ", (u32)(tid >> 32), (u32)tid, game_code_buf); - if( is_personalized == 1 ) { - mprintf("Pre\n"); - } - else { - mprintf("Dwn\n"); - } - - miya_log_fprintf(log_fd," id %08X %08X [%s] %c\n", (u32)(tid >> 32), (u32)tid, game_code_buf, - (is_personalized == 1)? 'P':'D'); + (void)my_fs_Tid_To_GameCode(tid, game_code_buf); + mprintf(" id %08X %08X [%s] ", (u32)(tid >> 32), (u32)tid, game_code_buf); + if( is_personalized == 1 ) { + mprintf("Pre\n"); /* プリインストール物 */ } - } - else { - ret_flag = FALSE; - m_set_palette(tc[0], M_TEXT_COLOR_RED ); - mprintf("NG.\n"); - m_set_palette(tc[0], M_TEXT_COLOR_WHITE ); + else { + mprintf("Dwn\n"); /* ダウンロード物 */ + } + + miya_log_fprintf(log_fd," id %08X %08X [%s] %c\n", (u32)(tid >> 32), (u32)tid, game_code_buf, + (is_personalized == 1)? 'P':'D'); } } + else { + ret_flag = FALSE; + m_set_palette(tc[0], M_TEXT_COLOR_RED ); + mprintf("NG.\n"); + m_set_palette(tc[0], M_TEXT_COLOR_WHITE ); + } } - else if( mydata.num_of_user_download_app == 0 ) { - miya_log_fprintf(log_fd,"Original device has no user download app.\n"); + else if( mydata.num_of_user_app == 0 ) { + miya_log_fprintf(log_fd,"Original device has no user app.\n"); mprintf("Original device has no user download app.\n"); } else { - miya_log_fprintf(log_fd,"Original user download app. list saving failed\n"); - mprintf("Original user download app. list saving failed\n"); + miya_log_fprintf(log_fd,"Original user app. list saving failed\n"); + mprintf("Original user app. list saving failed\n"); } - /* - miya 2009/5/8 + /* miya 2009/5/8 ここで書き込み側に入ってるプリンインストールものを全部消す! - もっと前でもいい - */ + もっと前でもいい */ + if( my_fs_get_print_debug_flag() == FALSE ) { (void)pre_install_Cleanup_User_Titles( log_fd ); } + + /* ECDownload の前準備だけど、プリンストール(インポート)の前にやっておく必要がある。*/ + // 必須:タイトル ID の偽装 + SetupShopTitleId(); /* エラーはない */ + miya_log_fprintf(log_fd,"SetupShopTitleId done.\n"); + + // ?:ユーザ設定がされていないと接続できないので適当に設定 + // SetupUserInfo(); + // 必須:バージョンデータのマウント + if( FALSE == SetupVerData() ) { + miya_log_fprintf(log_fd, "%s failed SetupVerData\n", __FUNCTION__); + mprintf("%s failed SetupVerData\n", __FUNCTION__); + ret_flag = FALSE; + goto end_log_e; + } + + /* + 本来、EC downloadの後にNAM_ImportをやらないとLoadCertのSEA_Decryptでこける。 + 理由はAESエンジンのスロットをNAM_Importでつぶしちゃうので、 + ここでCertの復号化だけやっとく。 + */ + (void)SetupEC_pre(); + /* ECDownload の前準備,終わり。*/ + + + if( no_network_flag == TRUE ) { miya_log_fprintf(log_fd,"no network flag ON\n"); goto pre_install_label; } - /* - EC downloadの後にNAM_ImportをやらないとLoadCertのSEA_Decryptでこける。 - 理由はAESエンジンのスロットをNAM_Importでつぶしちゃうから。 - */ + if( mydata.shop_record_flag == FALSE ) { /* ネットワークにつながなくていいか? */ @@ -734,6 +756,16 @@ static BOOL RestoreFromSDCard7(void) mprintf(" (--no shop record--)\n"); } else { + + + /* miya 2009/10/12 */ + /* TitleIDLoadの後、title_id_buf_ptr, title_id_countに書き込む */ + /* title_id_buf_ptr[i].common_and_download == 1 のときはダウンロードするように。 */ + miya_log_fprintf(log_fd,"Internal data version check.\n"); + mprintf("Internal data version check.\n"); + (void)pre_install_check_tad_version(log_fd, title_id_buf_ptr, title_id_count, development_console_flag ); + + miya_log_fprintf(log_fd,"EC download\n"); mprintf("EC download\n"); @@ -745,23 +777,6 @@ static BOOL RestoreFromSDCard7(void) mprintf("OK.\n"); m_set_palette(tc[0], M_TEXT_COLOR_WHITE ); - /* nand:/ticketはチケット同期でダウンロード */ - // 不要:デバイス情報の表示 - // PrintDeviceInfo(); - // setup - // 必須:タイトル ID の偽装 - SetupShopTitleId(); /* エラーはない */ - miya_log_fprintf(log_fd,"SetupShopTitleId\n"); - - // ?:ユーザ設定がされていないと接続できないので適当に設定 - // SetupUserInfo(); - // 必須:バージョンデータのマウント - if( FALSE == SetupVerData() ) { - miya_log_fprintf(log_fd, "%s failed SetupVerData\n", __FUNCTION__); - ret_flag = FALSE; - goto end_log_e; - } - // 必須:ネットワークへの接続 if( 0 != NcStart(SITEDEFS_DEFAULTCLASS) ) { miya_log_fprintf(log_fd, "%s failed NcStart\n", __FUNCTION__); @@ -872,9 +887,9 @@ static BOOL RestoreFromSDCard7(void) miya_log_fprintf(log_fd,"Import Pre-installed apps.\n"); mprintf("Import Pre-installed apps..\n"); if( mydata.num_of_user_pre_installed_eticket_only > 0 ) { - if( FALSE == TitleIDLoadETicketOnly( MyFile_GetDownloadTitleIDTicketOnlyFileName(), + if( FALSE == UserTitleIDLoadETicketOnly( MyFile_GetUserTitleIDTicketOnlyFileName(), &eticket_only_id_buf, &num_of_eticket_only_titles, - MyFile_GetDownloadTitleIDTicketOnlyRestoreLogFileName()) ) { + MyFile_GetUserTitleIDTicketOnlyRestoreLogFileName()) ) { ; } } @@ -889,6 +904,7 @@ static BOOL RestoreFromSDCard7(void) if( eticket_only_id_buf ) { OS_Free(eticket_only_id_buf ); + eticket_only_id_buf = NULL; } } @@ -2134,6 +2150,7 @@ BOOL DWC_GetProxySetting( DWCProxySetting* proxy ) #endif +#include /*====== End of main.c ======*/ diff --git a/build/tools/sctools/copy_org/src/main.c b/build/tools/sctools/copy_org/src/main.c index a0000b2..1743d2b 100644 --- a/build/tools/sctools/copy_org/src/main.c +++ b/build/tools/sctools/copy_org/src/main.c @@ -158,7 +158,6 @@ static void FreeForNAM(void* ptr) } } -static NAMTitleId pArray[NAM_TITLE_ID_S]; static int Check_User_Titles_ETicket_Only(void) @@ -173,12 +172,19 @@ static int Check_User_Titles_ETicket_Only(void) // u16 version = 0; u8 es_version; u16 ticket_version; + NAMTitleId *pArray; + + pArray = (NAMTitleId *)OS_Alloc( NAM_TITLE_ID_S * sizeof(NAMTitleId) ); + if( pArray == NULL ) { + return -1; + } // num = NAM_GetNumTitles(); num = NAM_GetNumInstalledTitles(); if( num >= 0 ) { if( NAM_OK != NAM_GetInstalledTitleList( pArray , NAM_TITLE_ID_S ) ) { OS_TPrintf("error:NAM_GetInstalledTitleList\n"); + OS_Free( pArray ); return -1; /* error */ } OS_TPrintf("NAND Ticket only titles\n"); @@ -236,9 +242,11 @@ static int Check_User_Titles_ETicket_Only(void) } else { OS_TPrintf("error:NAM_GetInstalledTitles\n"); + OS_Free( pArray ); return -1; } + OS_Free( pArray ); num_of_eticket_only_titles = user_title_count; return user_title_count; } @@ -257,7 +265,6 @@ static int Check_User_Titles(void) num = NAM_GetNumTitles(); if( num >= 0 ) { - if( NAM_OK != NAM_GetTitleList( array_app_titles , NAM_TITLE_ID_S ) ) { OS_TPrintf("error:NAM_GetTitleList\n"); return -1; /* error */ @@ -592,7 +599,7 @@ static BOOL SDBackupToSDCard7(void) OS_TPrintf("User title list backup \n"); mprintf("User title list backup "); if( 0 == get_title_id( &dir_entry_list_head, "nand:/title", &save_dir_info, - MyFile_GetDownloadTitleIDLogFileName(), 0 ) ) { + MyFile_GetUserTitleIDLogFileName(), 0 ) ) { flag = GetUserAppTitleList( dir_entry_list_head, &pBuffer, &count, MyFile_GetUserAppTitleListLogFileName()) ; @@ -600,7 +607,7 @@ static BOOL SDBackupToSDCard7(void) if( TRUE == flag ) { ptr = pBuffer; - mydata.num_of_user_download_app = count; + mydata.num_of_user_app = count; mydata.num_of_error_user_download_app = 0; mydata.num_of_user_pre_installed_app = 0; mydata.num_of_user_pre_installed_eticket_only = 0; @@ -616,9 +623,9 @@ static BOOL SDBackupToSDCard7(void) mydata.num_of_user_pre_installed_eticket_only = num_of_eticket_only_titles; - if( FALSE == TitleIDSaveETicketOnly( MyFile_GetDownloadTitleIDTicketOnlyFileName(), + if( FALSE == UserTitleIDSaveETicketOnly( MyFile_GetUserTitleIDTicketOnlyFileName(), array_eticket_only_titles, num_of_eticket_only_titles, - MyFile_GetDownloadTitleIDTicketOnlySaveLogFileName()) ) { + MyFile_GetUserTitleIDTicketOnlySaveLogFileName()) ) { ; } @@ -691,8 +698,8 @@ static BOOL SDBackupToSDCard7(void) } // PrintSrcDirEntryListBackward( dir_entry_list_head, NULL ); - flag = TitleIDSave( MyFile_GetDownloadTitleIDFileName(), - pBuffer, count, MyFile_GetDownloadTitleIDSaveLogFileName()); + flag = UserTitleIDSave( MyFile_GetUserTitleIDFileName(), + pBuffer, count, MyFile_GetUserTitleIDSaveLogFileName()); } if( pBuffer ) { OS_Free(pBuffer); @@ -708,7 +715,7 @@ static BOOL SDBackupToSDCard7(void) m_set_palette(tc[0], 0x1); /* red */ mprintf("NG.\n"); m_set_palette(tc[0], M_TEXT_COLOR_WHITE ); - mydata.num_of_user_download_app = -1; /* failed */ + mydata.num_of_user_app = -1; /* failed */ mydata.num_of_error_user_download_app = -1; } (void)ClearDirEntryList( &dir_entry_list_head ); @@ -720,7 +727,7 @@ static BOOL SDBackupToSDCard7(void) Error_Report_End(); if(TRUE == no_sd_clean_flag ) { - mprintf("num of user tiltes = %d\n",mydata.num_of_user_download_app); + mprintf("num of user tiltes = %d\n",mydata.num_of_user_app); } return flag; @@ -1103,8 +1110,8 @@ void TwlMain(void) NAM_Init(&AllocForNAM, &FreeForNAM); - // mydata.num_of_user_download_app_by_nam = Check_User_Titles(); - // mprintf("num of user tiltes = %d\n",mydata.num_of_user_download_app_by_nam); + // mydata.num_of_user_app_by_nam = Check_User_Titles(); + // mprintf("num of user tiltes = %d\n",mydata.num_of_user_app_by_nam); /* 順番厳守 */ mprintf("user tiltes(installed) = %d\n", Check_User_Titles()); mprintf("user tiltes(ticket only) = %d\n", Check_User_Titles_ETicket_Only()); diff --git a/build/tools/sctools/makesdtd/makesdtd.c b/build/tools/sctools/makesdtd/makesdtd.c index 8e971fc..cfb28d5 100644 --- a/build/tools/sctools/makesdtd/makesdtd.c +++ b/build/tools/sctools/makesdtd/makesdtd.c @@ -705,7 +705,7 @@ int main(int argc, char **argv) // printf("d = %s\n", prog); - strcpy(key_file_path, ".\\"); + // strcpy(key_file_path, ".\\"); strcat(key_file_path, prog); len = strlen(key_file_path); diff --git a/build/tools/sctools/makesdtd/my_sign.c b/build/tools/sctools/makesdtd/my_sign.c index 4c63e41..43b23a2 100644 --- a/build/tools/sctools/makesdtd/my_sign.c +++ b/build/tools/sctools/makesdtd/my_sign.c @@ -226,7 +226,7 @@ int cryptopc(char *input_file, char *output_file) goto end; } - if( (fp_out = fopen( output_file, "wb+" )) == NULL ) { + if( (fp_out = fopen( output_file, "wb" )) == NULL ) { fprintf(stderr, "failed to fopen output file(%s)\n",output_file); rsa_error_flag = 1; goto end;