ユーザーがpre installソフトをネットワークでアップデートしていた場合の対処を追加。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlToolsRED@411 7061adef-622a-194b-ae81-725974e89856
This commit is contained in:
miya 2009-10-22 01:41:44 +00:00
parent c21a47d255
commit 39332a2bcb
13 changed files with 348 additions and 155 deletions

View File

@ -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;

View File

@ -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 );

View File

@ -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;

View File

@ -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 );

View File

@ -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);

View File

@ -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;
}

View File

@ -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

View File

@ -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;

View File

@ -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);

View File

@ -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 ======*/

View File

@ -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());

View File

@ -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);

View File

@ -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;