Forensics
tiny_10px
(゜◇゜)ガーン
簡単な問題をやってなかった。
体力的にギブアップして、問題のダウンロードすらしてなかった。
ダウンロードした画像
さすがに小さすぎて、サイズの問題とすぐに気付くだろう
JPGのサイズの場所は 0xFFC0 を検索して少し先
黄色でマーカーしたところ
000a x 000a だ(だから問題名が10pxね)
試行錯誤で
0140 x 0140 に
縦は、25%
横は、50%
くらいか
0070 x 00A0 に
Reversing
home
他の人のWriteup 見ると、私が解けなかった原因がよくわからない。
疲れて視力低下が原因?
とにかく、復習する。
pdisass main
gdb-peda$ pdisass main
Dump of assembler code for function main:
0x0000555555555977 <+0>: endbr64
0x000055555555597b <+4>: push rbp
0x000055555555597c <+5>: mov rbp,rsp
=> 0x000055555555597f <+8>: sub rsp,0x410
0x0000555555555986 <+15>: mov rax,QWORD PTR fs:0x28
0x000055555555598f <+24>: mov QWORD PTR [rbp-0x8],rax
0x0000555555555993 <+28>: xor eax,eax
0x0000555555555995 <+30>: lea rax,[rbp-0x410]
0x000055555555599c <+37>: mov esi,0x400
0x00005555555559a1 <+42>: mov rdi,rax
0x00005555555559a4 <+45>: call 0x555555555060 <getcwd@plt>
0x00005555555559a9 <+50>: test rax,rax
0x00005555555559ac <+53>: je 0x555555555a26 <main+175>
0x00005555555559ae <+55>: lea rax,[rbp-0x410]
0x00005555555559b5 <+62>: lea rsi,[rip+0x71a] # 0x5555555560d6
0x00005555555559bc <+69>: mov rdi,rax
0x00005555555559bf <+72>: call 0x5555555550a0 <strstr@plt>
0x00005555555559c4 <+77>: test rax,rax
0x00005555555559c7 <+80>: je 0x555555555a18 <main+161>
0x00005555555559c9 <+82>: lea rdi,[rip+0x70e] # 0x5555555560de
0x00005555555559d0 <+89>: call 0x555555555030 <puts@plt>
0x00005555555559d5 <+94>: mov ecx,0x0
0x00005555555559da <+99>: mov edx,0x0
0x00005555555559df <+104>: mov esi,0x0
0x00005555555559e4 <+109>: mov edi,0x0
0x00005555555559e9 <+114>: mov eax,0x0
0x00005555555559ee <+119>: call 0x555555555080 <ptrace@plt>
0x00005555555559f3 <+124>: cmp rax,0xffffffffffffffff
0x00005555555559f7 <+128>: jne 0x555555555a0c <main+149>
0x00005555555559f9 <+130>: lea rdi,[rip+0x6ec] # 0x5555555560ec
0x0000555555555a00 <+137>: call 0x555555555030 <puts@plt>
0x0000555555555a05 <+142>: mov eax,0x1
0x0000555555555a0a <+147>: jmp 0x555555555a3e <main+199>
0x0000555555555a0c <+149>: mov eax,0x0
0x0000555555555a11 <+154>: call 0x5555555551b0 <constructFlag>
0x0000555555555a16 <+159>: jmp 0x555555555a39 <main+194>
0x0000555555555a18 <+161>: lea rdi,[rip+0x6e0] # 0x5555555560ff
0x0000555555555a1f <+168>: call 0x555555555030 <puts@plt>
0x0000555555555a24 <+173>: jmp 0x555555555a39 <main+194>
0x0000555555555a26 <+175>: lea rdi,[rip+0x6d5] # 0x555555556102
0x0000555555555a2d <+182>: call 0x555555555090 <perror@plt>
0x0000555555555a32 <+187>: mov eax,0x1
0x0000555555555a37 <+192>: jmp 0x555555555a3e <main+199>
0x0000555555555a39 <+194>: mov eax,0x0
0x0000555555555a3e <+199>: mov rdx,QWORD PTR [rbp-0x8]
0x0000555555555a42 <+203>: xor rdx,QWORD PTR fs:0x28
0x0000555555555a4b <+212>: je 0x555555555a52 <main+219>
0x0000555555555a4d <+214>: call 0x555555555040 <__stack_chk_fail@plt>
0x0000555555555a52 <+219>: leave
0x0000555555555a53 <+220>: ret
0x00005555555559ac <+53>: je 0x555555555a26 <main+175>
でジャンプさせない
0x00005555555559a9でブレークして、RAXに0x1をセット
0x5555555559c7 <main+80>: je 0x555555555a18 <main+161>
でジャンプさせない
0x00005555555559c4でブレークして、RAXに0x1をセット
0x00005555555559f7 <+128>: jne 0x555555555a0c <main+149>
でジャンプさせない
0x00005555555559f3でブレークして、RAXに0x0をセット
0x0000555555555a11 <+154>: call 0x5555555551b0 <constructFlag>
の次の行でブレーク
FLAG{を検索
gdbで入力するコマンド
b main
r
pdisass main
b *0x00005555555559a9
b *0x00005555555559c4
b *0x00005555555559f3
b *0x0000555555555a16
c
set $rax=0x1
c
set $rax=0x1
c
set $rax=0x0
c
find FLAG{
なんでこれができなかったのだろう?
不思議だ。