Reversing進捗9
Reversing進捗9
- picoCTF assembly-0
- picoCTF assembly-1
picoCTF assembly-0
問題文
What does asm0(0x2a,0x4f) return? Submit the flag as a hexadecimal value (starting with '0x'). NOTE: Your submission for this question will NOT be in the normal flag format. Source located in the directory at /problems/assembly-0_3_b7d6c21be1cefd3e53335a66e7815307.
フラグの形式がpicoCTF{*********}
のテンプレではないらしい。
ソースコードが落とせるので中を見てみる。
.intel_syntax noprefix .bits 32 .global asm0 asm0: push ebp mov ebp,esp mov eax,DWORD PTR [ebp+0x8] mov ebx,DWORD PTR [ebp+0xc] mov eax,ebx mov esp,ebp pop ebp ret
機械語の基本的なことをわかっていれば簡単に溶ける問題だ。
0x2aと0x4fを
mov eax,DWORD PTR [ebp+0x8] // 0x2a mov ebx,DWORD PTR [ebp+0xc] // 0x4f
の部分に当てはめる。
mov eax,ebx
としているので、帰ってくるeax
の中には0x4f
が入っていることがわかる。
picoCTF assembly-1
問題文
What does asm1(0xc8) return? Submit the flag as a hexadecimal value (starting with '0x'). NOTE: Your submission for this question will NOT be in the normal flag format. Source located in the directory at /problems/assembly-1_4_99ac7ff5dfe75417ed616e35bfc2c023.
ソースコードの中を見る。
.intel_syntax noprefix .bits 32 .global asm1 asm1: push ebp mov ebp,esp cmp DWORD PTR [ebp+0x8],0x9a jg part_a cmp DWORD PTR [ebp+0x8],0x8 jne part_b mov eax,DWORD PTR [ebp+0x8] add eax,0x3 jmp part_d part_a: cmp DWORD PTR [ebp+0x8],0x2c jne part_c mov eax,DWORD PTR [ebp+0x8] sub eax,0x3 jmp part_d part_b: mov eax,DWORD PTR [ebp+0x8] sub eax,0x3 jmp part_d cmp DWORD PTR [ebp+0x8],0xc8 jne part_c mov eax,DWORD PTR [ebp+0x8] sub eax,0x3 jmp part_d part_c: mov eax,DWORD PTR [ebp+0x8] add eax,0x3 part_d: pop ebp ret
0xc8の返す値を調べればいいらしい(英語力不足)
[ebp+0x8]
の中が0xc8
だと思うのでそう考えながら読んでいく。
実行されるとまず引数と0x9a
を比較して分岐している部分がある。
cmp DWORD PTR [ebp+0x8],0x9a jg part_a
0xc8
と0x9a
を比較し、0x8a
が大きければpart_a
にジャンプする。
この場合は小さいのでジャンプすることなく次の処理に進む。
するとまた比較の処理が出てくる。
cmp DWORD PTR [ebp+0x8],0x8 jne part_b
今度は0xc8
と0x8
を比較し、同じでなければpart_b
へジャンプする。
0xc8
と0x8
は違う値なのでpart_b
の処理へジャンプする。
part_b: mov eax,DWORD PTR [ebp+0x8] sub eax,0x3 jmp part_d cmp DWORD PTR [ebp+0x8],0xc8 jne part_c mov eax,DWORD PTR [ebp+0x8] sub eax,0x3 jmp part_d
eax
に移動させた0xc8
から0x3
を引き、part_d
へジャンプする。
引いたので今eax
に入っている値は0xc5
になっている。
part_d: pop ebp ret
終わった・・・
ソースコードの中を延々とぐるぐるさせられると思っていたのでほっとした。
感想
もうpicoで収まる器ではなかったと感じた。