mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
・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
50 lines
2.9 KiB
Plaintext
50 lines
2.9 KiB
Plaintext
【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)
|
||
|