【ISデバッガがコードを変更する箇所】 ・ARM9.flx.static, ARM7.flx.static _start_AutoloadDoneCallbackの先頭コードをISデバッガのモニタプログラムへの分岐に書き換えるので、  ハッシュを正しく計算する場合は、そのアドレスのコードを元々の値である0xE12FFF1E(= BX LR)にアプリで書き換えてやる  必要がある。 ・ブレークポイント設定箇所  ブレークポイント設定箇所は、デバッガによって未定義命令が埋め込まれるので、ハッシュを正しく計算する場合は、全ての  ブレークポイントを無効にする必要がある。 なお、これらは、単体ブートなら何もケアしなくてOK. 【blowfish暗号化システムコール】 ARM9FLXの先頭0x800バイト(2kバイト)はシステムコールが配置され、Blowfish暗号化されている(暗号化領域)。 で、ランチャーがブート直前に暗号化を解除する。 ヘッダに埋め込まれているARM9FLXのハッシュは、暗号化された状態でのハッシュである。 HashCheckTemplateでARM9FLXのハッシュを計算する時点では、すでに暗号化が解除されているため、計算が合わない。 どうにかして解除前の暗号化領域を手に入れる必要がある。 ・ROMヘッダが"NTRJ"の場合  アプリケーション上で上記暗号領域を00で埋めれば計算が合う。  HashCheckTemplateのようなテストプログラムでは、暗号化領域は00で埋められるためである。  <暗号化領域が00であった事の確認>  1)暗号解除時、先頭0x800バイトのうち先頭2バイトの暗号解除結果が"encryObj"でない場合は全体の暗号解除をせず、特殊処理   として未定義命令コード(0xe7ffdeff)で埋められる。   よって、暗号化領域に当たる部分が実行時に未定義命令コードで埋まってるのを確認すれば良い。  2)makerom特別版のmakerom.TWL.DEBUG.exe/makerom.TWL.sys.DEBUG.exe/makerom.TWL.secure.DEBUG.exeを使用する。(SDKに添付)   このmakeromを使用して、MAKEROM_FLAGSで、-DSYSCALL_Cの指定をしなかった場合、ROMヘッダのnitro_whitelist_phase2_diegstに   上記暗号領域を除いた状態のARM9.FLX.staticのハッシュ値が格納される。 ・ROMヘッダが"NTRJ"以外の正式ROMヘッダを使用している場合  makerom特別版のmakerom.TWL.DEBUG.exe/makerom.TWL.sys.DEBUG.exe/makerom.TWL.secure.DEBUG.exeを使用する。(SDKに添付)  このmakeromを使用して、MAKEROM_FLAGS += -DSYSCALL_C='hoge/libsyscall_c.bin'の形式で、正式版ROMヘッダに添付している  クローンブート用のデコード済みシステムコールバイナリを指定することで、ROMヘッダのnitro_whitelist_phase2_diegstに  上記暗号領域をデコードした状態のARM9.FLX.staticのハッシュ値が格納される。 【staticサイズ拡張】  makerom特別版のmakerom.TWL.DEBUG.exe/makerom.TWL.sys.DEBUG.exe/makerom.TWL.secure.DEBUG.exeを使用する。(SDKに添付)  MAKEROM_FLAGSに下記定義を追加することで、対象セグメントを指定サイズ分ランダム値で拡張できる。 ARM9.FLX.static : -DARM9FLX_EXPAND=拡張サイズ (ランチャーで正常ブート可能 max サイズ = 0x27c000) ARM7.FLX.static : -DARM7FLX_EXPAND=拡張サイズ (  〃           max サイズ = 0x40000) ARM9.LTD.static : -DARM9LTD_EXPAND=拡張サイズ (  〃           max サイズ = 0x280000) ARM7.LTD.static : -DARM7LTD_EXPAND=拡張サイズ (  〃           max サイズ = 0x108000)