WaniCTF2024で解けなかった問題を勉強した記録


# Forensics
### tiny_10px

(゜◇゜)ガーン
簡単な問題をやってなかった。
体力的にギブアップして、問題のダウンロードすらしてなかった。

ダウンロードした画像

![chal_tiny_10px.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1163572/f9fbe5bf-648a-12f2-8382-3c6939c8e4a0.jpeg)

さすがに小さすぎて、サイズの問題とすぐに気付くだろう

JPGのサイズの場所は 0xFFC0 を検索して少し先
黄色でマーカーしたところ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1163572/0b5a58a4-a240-007c-2645-f15736314c48.png)

000a x 000a だ（だから問題名が10pxね）

試行錯誤で

0140 x 0140 に

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1163572/d3b74174-93dd-9c44-72d7-d7257d901008.png)

縦は、25%
横は、50%
くらいか

0070 x 00A0 に

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1163572/753bc468-d0cc-c720-54d5-2ef4dad8b964.png)

# 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{
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1163572/f28a907e-3eca-3967-8aa9-1c7e3550d1ae.png)

なんでこれができなかったのだろう？
不思議だ。