日本のとあるゲームでSavedata Exploitを発見したので「Hello World」を表示させようと、まもすけさんの記事を参考に
して作っていたのですが、フリーズするだけでなかなかうまくいかないので質問にきました
↓Exploit
バイナリローダーについての質問なんですが、"sceKernelDcacheInvalidateRange", "sceKernelDcacheWritebackInvalidateAll" がない場合は
"sceKernelDcacheWritebackAll"や"sceKernelDcacheWritebackRange"、"sceKernelDcacheWritebackInvalidateRange"で代用できるのでしょうか?
セーブデータを作成した手順は、
1. EBOOT.BINが復号化された状態のBOOT.BINをprxtoolを使って、関数のアドレスのリストを作成
(0x08800000より後のアドレスではなかったので、psplinkのmodimpコマンドを使って調べました ※ちゃんと0x08804000を引くと、prxtoolと同じ結果になりました)
2. sparta_sdkのloader.sの5箇所を書きなおし、コンパイルしてa.binを作成
("sceKernelDcacheInvalidateRange"は"sceKernelDcacheWritebackInvalidateRange"を代用)
3. 復号化したセーブデータをひらいて、名前のアドレスからpsplinkの$raレジスタのところに表示される手前までのアドレスに'a'と書きこむ
4. exploitを起こすアドレスの近くの4の倍数のアドレスにa.binを書きこむ
5. a.binの最初のアドレスから0xF0を足したアドレスに"ms0:/h.bin"と書きこむ
6. 実際にクラッシュさせて、psplinkで、savemem 0x08800000 0x20000000 memdump.bin と入力して、メモリのダンプをとる
7. ダンプしたメモリをひらいて、a.binの最初のアドレスを探し、そのアドレスに0x08800000を足す
8. psplinkで$raレジスタのところに表示されるアドレスに"7."で取得したアドレスを書きこむ
(例 "0x08A1CB68" だと "68 CB A1 08" と書きこむ)
9. とりあえずsparta_sdk.hとmain.cは"sceKernelExitGame"以外は消してコンパイルし、ms0:/h.binを読み込んだら終了されるかどうかテストする
こんな感じでやってますが、どこかおかしはないでしょうか?