PSPのある日本版ゲームのセーブデータでレジスタに一応任意の値を入れることが出来るセーブデータを使ったexploitを発見しました。
I found a PSP savedata exploit in a certain game(region:Japan) which could be able to put any data you want in some registers including $ra.
PSPのOFW6.20でもクラッシュします。(PSP−2000で確認)
It is available in OFW6.20.(I tried with PSP-2000)
"a"=61
"A"=41
"ハーフボイルド" セーブデータExploitと勝手に名前をつけました。
Now I call it "Half-Boiled" SAVEDATA Exploit.
いくつかのレジスタの値を変更できますが、中身の半分しか変更できません。
Some of the registers can be changed to any value,but only half of them.
$raを0x00(Value1)00(Value2)
For example, $ra to 0x00(Value1)00(Value2)
というように(Value1)と(Value2)しか任意の値になりません。
半分です。だからハーフボイルド(半熟)exploitです。
"00"をどこから持ってきているのか分かりません。
(Value1とVelue2のアドレスは特定できています。)
It means that I can change (Value1) and (Value2) only.
Ya,half of .So this is "Half boiled" exploit.
I can't confirm where a balue "00" come from.
("Value1" and "Velue2" are confirmed.)
セーブデータの"00"をすべて別の値に変えてもクラッシュこそしますが"00"となっているレジスタの値は必ず"00"ですので、このゲーム自体の特性かも知れません。
I tried to change all of the data "00" in SAVEDATA to "61" or "41", and found crashing as before, but the value of registers did have no change: The situation remained unchanged.This would be distinctive of this game.
ゲームのメモリダンプまでしていませんので、実際これで有効なアドレスへ飛ばすことが出来るのか分かりませんが、日本版のゲームでも探せばあることの証明にはなりますね。
I have not investigated all of them so that I don't know this is useful as an exploit.What do you think?
追記
EDIT
どの値がレジスタに入るのか調べました。
UTF-16のコードどころかセーブデータのある連続したアドレスの値がレジスタに入ります。
これで$raをフルコントロールすることが出来るとは思えません。
I tested my savedata, which value was getting into the registers.
The value of a consecutive address in the save data was put on the register.
$ra can not seem to be controlled by this method.