mirror of
https://github.com/rvtr/TwlToolsRED.git
synced 2025-10-31 06:41:18 -04:00
ユーザーがpre installソフトをネットワークでアップデートしていた場合の対処を追加。
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlToolsRED@411 7061adef-622a-194b-ae81-725974e89856
This commit is contained in:
parent
c21a47d255
commit
39332a2bcb
@ -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;
|
||||
|
||||
@ -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 );
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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 );
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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<s32>(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;
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -59,6 +59,8 @@
|
||||
#include "pre_install.h"
|
||||
|
||||
|
||||
#include <twl/ltdmain_begin.h>
|
||||
|
||||
// #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 <twl/ltdmain_end.h>
|
||||
|
||||
/*====== End of 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);
|
||||
/* <20>‡”ÔŒµŽç */
|
||||
mprintf("user tiltes(installed) = %d\n", Check_User_Titles());
|
||||
mprintf("user tiltes(ticket only) = %d\n", Check_User_Titles_ETicket_Only());
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user