TwlToolsRED/build/tools/TamperDetectorForSrl/checker.h
n1481 adc14c7cd8 アクセスログ解析機能を追加、
正規品で存在しているエントリがマジコン側に無い場合にアボートしていたのを修正

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlToolsRED@581 7061adef-622a-194b-ae81-725974e89856
2012-05-30 09:04:07 +00:00

91 lines
2.7 KiB
C++

#ifndef CHECKER_H_
#define CHECKER_H_
#include <stdio.h>
#include <stdlib.h>
#include "types.h"
//#include "nitro_romheader.h"
#include "twl_format_rom.h"
#include "banner.h"
#include "entry.h"
#include "card_hash.h"
typedef struct
{
u8 entry_name_length:7; // ファイル名の長さ (0-127)
u8 entry_type :1; // ファイルエントリの場合は 0
} EntryInfo;
typedef u32 DiffLevel;
#define DIFF_NOT_TOUCHED 0
#define DIFF_DATA_MODIFIED 1
#define DIFF_DATA_FILLED 2
#define DIFF_SIZE_MODIFIED 4
#define DIFF_LOCATION_MODIFIED 8
#define DIFF_OUT_OF_RANGE 16
typedef enum
{
PRINT_LEVEL_0 = 0,
PRINT_LEVEL_1,
PRINT_LEVEL_2
} PrintLevel;
class Checker
{
private:
bool initialized;
FILE* gfp;
FILE* mfp;
void* gBuf;
void* mBuf;
u32 buffer_size;
ROM_FNTDir fntBuf[4096];
void* dirTableBuf;
public:
void Initialize( FILE* myGfp, FILE* myMfp, void* myGbuf, void* myMbuf, u32 size);
/* ヘッダを読むだけ */
bool LoadHeader( void* gHeaderBuf, void* mHeaderBuf);
/* ROMの特定領域に差がないかどうか調べる */
bool Diff( DiffLevel* diffLevel, u32 g_offset, u32 g_size, u32 m_offset, u32 m_size, bool isDataOnly, PrintLevel print_enable);
void Finalize( void);
/* ROMヘッダの各領域を管理リストに登録する */
void AnalyzeHeader( RomHeader* gHeaderBuf, Entry* gEntry, RomHeader* mHeaderBuf, Entry* mEntry);
/* ROMのバナー領域に対して Diff をかける */
void AnalyzeBanner( RomHeader* gHeaderBuf, Entry* gEntry, RomHeader* mHeaderBuf, Entry* mEntry);
/* Overlayテーブルに登録されている各ファイルに対して Diff をかける */
void AnalyzeOverlay( RomHeader* gHeaderBuf, Entry* gEntry, RomHeader* mHeaderBuf, Entry* mEntry);
/* FNT と FAT を解析して、各ファイルに対して Diff をかける */
bool AnalyzeFNT( RomHeader* headerBuf, FILE* fp, Entry* entry, PrintLevel print_enable);
bool FindEntry( u32 fnt_offset, u16 entry_id, RomHeader* headerBuf, FILE* fp, Entry* entry, u16 parent_id, PrintLevel print_enable);
void FindAllocation( u16 entry_id, RomHeader* headerBuf, FILE* fp, Entry* entry, PrintLevel print_enable);
void CheckAllEntries( RomHeader* mHeaderBuf, CARDRomHashContext *context, Entry* gEntry, Entry* mEntry);
/* ROM内のBMPファイルを全て切り出して出力する */
void ExportGenuineBmpFiles( Entry* gEntry, PrintLevel print_enable);
/* 起動時アクセスログを解析する */
void AnalyzeAccessLog( RomHeader* gHeaderBuf, Entry* entry, Entry* mEntry, FILE* lfp);
u32 GetOctValue( char* hex_char);
void FindAccessLogFile( RomHeader* gHeaderBuf, Entry* entry, Entry* mEntry, FILE* lfp, CARDRomHashContext *context);
};
#endif