From a7639b3055a7b7ba81b62325a2628d94e6236925 Mon Sep 17 00:00:00 2001 From: n1481 Date: Mon, 27 Jun 2011 09:10:45 +0000 Subject: [PATCH] =?UTF-8?q?=E3=82=A2=E3=82=AF=E3=82=BB=E3=82=B9=E3=83=AD?= =?UTF-8?q?=E3=82=B0=E3=81=AB=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=AE?= =?UTF-8?q?=E6=94=B9=E7=AB=84=E6=83=85=E5=A0=B1=E3=81=A8=E3=80=81=E3=83=95?= =?UTF-8?q?=E3=82=A1=E3=82=A4=E3=83=AB=E4=BB=A5=E5=A4=96=E3=81=AE=E6=83=85?= =?UTF-8?q?=E5=A0=B1=E3=82=82=E5=87=BA=E5=8A=9B=E3=81=95=E3=82=8C=E3=82=8B?= =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4?= 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@565 7061adef-622a-194b-ae81-725974e89856 --- build/tools/TamperDetectorForSrl/checker.cpp | 176 ++++++++++++++++++- build/tools/TamperDetectorForSrl/checker.h | 7 +- build/tools/TamperDetectorForSrl/entry.cpp | 69 +++++++- build/tools/TamperDetectorForSrl/entry.h | 20 ++- build/tools/TamperDetectorForSrl/main.cpp | 6 +- 5 files changed, 261 insertions(+), 17 deletions(-) diff --git a/build/tools/TamperDetectorForSrl/checker.cpp b/build/tools/TamperDetectorForSrl/checker.cpp index 3d24bd5..63ca7b5 100644 --- a/build/tools/TamperDetectorForSrl/checker.cpp +++ b/build/tools/TamperDetectorForSrl/checker.cpp @@ -58,7 +58,7 @@ bool Checker::Diff( u32 g_offset, u32 g_size, u32 m_offset, u32 m_size, bool isD } else { - function_result = false; + function_result = false; // 改竄フラグ if( print_enable) { printf( " offset:0x%x ---> offset:0x%x(改竄されている)\n", g_offset, m_offset); } @@ -72,7 +72,7 @@ bool Checker::Diff( u32 g_offset, u32 g_size, u32 m_offset, u32 m_size, bool isD } else { - function_result = false; + function_result = false; // 改竄フラグ if( print_enable) { printf( " size:0x%x ---> size:0x%x(改竄されている)\n", g_size, m_size); } @@ -147,7 +147,6 @@ bool Checker::Diff( u32 g_offset, u32 g_size, u32 m_offset, u32 m_size, bool isD } else { - function_result = false; if( filled) { if( print_enable) { @@ -156,6 +155,7 @@ bool Checker::Diff( u32 g_offset, u32 g_size, u32 m_offset, u32 m_size, bool isD } else { + function_result = false; // 改竄フラグ if( print_enable) { printf( " data:(改竄されている)\n"); } @@ -169,8 +169,102 @@ bool Checker::Diff( u32 g_offset, u32 g_size, u32 m_offset, u32 m_size, bool isD } -void Checker::AnalyzeBanner( RomHeader* gHeaderBuf, RomHeader* mHeaderBuf) +void Checker::AnalyzeHeader( RomHeader* gHeaderBuf, Entry* gEntry, RomHeader* mHeaderBuf, Entry* mEntry) { + MyAreaEntry *tmpAreaEntry; + + // genuine 領域を登録 + tmpAreaEntry = (MyAreaEntry*)malloc( sizeof(MyAreaEntry)); + gEntry->InitializeEntry( tmpAreaEntry); + gEntry->SetName( tmpAreaEntry, (char*)"A9-Static", 9); + tmpAreaEntry->top = (u32)(gHeaderBuf->arm9.romAddr); + tmpAreaEntry->bottom = (u32)(gHeaderBuf->arm9.romAddr + gHeaderBuf->arm9.romSize); + gEntry->addAreaEntry( tmpAreaEntry); + + tmpAreaEntry = (MyAreaEntry*)malloc( sizeof(MyAreaEntry)); + gEntry->InitializeEntry( tmpAreaEntry); + gEntry->SetName( tmpAreaEntry, (char*)"A7-Static", 9); + tmpAreaEntry->top = (u32)(gHeaderBuf->arm7.romAddr); + tmpAreaEntry->bottom = (u32)(gHeaderBuf->arm7.romAddr + gHeaderBuf->arm7.romSize); + gEntry->addAreaEntry( tmpAreaEntry); + + tmpAreaEntry = (MyAreaEntry*)malloc( sizeof(MyAreaEntry)); + gEntry->InitializeEntry( tmpAreaEntry); + gEntry->SetName( tmpAreaEntry, (char*)"FNT", 3); + tmpAreaEntry->top = (u32)(gHeaderBuf->fnt_offset); + tmpAreaEntry->bottom = (u32)((u32)(gHeaderBuf->fnt_offset) + gHeaderBuf->fnt_size); + gEntry->addAreaEntry( tmpAreaEntry); + + tmpAreaEntry = (MyAreaEntry*)malloc( sizeof(MyAreaEntry)); + gEntry->InitializeEntry( tmpAreaEntry); + gEntry->SetName( tmpAreaEntry, (char*)"FAT", 3); + tmpAreaEntry->top = (u32)(gHeaderBuf->fat_offset); + tmpAreaEntry->bottom = (u32)((u32)(gHeaderBuf->fat_offset) + gHeaderBuf->fat_size); + gEntry->addAreaEntry( tmpAreaEntry); + + tmpAreaEntry = (MyAreaEntry*)malloc( sizeof(MyAreaEntry)); + gEntry->InitializeEntry( tmpAreaEntry); + gEntry->SetName( tmpAreaEntry, (char*)"A9-OVT", 6); + tmpAreaEntry->top = (u32)(gHeaderBuf->main_ovt_offset); + tmpAreaEntry->bottom = (u32)((u32)(gHeaderBuf->main_ovt_offset) + gHeaderBuf->main_ovt_size); + gEntry->addAreaEntry( tmpAreaEntry); + + tmpAreaEntry = (MyAreaEntry*)malloc( sizeof(MyAreaEntry)); + gEntry->InitializeEntry( tmpAreaEntry); + gEntry->SetName( tmpAreaEntry, (char*)"A7-OVT", 6); + tmpAreaEntry->top = (u32)(gHeaderBuf->sub_ovt_offset); + tmpAreaEntry->bottom = (u32)((u32)(gHeaderBuf->sub_ovt_offset) + gHeaderBuf->sub_ovt_size); + gEntry->addAreaEntry( tmpAreaEntry); + + + // magicon 領域を登録 + tmpAreaEntry = (MyAreaEntry*)malloc( sizeof(MyAreaEntry)); + mEntry->InitializeEntry( tmpAreaEntry); + mEntry->SetName( tmpAreaEntry, (char*)"A9-Static", 9); + tmpAreaEntry->top = (u32)(mHeaderBuf->arm9.romAddr); + tmpAreaEntry->bottom = (u32)(mHeaderBuf->arm9.romAddr + mHeaderBuf->arm9.romSize); + mEntry->addAreaEntry( tmpAreaEntry); + + tmpAreaEntry = (MyAreaEntry*)malloc( sizeof(MyAreaEntry)); + mEntry->InitializeEntry( tmpAreaEntry); + mEntry->SetName( tmpAreaEntry, (char*)"A7-Static", 9); + tmpAreaEntry->top = (u32)(mHeaderBuf->arm7.romAddr); + tmpAreaEntry->bottom = (u32)(mHeaderBuf->arm7.romAddr + mHeaderBuf->arm7.romSize); + mEntry->addAreaEntry( tmpAreaEntry); + + tmpAreaEntry = (MyAreaEntry*)malloc( sizeof(MyAreaEntry)); + mEntry->InitializeEntry( tmpAreaEntry); + mEntry->SetName( tmpAreaEntry, (char*)"FNT", 3); + tmpAreaEntry->top = (u32)(mHeaderBuf->fnt_offset); + tmpAreaEntry->bottom = (u32)((u32)(mHeaderBuf->fnt_offset) + mHeaderBuf->fnt_size); + mEntry->addAreaEntry( tmpAreaEntry); + + tmpAreaEntry = (MyAreaEntry*)malloc( sizeof(MyAreaEntry)); + mEntry->InitializeEntry( tmpAreaEntry); + mEntry->SetName( tmpAreaEntry, (char*)"FAT", 3); + tmpAreaEntry->top = (u32)(mHeaderBuf->fat_offset); + tmpAreaEntry->bottom = (u32)((u32)(mHeaderBuf->fat_offset) + mHeaderBuf->fat_size); + mEntry->addAreaEntry( tmpAreaEntry); + + tmpAreaEntry = (MyAreaEntry*)malloc( sizeof(MyAreaEntry)); + mEntry->InitializeEntry( tmpAreaEntry); + mEntry->SetName( tmpAreaEntry, (char*)"A9-OVT", 6); + tmpAreaEntry->top = (u32)(mHeaderBuf->main_ovt_offset); + tmpAreaEntry->bottom = (u32)((u32)(mHeaderBuf->main_ovt_offset) + mHeaderBuf->main_ovt_size); + mEntry->addAreaEntry( tmpAreaEntry); + + tmpAreaEntry = (MyAreaEntry*)malloc( sizeof(MyAreaEntry)); + mEntry->InitializeEntry( tmpAreaEntry); + mEntry->SetName( tmpAreaEntry, (char*)"A7-OVT", 6); + tmpAreaEntry->top = (u32)(mHeaderBuf->sub_ovt_offset); + tmpAreaEntry->bottom = (u32)((u32)(mHeaderBuf->sub_ovt_offset) + mHeaderBuf->sub_ovt_size); + mEntry->addAreaEntry( tmpAreaEntry); +} + + +void Checker::AnalyzeBanner( RomHeader* gHeaderBuf, Entry* gEntry, RomHeader* mHeaderBuf, Entry* mEntry) +{ + MyAreaEntry *tmpAreaEntry; BannerHeader gBannerHeader; BannerHeader mBannerHeader; u32 banner_size[3] = { @@ -199,15 +293,46 @@ void Checker::AnalyzeBanner( RomHeader* gHeaderBuf, RomHeader* mHeaderBuf) Diff( (u32)(gHeaderBuf->banner_offset) + sizeof(BannerHeader), banner_size[gBannerHeader.version], (u32)(mHeaderBuf->banner_offset) + sizeof(BannerHeader), banner_size[mBannerHeader.version], false, PRINT_LEVEL_1); + + /* 領域を登録 */ + tmpAreaEntry = (MyAreaEntry*)malloc( sizeof(MyAreaEntry)); + gEntry->InitializeEntry( tmpAreaEntry); + gEntry->SetName( tmpAreaEntry, (char*)"BannerHeader", 12); + tmpAreaEntry->top = (u32)(gHeaderBuf->banner_offset); + tmpAreaEntry->bottom = (u32)(gHeaderBuf->banner_offset + sizeof(BannerHeader)); + gEntry->addAreaEntry( tmpAreaEntry); + + tmpAreaEntry = (MyAreaEntry*)malloc( sizeof(MyAreaEntry)); + gEntry->InitializeEntry( tmpAreaEntry); + gEntry->SetName( tmpAreaEntry, (char*)"BannerBody", 10); + tmpAreaEntry->top = (u32)(gHeaderBuf->banner_offset + sizeof(BannerHeader)); + tmpAreaEntry->bottom = (u32)(tmpAreaEntry->top + banner_size[gBannerHeader.version]); + gEntry->addAreaEntry( tmpAreaEntry); + + tmpAreaEntry = (MyAreaEntry*)malloc( sizeof(MyAreaEntry)); + mEntry->InitializeEntry( tmpAreaEntry); + mEntry->SetName( tmpAreaEntry, (char*)"BannerHeader", 12); + tmpAreaEntry->top = (u32)(mHeaderBuf->banner_offset); + tmpAreaEntry->bottom = (u32)(mHeaderBuf->banner_offset + sizeof(BannerHeader)); + mEntry->addAreaEntry( tmpAreaEntry); + + tmpAreaEntry = (MyAreaEntry*)malloc( sizeof(MyAreaEntry)); + mEntry->InitializeEntry( tmpAreaEntry); + mEntry->SetName( tmpAreaEntry, (char*)"BannerBody", 10); + tmpAreaEntry->top = (u32)(mHeaderBuf->banner_offset + sizeof(BannerHeader)); + tmpAreaEntry->bottom = (u32)(tmpAreaEntry->top + banner_size[mBannerHeader.version]); + mEntry->addAreaEntry( tmpAreaEntry); } -void Checker::AnalyzeOverlay( RomHeader* gHeaderBuf, RomHeader* mHeaderBuf) +void Checker::AnalyzeOverlay( RomHeader* gHeaderBuf, Entry* gEntry, RomHeader* mHeaderBuf, Entry* mEntry) { int i; int g_ovt_entries, m_ovt_entries; long nowgfp, nowmfp; ROM_OVT g_ovtBuf, m_ovtBuf; ROM_FAT g_fatBuf, m_fatBuf; + MyAreaEntry *tmpAreaEntry; + char areaStr[32]; nowgfp = ftell( gfp); nowmfp = ftell( mfp); @@ -235,6 +360,23 @@ void Checker::AnalyzeOverlay( RomHeader* gHeaderBuf, RomHeader* mHeaderBuf) Diff( (u32)(g_fatBuf.top), ((u32)(g_fatBuf.bottom) - (u32)(g_fatBuf.top)), (u32)(m_fatBuf.top), ((u32)(m_fatBuf.bottom) - (u32)(m_fatBuf.top)), false, PRINT_LEVEL_1); + + // 領域を登録 + tmpAreaEntry = (MyAreaEntry*)malloc( sizeof(MyAreaEntry)); + gEntry->InitializeEntry( tmpAreaEntry); + sprintf( areaStr, "Arm9Overlay%d", i); + gEntry->SetName( tmpAreaEntry, areaStr, 11+((i/10)+1)); + tmpAreaEntry->top = (u32)(g_fatBuf.top); + tmpAreaEntry->bottom = (u32)(g_fatBuf.bottom); + gEntry->addAreaEntry( tmpAreaEntry); + + tmpAreaEntry = (MyAreaEntry*)malloc( sizeof(MyAreaEntry)); + mEntry->InitializeEntry( tmpAreaEntry); + sprintf( areaStr, "Arm9Overlay%d", i); + mEntry->SetName( tmpAreaEntry, areaStr, 11+((i/10)+1)); + tmpAreaEntry->top = (u32)(m_fatBuf.top); + tmpAreaEntry->bottom = (u32)(m_fatBuf.bottom); + mEntry->addAreaEntry( tmpAreaEntry); } // ARM7 Overlay @@ -261,6 +403,23 @@ void Checker::AnalyzeOverlay( RomHeader* gHeaderBuf, RomHeader* mHeaderBuf) Diff( (u32)(g_fatBuf.top), ((u32)(g_fatBuf.bottom) - (u32)(g_fatBuf.top)), (u32)(m_fatBuf.top), ((u32)(m_fatBuf.bottom) - (u32)(m_fatBuf.top)), false, PRINT_LEVEL_1); + + // 領域を登録 + tmpAreaEntry = (MyAreaEntry*)malloc( sizeof(MyAreaEntry)); + gEntry->InitializeEntry( tmpAreaEntry); + sprintf( areaStr, "Arm7Overlay%d", i); + gEntry->SetName( tmpAreaEntry, areaStr, 11+((i/10)+1)); + tmpAreaEntry->top = (u32)(g_fatBuf.top); + tmpAreaEntry->bottom = (u32)(g_fatBuf.bottom); + gEntry->addAreaEntry( tmpAreaEntry); + + tmpAreaEntry = (MyAreaEntry*)malloc( sizeof(MyAreaEntry)); + mEntry->InitializeEntry( tmpAreaEntry); + sprintf( areaStr, "Arm7Overlay%d", i); + mEntry->SetName( tmpAreaEntry, areaStr, 11+((i/10)+1)); + tmpAreaEntry->top = (u32)(m_fatBuf.top); + tmpAreaEntry->bottom = (u32)(m_fatBuf.bottom); + mEntry->addAreaEntry( tmpAreaEntry); } // ファイルポインタを戻す @@ -522,6 +681,7 @@ void Checker::CheckAllEntries( Entry* gEntry, Entry* mEntry) hisEntry->top, (hisEntry->bottom - hisEntry->top), false, PRINT_LEVEL_1) == false) { + currentEntry->modified = true; // 改竄フラグ printf( "\n"); } } @@ -584,7 +744,11 @@ void Checker::FindAccessLogFile( Entry* entry, FILE* lfp) (GetOctValue(&logBuf[0x0D]) * 0x10000000)); printf( "%d 0x%lx - 0x%lx", i, log_start_adr, log_end_adr); - entry->FindFileLocation( log_start_adr, log_end_adr); + if( !(entry->FindFileLocation( log_start_adr, log_end_adr))) + { + entry->FindAreaLocation( log_start_adr, log_end_adr); + } + printf( "\n"); } else { diff --git a/build/tools/TamperDetectorForSrl/checker.h b/build/tools/TamperDetectorForSrl/checker.h index 7fc3c71..2198af2 100644 --- a/build/tools/TamperDetectorForSrl/checker.h +++ b/build/tools/TamperDetectorForSrl/checker.h @@ -47,11 +47,14 @@ class Checker void Finalize( void); + /* ROMヘッダの各領域を管理リストに登録する */ + void AnalyzeHeader( RomHeader* gHeaderBuf, Entry* gEntry, RomHeader* mHeaderBuf, Entry* mEntry); + /* ROMのバナー領域に対して Diff をかける */ - void AnalyzeBanner( RomHeader* gHeaderBuf, RomHeader* mHeaderBuf); + void AnalyzeBanner( RomHeader* gHeaderBuf, Entry* gEntry, RomHeader* mHeaderBuf, Entry* mEntry); /* Overlayテーブルに登録されている各ファイルに対して Diff をかける */ - void AnalyzeOverlay( RomHeader* gHeaderBuf, RomHeader* mHeaderBuf); + void AnalyzeOverlay( RomHeader* gHeaderBuf, Entry* gEntry, RomHeader* mHeaderBuf, Entry* mEntry); /* FNT と FAT を解析して、各ファイルに対して Diff をかける */ bool AnalyzeFNT( RomHeader* headerBuf, FILE* fp, Entry* entry, PrintLevel print_enable); diff --git a/build/tools/TamperDetectorForSrl/entry.cpp b/build/tools/TamperDetectorForSrl/entry.cpp index 92f17b0..553f2a6 100644 --- a/build/tools/TamperDetectorForSrl/entry.cpp +++ b/build/tools/TamperDetectorForSrl/entry.cpp @@ -8,6 +8,7 @@ void Entry::Initialize( void) { dirEntry = NULL; fileEntry = NULL; + areaEntry = NULL; } void Entry::InitializeEntry( MyDirEntry* myDirEntry) @@ -30,12 +31,23 @@ void Entry::InitializeEntry( MyFileEntry* myFileEntry) myFileEntry->full_path_name_length = 0; myFileEntry->top = 0; myFileEntry->bottom = 0; + myFileEntry->modified = false; myFileEntry->self_id = 0xFFFF; myFileEntry->parent_id = 0; myFileEntry->parent = NULL; myFileEntry->next = NULL; } +void Entry::InitializeEntry( MyAreaEntry* myAreaEntry) +{ + myAreaEntry->name = NULL; + myAreaEntry->name_length = 0; + myAreaEntry->top = 0; + myAreaEntry->bottom = 0; + myAreaEntry->modified = false; + myAreaEntry->next = NULL; +} + void Entry::CopyEntry( MyDirEntry* dest, MyDirEntry* src) { memcpy( dest, src, sizeof(MyFileEntry)); @@ -43,7 +55,7 @@ void Entry::CopyEntry( MyDirEntry* dest, MyDirEntry* src) void Entry::SetName( MyDirEntry* myDirEntry, char* fname, u16 len) { - myDirEntry->name = (char*)malloc( sizeof(MyDirEntry)); + myDirEntry->name = (char*)malloc( FILE_NAME_LENGTH); memset( myDirEntry->name, 0, len+1); memcpy( myDirEntry->name, fname, len); @@ -59,6 +71,15 @@ void Entry::SetName( MyFileEntry* myFileEntry, char* fname, u16 len) myFileEntry->name_length = len; } +void Entry::SetName( MyAreaEntry* myAreaEntry, char* fname, u16 len) +{ + myAreaEntry->name = (char*)malloc( FILE_NAME_LENGTH); + memset( myAreaEntry->name, 0, len+1); + memcpy( myAreaEntry->name, fname, len); + + myAreaEntry->name_length = len; +} + void Entry::addDirEntry( MyDirEntry* myDirEntry) { MyDirEntry *currentEntry = dirEntry; @@ -92,6 +113,23 @@ void Entry::addFileEntry( MyFileEntry* myFileEntry) myFileEntry->next = NULL; } +void Entry::addAreaEntry( MyAreaEntry* myAreaEntry) +{ + MyAreaEntry *currentEntry = areaEntry; +// printf( "%s, 0x%lx, 0x%lx\n", myAreaEntry->name, myAreaEntry->top, myAreaEntry->bottom); + if( !currentEntry) + { + areaEntry = myAreaEntry; + return; + } + while( currentEntry->next) + { + currentEntry = (MyAreaEntry*)(currentEntry->next); + } + currentEntry->next = myAreaEntry; + myAreaEntry->next = NULL; +} + MyDirEntry* Entry::FindDirEntry( u16 id) { @@ -161,14 +199,35 @@ MyFileEntry* Entry::FindFileLocation( u32 start_adr, u32 end_adr) MyFileEntry *currentEntry = fileEntry; while( currentEntry) { - if( ((currentEntry->top <= start_adr)&&(currentEntry->bottom >= start_adr)) || - ((currentEntry->top <= end_adr)&&(currentEntry->bottom >= end_adr))) + if( ((currentEntry->top <= start_adr)&&(currentEntry->bottom > start_adr)) || + ((currentEntry->top <= end_adr)&&(currentEntry->bottom > end_adr))) { - printf( " %s,", currentEntry->full_path_name); + if( currentEntry->modified) + { // 改竄されているファイルの識別表示 + printf( " %s(*),", currentEntry->full_path_name); + }else{ + printf( " %s,", currentEntry->full_path_name); + } } currentEntry = (MyFileEntry*)(currentEntry->next); } - printf( "\n"); + return NULL; +} + + +/* アドレスの範囲に該当するエリアを表示する */ +MyAreaEntry* Entry::FindAreaLocation( u32 start_adr, u32 end_adr) +{ + MyAreaEntry *currentEntry = areaEntry; + while( currentEntry) + { + if( ((currentEntry->top <= start_adr)&&(currentEntry->bottom > start_adr)) || + ((currentEntry->top <= end_adr)&&(currentEntry->bottom > end_adr))) + { + printf( " %s,", currentEntry->name); + } + currentEntry = (MyAreaEntry*)(currentEntry->next); + } return NULL; } diff --git a/build/tools/TamperDetectorForSrl/entry.h b/build/tools/TamperDetectorForSrl/entry.h index 7179896..6301da8 100644 --- a/build/tools/TamperDetectorForSrl/entry.h +++ b/build/tools/TamperDetectorForSrl/entry.h @@ -29,12 +29,23 @@ typedef struct u8 full_path_name_length; u32 top; u32 bottom; + bool modified; u16 self_id; u16 parent_id; void* parent; void* next; } MyFileEntry; +typedef struct +{ + char* name; + u8 name_length; + u32 top; + u32 bottom; + bool modified; + void* next; +} MyAreaEntry; + class Entry { @@ -42,20 +53,24 @@ class Entry public: MyDirEntry* dirEntry; MyFileEntry* fileEntry; + MyAreaEntry* areaEntry; public: void Initialize( void); void InitializeEntry( MyDirEntry* myDirEntry); void InitializeEntry( MyFileEntry* myFileEntry); + void InitializeEntry( MyAreaEntry* myAreaEntry); void CopyEntry( MyDirEntry* dest, MyDirEntry* src); void SetName( MyDirEntry* myDirEntry, char* fname, u16 len); - void SetName( MyFileEntry* myDirEntry, char* fname, u16 len); + void SetName( MyFileEntry* myFileEntry, char* fname, u16 len); + void SetName( MyAreaEntry* myAreaEntry, char* fname, u16 len); void addDirEntry( MyDirEntry* myDirEntry); void addFileEntry( MyFileEntry* myFileEntry); + void addAreaEntry( MyAreaEntry* myAreaEntry); MyDirEntry* FindDirEntry( u16 id); MyFileEntry* FindFileEntry( u16 id); @@ -65,7 +80,8 @@ class Entry /* アドレスの範囲に該当するファイルを表示する */ MyFileEntry* FindFileLocation( u32 start_adr, u32 end_adr); - + /* アドレスの範囲に該当するエリアを表示する */ + MyAreaEntry* FindAreaLocation( u32 start_adr, u32 end_adr); /* parent リンクを繋げる */ void FollowParent( void); diff --git a/build/tools/TamperDetectorForSrl/main.cpp b/build/tools/TamperDetectorForSrl/main.cpp index a213d2d..2293c2e 100644 --- a/build/tools/TamperDetectorForSrl/main.cpp +++ b/build/tools/TamperDetectorForSrl/main.cpp @@ -86,6 +86,8 @@ int main (int argc, char *argv[]) checker.Initialize( gfp, mfp, gBuf, mBuf, BUFFER_SIZE); checker.LoadHeader( &gHeaderBuf, &mHeaderBuf); + + checker.AnalyzeHeader( &gHeaderBuf, &gEntry, &mHeaderBuf, &mEntry); printf( "------------------\n"); printf( "Nitro Rom Header\n"); @@ -141,10 +143,10 @@ int main (int argc, char *argv[]) printf( "------------------\n"); printf( "\nBanner\n"); - checker.AnalyzeBanner( &gHeaderBuf, &mHeaderBuf); + checker.AnalyzeBanner( &gHeaderBuf, &gEntry, &mHeaderBuf, &mEntry); printf( "\nOverlay\n"); - checker.AnalyzeOverlay( &gHeaderBuf, &mHeaderBuf); + checker.AnalyzeOverlay( &gHeaderBuf, &gEntry, &mHeaderBuf, &mEntry); printf( "\nFNT & FAT\n"); checker.AnalyzeFNT( &gHeaderBuf, gfp, &gEntry, PRINT_LEVEL_0);