tumugi さんが書きました:セーブデータexploitを探す方法としては、プレイヤー名のとなりからaaaa...と連打が基本ですが、では、プレイヤー名を使わないセーブデータの場合はどう探せばいいのですか。
名前の後に連打が基本なのは、単に簡単な方法だからです。
プレーヤー名を使うのには、理由が2つあります。
1:プレーヤー名が入ったアドレスにあるデータを必ずPSPがメモリに読み込むから。
極論すれば、PSPがメモリに格納するアドレス値が分かっていればその後に続けてaaaaaと連打してもいいわけです。
ただし、効率よくやろうとするとデータの解析が必要になります。
スコアなど初めから決まったバイト数のデータが入っているところの場合、決まったバイト数分のデータしか読み込まない作りになっているかもしれませんのでaaaを連打してもそもそもそのデータ自体読みに行かないかもしれません。
プレーヤー名であっても、例えばあるアドレスから10バイト分だけメモリに格納する処理がされていた場合はいくらその後にaaaを連打してもダメです。せいぜい別の用途のはずのアドレスにaaaが入っていて処理が出来ずに止まることがあるくらいです。それは単なるクラッシュの可能性が高いです。
2:プレーヤー名であればセーブデータをバイナリエディタで開いた時にどこに自分が入力したその文字列が入っているかを簡単に検索がしやすいから。
もちろん暗号化されているままでは探せないからダメです。検索できるが故に入力したデータの格納アドレスが探しやすいのです。
ですので、プレーヤー名の所でなくてもセーブデータ内に手当たり次第aaaを入力して、あるいはスクリプト組んでの自動処理で大量の改造データを作り出すことにより、その中にバッファーオーバーフローを起こす脆弱製が見つかる可能性はあります。
aaaを入力するアドレスが1バイト分ずれただけでも挙動が変わってくるかもしれません。
とはいっても、それを一つ一つセーブデータとして読み込んで確認する作業、地道にできますか?
1つのゲームでセーブデータを大量に作り、メモリースティックに入れてはゲーム起動してPSPLinkでテスト、だめならセーブデータを入れ替えてまたテストを永遠に繰り返すのです。
結果が出るかもしれませんし、何も出ないかもしれません。分からないけどひたすら続ける...これは時間の無駄です。
ですから、データ解析までしないつもりであればプレーヤー名を入力しないゲームの場合さっさとあきらめて別のゲームで探してみる方が効率的です。
ちなみにaaa...ではなく、例えばPlaystationPortableと入れても構いませんよ。ただし16進数で
50 6C 61 79 73 74 61 74 69 6F 6E 50 6F 72 74 61 62 6C 65 (PlaystationPortable)
のうちのどこかがPSPLinkのレジスタで表示されるわけですから探す方が面倒です。
だからaaaa($61616161)にしているだけです。AAAでもeeeでもなんでも構いません。連続した同じ文字の方が楽です。