PSP SAVEDATA CRASH

フォーラムルール
フォーラムをご利用するにあたってのルールは以下に記載してあります。
初めてご利用になる方へ:最初にお読みください

Re: PSP SAVEDATA CRASH

未読記事by mamosuke » 2010年11月28日(日) 23:24

少しPSPLinkの結果が異なるだけで次に何をどうすれば良いのか分からないと時間だけかかってしまいます。

更に個別パターンごとに指示を仰ぐととてつもなく時間がかかるので、基本だけ書きます。昔かじったことを思い出して書いているだけですので間違っていたら指摘してください。プロセッサの話は割愛します。エンディアンの話も割愛します。私はZ80時代の人間ですので8ビット超えるとオーバーフローします。そのため質問には答えられないと思います。分かる人が答えてあげてください。

数字の羅列では人間が理解できないので、それを分かるようにするための言語がアセンブラです。アセンブラでプログラムを作るのが正規のやり方だとすると、逆に数字の羅列を分かりやすくアセンブラで表示することを逆アセンブルするといいます。

EPC (Exception Program Counter)は、そこに示されたアドレスでクラッシュしていることを表しています。
そのアドレスの前後で何が起こっているのかを解析するために逆アセンブル(Disassemble)をして表示させます。
そのためのコマンド(命令)が
disasm
です。
neur0nさんがコメントしている

disasm 0x0883D65C 30 とタイプする

のは、0x0883D65Cから30行分逆アセンブルした結果を表示させてみてくれという意味です。
0x0883D65C というアドレスはどこから来ているのかと言うと、
EPC 0x0883D6AC
となっているEPCで表示されたアドレスから前に0x50分前にあるアドレスにあたります。
50というのは16進数です。10進数だと80です。
0x0883D6AC - 0x50= 0x0883D65C

逆アセンブルして気が付くと思いますが、一番左に表示されているアドレスは4バイトずつ増えています。これは4バイトづつで1つの命令になっているからです。
先ほど0x50分だけ前と言いましたが、0x50は10進数で言うと80バイトです。逆アセンブルすると1つの命令が4バイトで構成されて1行に表示されているわけですから
80 ÷ 4 = 20行分逆アセンブル結果が表示されていることになります。

さて、先ほど
disasm 0x0883D65C 30
のコマンドの時に30行分逆アセンブルと言いました。0x0883D65CというアドレスはEPCのアドレスから20行分前でしたから、EPCのアドレスから更に10行分余分に表示するということになります。

つまり、EPCで表示されたアドレスの前後で何が起こっているのかを表示させて状況を確認するためにdisasmコマンドを利用するのです。
実際何が表示されているのかと言うと、前部分には何が起こってレジスタに例えば「aaaa」と入れたものが「61616161」と入っているのかが出てきます。(必ずしも前20行にあるとは限りませんが)
後ろ部分には、その結果何が起こるのかが出てきます。

何が出てくるとexploitなのかと言うと、neur0nさんのコメントを借りると
lw $t0 0($a0)


jr $t0

となっていて、$a0がコントロール可能ならば、それはExploitになりえます。


簡単に言うと、
jr(ジャンプコマンドの一つ)の後に出てくる部分をユーザーがコントロールできれば任意の場所にジャンプさせることが出来るので、ユーザーが自分で書き換えが出来るセーブデータ部分にコードを仕込んでおき、そのコードが書かれているアドレスにジャンプさせることが自由に出来れば自作コードを実行することが出来る
ということです。

exploitかどうかの判断としては、ジャンプ命令や、分岐命令で任意のアドレスへ飛ばすことができるのかを考えてください。下にジャンプ/分岐命令の例を挙げておきます。意味はフル英文から読み取ってください。書いてあるそのまんまです。分岐は条件を満たさないといけないので使える可能性はあまり無いと思います。

ジャンプ命令
j :Jump
jal :Jump And Link
jr :Jump Register
jalr :Jump And Link Register

分岐命令
beq :Branch on Equal
bne :Branch on Not Equal
blez :Branch on Less than or Equal to Zero
bgtz :Branch on Greater Than Zero
bltz :Branch on Less Than Zero
bgez :Branch on Greater than or Equal to Zero
bltzal :Branch on Less Than Zero And Link
bgezal :Branch on Greater than or Equal to Zero And Link

「aaaa」の数を増やす減らすは、挙動を変えてみるために行っています。1バイト変えるだけでもEPCの値が変わる可能性がありますし、クラッシュアドレスが変われば全く別ものになります。
が、これ以上やってたらあと100年くらいかかるんじゃないかと思うくらいEPCの値が変わらない場合にはそのゲームはさっさと諦めるか、全く異なるアドレスへの文字入力を狙ってみた方が良いでしょう。

exploitは$raをコントロールできるものである、という表面的な定義だけで理解していると、$raがコントロールできないexploit探しのような時に応用がきかず全く理解できなくなります。
基本さえ理解していればなんとなく分かるものです。また、この話が理解できていれば「これはexploitですか?」という質問はする必要がなくなります。
mamosuke
管理人
 
記事: 270
登録日時: 2009年12月08日(火) 01:11

Re: PSP SAVEDATA CRASH

スポンサードリンク

スポンサードリンク
 

Re: PSP SAVEDATA CRASH

未読記事by j416 » 2010年11月29日(月) 01:07

qwertyu さんが書きました:了解しました。少しずつ増やしてみます。

一つ目はやるなら長くするのがいいかと。
HPは自宅鯖に移転しました。
http://j416.dip.jp/
j416
 
記事: 76
登録日時: 2010年1月11日(月) 10:04
お住まい: 日本

Re: PSP SAVEDATA CRASH

未読記事by qwertyu » 2010年12月09日(木) 19:59

みなさん解説ありがとうございます。
2000バイト以上入れましたが変化はありませんでした。入れる場所を変えみたりもしましたが、同じような結果になりました。
またもう一方のほうもいろいろ試してみます。
qwertyu
 
記事: 30
登録日時: 2010年4月27日(火) 20:16

Re: PSP SAVEDATA CRASH

未読記事by iSn0wX » 2010年12月16日(木) 22:22

私もqwertyu氏と同じクラッシュを発見したため、調査中です。
その2のクラッシュのゲームと同一タイトルです。
現在は、
"$s0だけコントロール可能"
"$s0のコントロールは不可能だが、$v1と$s2がコントロール可能"
このような状態です。
これからもっと調べていこうと思っています。
Twitterやってます。
http://twitter.com/volotax_v3

ブログもお願いします。
http://volotax.blog59.fc2.com/
アバター
iSn0wX
 
記事: 35
登録日時: 2010年10月30日(土) 21:38
お住まい: 愛知県名古屋市

Re: PSP SAVEDATA CRASH

未読記事by iSn0wX » 2010年12月17日(金) 18:28

$s0だけコントロールできている状態。
PSPLink01.jpg

$v1と$s2のコントロールができている状態。
PSPlink02.jpg

どうすればいいでしょうか?
Twitterやってます。
http://twitter.com/volotax_v3

ブログもお願いします。
http://volotax.blog59.fc2.com/
アバター
iSn0wX
 
記事: 35
登録日時: 2010年10月30日(土) 21:38
お住まい: 愛知県名古屋市

Re: PSP SAVEDATA CRASH

未読記事by neur0n » 2010年12月17日(金) 18:40

iSn0wX さんが書きました:$s0だけコントロールできている状態。
$v1と$s2のコントロールができている状態。
どうすればいいでしょうか?


一つ目は

disasm 0x088135B0 50

二つ目は

disasm 0x08824B88 50

と打って、その結果を貼ってもらえますか?
        \     テーレッテー    /
          \  ∧_∧   /
            |∩( ・ω・)∩|<・・・
          / 丶    | / \     
        /     ( ⌒つ´)    \
neur0n
 
記事: 88
登録日時: 2010年6月09日(水) 13:48
お住まい: 関東甲信越

Re: PSP SAVEDATA CRASH

未読記事by iSn0wX » 2010年12月17日(金) 18:49

neur0n さんが書きました:
iSn0wX さんが書きました:$s0だけコントロールできている状態。
$v1と$s2のコントロールができている状態。
どうすればいいでしょうか?


一つ目は

disasm 0x088135B0 50

二つ目は

disasm 0x08824B88 50

と打って、その結果を貼ってもらえますか?


1つ目です。

disasm 0x088135B0 50
0x088135B0: 0x0A204D3A ':M .' - j 0x088134E8
0x088135B4: 0x00003021 '!0..' - move $a2, $zr
0x088135B8: 0x27BDFFF0 '...'' - addiu $sp, $sp, -16
0x088135BC: 0xAFB10004 '....' - sw $s1, 4($sp)
0x088135C0: 0x00808821 '!...' - move $s1, $a0
0x088135C4: 0xAFB00000 '....' - sw $s0, 0($sp)
0x088135C8: 0x00A08021 '!...' - move $s0, $a1
0x088135CC: 0x10A00043 'C...' - beqz $a1, 0x088136DC
0x088135D0: 0xAFBF0008 '....' - sw $ra, 8($sp)
0x088135D4: 0x0E20557E '~U .' - jal 0x088155F8
0x088135D8: 0x00000000 '....' - nop
0x088135DC: 0x260AFFF8 '...&' - addiu $t2, $s0, -8
0x088135E0: 0x8D430004 '..C.' - lw $v1, 4($t2)
0x088135E4: 0x3C0D08AC '...<' - lui $t5, 0x8AC
0x088135E8: 0x25AB3C24 '$<.%' - addiu $t3, $t5, 15396
0x088135EC: 0x00604021 '!@`.' - move $t0, $v1
0x088135F0: 0x7C080004 '...|' - ins $t0, $zr, 0, 1
0x088135F4: 0x01482021 '! H.' - addu $a0, $t2, $t0
0x088135F8: 0x8C890004 '....' - lw $t1, 4($a0)
0x088135FC: 0x8D620008 '..b.' - lw $v0, 8($t3)
0x08813600: 0x10820075 'u...' - beq $a0, $v0, 0x088137D8
0x08813604: 0x7C090804 '...|' - ins $t1, $zr, 0, 2
0x08813608: 0x30620001 '..b0' - andi $v0, $v1, 0x1
0x0881360C: 0xAC890004 '....' - sw $t1, 4($a0)
0x08813610: 0x1440000A '..@.' - bnez $v0, 0x0881363C
0x08813614: 0x00006021 '!`..' - move $t4, $zr
0x08813618: 0x8E05FFF8 '....' - lw $a1, -8($s0)
0x0881361C: 0x25620008 '..b%' - addiu $v0, $t3, 8
0x08813620: 0x01455023 '#PE.' - subu $t2, $t2, $a1
0x08813624: 0x8D430008 '..C.' - lw $v1, 8($t2)
0x08813628: 0x10620069 'i.b.' - beq $v1, $v0, 0x088137D0
0x0881362C: 0x01054021 '!@..' - addu $t0, $t0, $a1
0x08813630: 0x8D47000C '..G.' - lw $a3, 12($t2)
0x08813634: 0xACE30008 '....' - sw $v1, 8($a3)
0x08813638: 0xAC67000C '..g.' - sw $a3, 12($v1)
0x0881363C: 0x00891821 '!...' - addu $v1, $a0, $t1
0x08813640: 0x8C620004 '..b.' - lw $v0, 4($v1)
0x08813644: 0x30420001 '..B0' - andi $v0, $v0, 0x1
0x08813648: 0x1440000C '..@.' - bnez $v0, 0x0881367C
0x0881364C: 0x35020001 '...5' - ori $v0, $t0, 0x1
0x08813650: 0x1580005D ']...' - bnez $t4, 0x088137C8
0x08813654: 0x01094021 '!@..' - addu $t0, $t0, $t1
0x08813658: 0x8C830008 '....' - lw $v1, 8($a0)
0x0881365C: 0x3C0208AC '...<' - lui $v0, 0x8AC
0x08813660: 0x24423C2C ',<B$' - addiu $v0, $v0, 15404
0x08813664: 0x50620053 'S.bP' - beql $v1, $v0, 0x088137B4
0x08813668: 0x240C0001 '...$' - li $t4, 1
0x0881366C: 0x8C87000C '....' - lw $a3, 12($a0)
0x08813670: 0xACE30008 '....' - sw $v1, 8($a3)
0x08813674: 0xAC67000C '..g.' - sw $a3, 12($v1)
Twitterやってます。
http://twitter.com/volotax_v3

ブログもお願いします。
http://volotax.blog59.fc2.com/
アバター
iSn0wX
 
記事: 35
登録日時: 2010年10月30日(土) 21:38
お住まい: 愛知県名古屋市

Re: PSP SAVEDATA CRASH

未読記事by minomushi » 2010年12月17日(金) 18:54

iSn0wX さんが書きました:
disasm 0x088135B0 50
0x088135B0: 0x0A204D3A ':M .' - j 0x088134E8
0x088135B4: 0x00003021 '!0..' - move $a2, $zr
0x088135B8: 0x27BDFFF0 '...'' - addiu $sp, $sp, -16
0x088135BC: 0xAFB10004 '....' - sw $s1, 4($sp)
0x088135C0: 0x00808821 '!...' - move $s1, $a0
0x088135C4: 0xAFB00000 '....' - sw $s0, 0($sp)
0x088135C8: 0x00A08021 '!...' - move $s0, $a1
0x088135CC: 0x10A00043 'C...' - beqz $a1, 0x088136DC
0x088135D0: 0xAFBF0008 '....' - sw $ra, 8($sp)
0x088135D4: 0x0E20557E '~U .' - jal 0x088155F8
0x088135D8: 0x00000000 '....' - nop
0x088135DC: 0x260AFFF8 '...&' - addiu $t2, $s0, -8
0x088135E0: 0x8D430004 '..C.' - lw $v1, 4($t2)
0x088135E4: 0x3C0D08AC '...<' - lui $t5, 0x8AC
0x088135E8: 0x25AB3C24 '$<.%' - addiu $t3, $t5, 15396
0x088135EC: 0x00604021 '!@`.' - move $t0, $v1
0x088135F0: 0x7C080004 '...|' - ins $t0, $zr, 0, 1
0x088135F4: 0x01482021 '! H.' - addu $a0, $t2, $t0
0x088135F8: 0x8C890004 '....' - lw $t1, 4($a0)
0x088135FC: 0x8D620008 '..b.' - lw $v0, 8($t3)
0x08813600: 0x10820075 'u...' - beq $a0, $v0, 0x088137D8
0x08813604: 0x7C090804 '...|' - ins $t1, $zr, 0, 2
0x08813608: 0x30620001 '..b0' - andi $v0, $v1, 0x1
0x0881360C: 0xAC890004 '....' - sw $t1, 4($a0)
0x08813610: 0x1440000A '..@.' - bnez $v0, 0x0881363C
0x08813614: 0x00006021 '!`..' - move $t4, $zr
0x08813618: 0x8E05FFF8 '....' - lw $a1, -8($s0)
0x0881361C: 0x25620008 '..b%' - addiu $v0, $t3, 8
0x08813620: 0x01455023 '#PE.' - subu $t2, $t2, $a1
0x08813624: 0x8D430008 '..C.' - lw $v1, 8($t2)
0x08813628: 0x10620069 'i.b.' - beq $v1, $v0, 0x088137D0
0x0881362C: 0x01054021 '!@..' - addu $t0, $t0, $a1
0x08813630: 0x8D47000C '..G.' - lw $a3, 12($t2)
0x08813634: 0xACE30008 '....' - sw $v1, 8($a3)
0x08813638: 0xAC67000C '..g.' - sw $a3, 12($v1)
0x0881363C: 0x00891821 '!...' - addu $v1, $a0, $t1
0x08813640: 0x8C620004 '..b.' - lw $v0, 4($v1)
0x08813644: 0x30420001 '..B0' - andi $v0, $v0, 0x1
0x08813648: 0x1440000C '..@.' - bnez $v0, 0x0881367C
0x0881364C: 0x35020001 '...5' - ori $v0, $t0, 0x1
0x08813650: 0x1580005D ']...' - bnez $t4, 0x088137C8
0x08813654: 0x01094021 '!@..' - addu $t0, $t0, $t1
0x08813658: 0x8C830008 '....' - lw $v1, 8($a0)
0x0881365C: 0x3C0208AC '...<' - lui $v0, 0x8AC
0x08813660: 0x24423C2C ',<B$' - addiu $v0, $v0, 15404
0x08813664: 0x50620053 'S.bP' - beql $v1, $v0, 0x088137B4
0x08813668: 0x240C0001 '...$' - li $t4, 1
0x0881366C: 0x8C87000C '....' - lw $a3, 12($a0)
0x08813670: 0xACE30008 '....' - sw $v1, 8($a3)
0x08813674: 0xAC67000C '..g.' - sw $a3, 12($v1)



みましたが、ジャンプ命令が無いように見える上、読み込みも行われていない感じなので、厳しいでしょう。

私今、凄く疲れている状態での判断ですので間違っていたらスミマセン

追記。。。読み込み命令はあり読み込まれていました。
スミマセン。
しかし、ジャンプ命令が無いっぽい・・
最後に編集したユーザー minomushi [ 2010年12月17日(金) 18:56 ], 累計 1 回
minomushi
 
記事: 97
登録日時: 2010年9月12日(日) 13:27
お住まい: 日本だと、思うんだが・・・・・・・・違うのか?

Re: PSP SAVEDATA CRASH

未読記事by iSn0wX » 2010年12月17日(金) 18:55

neur0n さんが書きました:
iSn0wX さんが書きました:$s0だけコントロールできている状態。
$v1と$s2のコントロールができている状態。
どうすればいいでしょうか?


一つ目は

disasm 0x088135B0 50

二つ目は

disasm 0x08824B88 50

と打って、その結果を貼ってもらえますか?

2つ目です。お願いします。

disasm 0x08824B88 50
0x08824B88: 0x00000000 '....' - nop
0x08824B8C: 0x8F390014 '..9.' - lw $t9, 20($t9)
0x08824B90: 0x0320F809 '.. .' - jalr $t9
0x08824B94: 0x00000000 '....' - nop
0x08824B98: 0x8EA30008 '....' - lw $v1, 8($s5)
0x08824B9C: 0x1060001A '..`.' - beqz $v1, 0x08824C08
0x08824BA0: 0x00000000 '....' - nop
0x08824BA4: 0x8EB20010 '....' - lw $s2, 16($s5)
0x08824BA8: 0x26B0000C '...&' - addiu $s0, $s5, 12
0x08824BAC: 0x26B10014 '...&' - addiu $s1, $s5, 20
0x08824BB0: 0x12500013 '..P.' - beq $s2, $s0, 0x08824C00
0x08824BB4: 0xAEB20014 '....' - sw $s2, 20($s5)
0x08824BB8: 0x8E440008 '..D.' - lw $a0, 8($s2)
0x08824BBC: 0x02802821 '!(..' - move $a1, $s4
0x08824BC0: 0x0E2092B6 '.. .' - jal 0x08824AD8
0x08824BC4: 0x02603021 '!0`.' - move $a2, $s3
0x08824BC8: 0x8EA30008 '....' - lw $v1, 8($s5)
0x08824BCC: 0x5060000D '..`P' - beqzl $v1, 0x08824C04
0x08824BD0: 0x26A3000C '...&' - addiu $v1, $s5, 12
0x08824BD4: 0x8E240000 '..$.' - lw $a0, 0($s1)
0x08824BD8: 0x26A3000C '...&' - addiu $v1, $s5, 12
0x08824BDC: 0x10830008 '....' - beq $a0, $v1, 0x08824C00
0x08824BE0: 0x00000000 '....' - nop
0x08824BE4: 0x54920004 '...T' - bnel $a0, $s2, 0x08824BF8
0x08824BE8: 0x8E320000 '..2.' - lw $s2, 0($s1)
0x08824BEC: 0x8C830004 '....' - lw $v1, 4($a0)
0x08824BF0: 0xAE230000 '..#.' - sw $v1, 0($s1)
0x08824BF4: 0x8E320000 '..2.' - lw $s2, 0($s1)
0x08824BF8: 0x5650FFF0 '..PV' - bnel $s2, $s0, 0x08824BBC
0x08824BFC: 0x8E440008 '..D.' - lw $a0, 8($s2)
0x08824C00: 0x26A3000C '...&' - addiu $v1, $s5, 12
0x08824C04: 0xAE230000 '..#.' - sw $v1, 0($s1)
0x08824C08: 0x8FBF001C '....' - lw $ra, 28($sp)
0x08824C0C: 0x8FB50018 '....' - lw $s5, 24($sp)
0x08824C10: 0x8FB40014 '....' - lw $s4, 20($sp)
0x08824C14: 0x8FB30010 '....' - lw $s3, 16($sp)
0x08824C18: 0x8FB2000C '....' - lw $s2, 12($sp)
0x08824C1C: 0x8FB10008 '....' - lw $s1, 8($sp)
0x08824C20: 0x8FB00004 '....' - lw $s0, 4($sp)
0x08824C24: 0x03E00008 '....' - jr $ra
0x08824C28: 0x27BD0030 '0..'' - addiu $sp, $sp, 48
0x08824C2C: 0x03E00008 '....' - jr $ra
0x08824C30: 0x00000000 '....' - nop
0x08824C34: 0x03E00008 '....' - jr $ra
0x08824C38: 0x00000000 '....' - nop
0x08824C3C: 0x03E00008 '....' - jr $ra
0x08824C40: 0x00000000 '....' - nop
0x08824C44: 0x27BDFFD0 '...'' - addiu $sp, $sp, -48
0x08824C48: 0xAFBF001C '....' - sw $ra, 28($sp)
0x08824C4C: 0xAFB60018 '....' - sw $s6, 24($sp)
Twitterやってます。
http://twitter.com/volotax_v3

ブログもお願いします。
http://volotax.blog59.fc2.com/
アバター
iSn0wX
 
記事: 35
登録日時: 2010年10月30日(土) 21:38
お住まい: 愛知県名古屋市

Re: PSP SAVEDATA CRASH

未読記事by iSn0wX » 2010年12月17日(金) 18:57

minomushi さんが書きました:みましたが、ジャンプ命令が無いように見える上、読み込みも行われていない感じなので、厳しいでしょう。

私今、凄く疲れている状態での判断ですので間違っていたらスミマセン

追記。。。読み込み命令はあり読み込まれていました。
スミマセン。
しかし、ジャンプ命令が無いっぽい・・


そうですか・・・
いろいろ試してみようと思います。
ありがとうございます。
Twitterやってます。
http://twitter.com/volotax_v3

ブログもお願いします。
http://volotax.blog59.fc2.com/
アバター
iSn0wX
 
記事: 35
登録日時: 2010年10月30日(土) 21:38
お住まい: 愛知県名古屋市

1つ前へ次へ

Return to PSP Hack

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[23人]

cron