TwlIPL/build/tests/HashCheckTemplate/memo.txt
yosiokat b19f4213ff HashCheckTemplateの変更。
・ROMヘッダを正式版"0DTA"に変更。
 ・makerom.TWL.DEBUG.exeを使用して、ARM9.FLX.staticの完全なハッシュチェックを行えるよう変更。
 ・また、各static領域のサイズをロード可能なMAXに拡張。
 ・ARM9.FLX, ARM7.FLXの_start_AutoloadDoneCallbackをケアして、デバッガ上でもハッシュ値が合うようにする。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@2136 b08762b0-b915-fc4b-9d8c-17b2551a87ff
2008-08-11 08:31:23 +00:00

50 lines
2.9 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

【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)