TsukuCTF23- Writeup

# Misc
## build_error
以下のファイルが渡される。このファイルをうまいこと実行出来たらFlagゲットできるらしい。
+ main.o
+ one.o
+ Makefile

実行ファイル作るためにmakeした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/e99ce628-3891-8de5-63cb-e7684a6003a9.png)
a, bないので無理いわれる。
Ghidraで見る。
main.o
![スクリーンショット 2023-12-09 225709.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/e1480744-500b-023a-4b68-6a942df5cfee.png)
one.o
![スクリーンショット 2023-12-09 225720.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/5012d218-9e44-0858-a788-d10425df7792.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/f9806d19-1c6f-0f0f-a579-e0df74124c8e.png)
Exportsできてませんね。

新たに定義して一緒にコンパイルする。
```c:definitions.c
int a = 0xb;
int b = 0xc;
```
フラグ判定でabcの和を聞かれ正誤判定されるが、
別にaとbが合ってる必要ないので適当にやって動的解析する方向にします。
Makefileも適当に書き直します。
```make:Makefile
CC=gcc  
OBJ=main.o one.o definitions.o  
TARGET=main

all:$(TARGET)

$(TARGET):$(OBJ)
	$(CC) -o $(TARGET) $(OBJ) -no-pie

definitions.o: definitions.c
	$(CC) -c definitions.c
```
後は出来たファイルを解析します。
flag判定のところにBreakPointつけて回します。
```bash
┌──(root㉿kali)-[/home/kali/Downloads]
└─# gdb main
Reading symbols from main...
(No debugging symbols found in main)
gdb-peda$ disass main
Dump of assembler code for function main:
   0x0000000000401136 <+0>:	push   rbp
   0x0000000000401137 <+1>:	mov    rbp,rsp
   0x000000000040113a <+4>:	sub    rsp,0x30
   0x000000000040113e <+8>:	mov    QWORD PTR [rbp-0x28],0xc
   0x0000000000401146 <+16>:	mov    QWORD PTR [rbp-0x20],0xb
   0x000000000040114e <+24>:	mov    QWORD PTR [rbp-0x18],0x4b
   0x0000000000401156 <+32>:	mov    QWORD PTR [rbp-0x10],0x0
   0x000000000040115e <+40>:	mov    QWORD PTR [rbp-0x8],0x0
   0x0000000000401166 <+48>:	call   0x40121a <one_init>
   0x000000000040116b <+53>:	mov    DWORD PTR [rbp-0x2c],0x0
   0x0000000000401172 <+60>:	jmp    0x40119d <main+103>
   0x0000000000401174 <+62>:	mov    eax,DWORD PTR [rbp-0x2c]
   0x0000000000401177 <+65>:	cdqe
   0x0000000000401179 <+67>:	cmp    QWORD PTR [rbp-0x28],rax
   0x000000000040117d <+71>:	jle    0x401184 <main+78>
   0x000000000040117f <+73>:	add    QWORD PTR [rbp-0x18],0x1
   0x0000000000401184 <+78>:	mov    eax,DWORD PTR [rbp-0x2c]
   0x0000000000401187 <+81>:	cdqe
   0x0000000000401189 <+83>:	cmp    QWORD PTR [rbp-0x18],rax
   0x000000000040118d <+87>:	jge    0x401194 <main+94>
   0x000000000040118f <+89>:	add    QWORD PTR [rbp-0x20],0x1
   0x0000000000401194 <+94>:	add    QWORD PTR [rbp-0x28],0x1
   0x0000000000401199 <+99>:	add    DWORD PTR [rbp-0x2c],0x1
   0x000000000040119d <+103>:	mov    eax,DWORD PTR [rbp-0x2c]
   0x00000000004011a0 <+106>:	cdqe
   0x00000000004011a2 <+108>:	cmp    QWORD PTR [rbp-0x20],rax
   0x00000000004011a6 <+112>:	jg     0x401174 <main+62>
   0x00000000004011a8 <+114>:	mov    rdx,QWORD PTR [rbp-0x28]
   0x00000000004011ac <+118>:	mov    rax,QWORD PTR [rbp-0x20]
   0x00000000004011b0 <+122>:	add    rdx,rax
   0x00000000004011b3 <+125>:	mov    rax,QWORD PTR [rbp-0x18]
   0x00000000004011b7 <+129>:	add    rax,rdx
   0x00000000004011ba <+132>:	mov    QWORD PTR [rbp-0x10],rax
   0x00000000004011be <+136>:	mov    rdx,QWORD PTR [rip+0x2e5b]        # 0x404020 <a>
   0x00000000004011c5 <+143>:	mov    rax,QWORD PTR [rip+0x2e58]        # 0x404024 <b>
   0x00000000004011cc <+150>:	add    rdx,rax
   0x00000000004011cf <+153>:	mov    rax,QWORD PTR [rip+0x2e5a]        # 0x404030 <c>
   0x00000000004011d6 <+160>:	add    rax,rdx
   0x00000000004011d9 <+163>:	mov    QWORD PTR [rbp-0x8],rax
   0x00000000004011dd <+167>:	mov    rax,QWORD PTR [rbp-0x8]
   0x00000000004011e1 <+171>:	cmp    QWORD PTR [rbp-0x10],rax
   0x00000000004011e5 <+175>:	jne    0x401204 <main+206>
   0x00000000004011e7 <+177>:	mov    rax,QWORD PTR [rbp-0x10]
   0x00000000004011eb <+181>:	mov    rsi,rax
   0x00000000004011ee <+184>:	lea    rax,[rip+0xe0f]        # 0x402004
   0x00000000004011f5 <+191>:	mov    rdi,rax
   0x00000000004011f8 <+194>:	mov    eax,0x0
   0x00000000004011fd <+199>:	call   0x401040 <printf@plt>
   0x0000000000401202 <+204>:	jmp    0x401213 <main+221>
   0x0000000000401204 <+206>:	lea    rax,[rip+0xe06]        # 0x402011
   0x000000000040120b <+213>:	mov    rdi,rax
   0x000000000040120e <+216>:	call   0x401030 <puts@plt>
   0x0000000000401213 <+221>:	mov    eax,0x0
   0x0000000000401218 <+226>:	leave
   0x0000000000401219 <+227>:	ret
End of assembler dump.
gdb-peda$ b *0x00000000004011e1
Breakpoint 1 at 0x4011e1
gdb-peda$ 
```
![スクリーンショット 2023-12-09 225844.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/0b2c7658-8d1b-26be-5391-9b4a88d945fc.png)
`rbp-0x10`のとこ`0x7fffffffe180`のアドレスに答えが入ってます。
`120`です。

__TsukuCTF23{120}__

## content_sign
以下のファイルが渡されます。Autherと編集日時を答えるみたいデス。
+ signed_flag.png

とりあえずstrings見ます。
![スクリーンショット 2023-12-10 203656.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/237e7166-39df-c4d2-a76d-209bebd63e14.png)
`C2PA`の文字があるので以下入れます。

https://github.com/contentauth/c2patool

https://gigazine.net/news/20220615-adobe-content-authenticity-open-source/

回します。
```bash
┌──(root㉿kali)-[/home/kali/Downloads]
└─# c2patool signed_flag.png         
{
  "active_manifest": "urn:uuid:632a603d-06bf-4660-ac5a-e94f41f61040",
  "manifests": {
    "urn:uuid:d67f9244-8583-43d2-bdb6-12082bbb76e7": {
      "claim_generator": "CanUseeMe c2patool/0.7.0 c2pa-rs/0.28.3",
      "title": "Tsukuctf_20XX",
      "format": "image/png",
      "instance_id": "xmp:iid:e18e08ca-8259-4226-988e-7ed2f58e1010",
      "thumbnail": {
        "format": "image/png",
        "identifier": "self#jumbf=c2pa.assertions/c2pa.thumbnail.claim.png"
      },
      "ingredients": [],
      "assertions": [
        {
          "label": "stds.schema-org.CreativeWork",
          "data": {
            "@context": "https://schema.org",
            "@type": "CreativeWork",
            "author": [
              {
                "@type": "Person",
                "name": "TSUKU4_IS_H@CKER"
              }
            ]
          },
          "kind": "Json"

...省略
```
答えのフラグ形式を組み合わせるだけ。

__TsukuCTF23{TSUKU4_IS_H@CKER&2023-12-08T13:00:26+00:00}__

### idiot
見つけたので残しておきます（ﾆｯｺﾘ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/1f09da8e-325f-d127-47e3-7c93e3280b52.png)

https://www.youtube.com/watch?v=48rz8udZBmQ

![スクリーンショット 2023-12-10 182908.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/cb3717d6-4481-f476-9eba-713667564379.png)

# ここから解けなかったやつ
## Rev - title_screen
NESのファミコンのアセンブリっぽい。初めて見た。
とりあえずエミュレートする。
![スクリーンショット 2023-12-09 202216.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/98daeb8f-8605-2fae-c0c2-f5d150a3f312.png)
chr作成。
nesファイル作る。
```bash
┌──(root㉿kali)-[/home/kali/Downloads/source_code]
└─# ca65 main.asm -o main.o

┌──(root㉿kali)-[/home/kali/Downloads/source_code]
└─# ld65 main.o -C main.cfg -o main.nes
ld65: Warning: main.cfg(5): Segment 'CHARS' overflows memory area 'ROMCHR' by 8192 bytes
ld65: Error: Cannot generate most of the files due to memory area overflow 
```
メモリ足りないって言われるので`cfg`を編集する。
```cfc:main.cfg
MEMORY {
    HEADER:       start = $0000, size = $0010, file = %O, fill = yes;
    ROMST:        start = $8000, size = $7ffa, type = ro, file = %O, fill = yes, define = yes;
    ROMINFO:      start = $fffa, size = $0006, type = ro, file = %O, fill = yes, define = yes;
    ROMCHR:       start = $0000, size = $4000, type = rw, define = yes; //ここ編集

}

SEGMENTS {
    HEADER:       load = HEADER,       type = ro;
    STARTUP:      load = ROMST,        type = ro,    define = yes;
    VECINFO:      load = ROMINFO,      type = ro,    define = yes;
    CHARS:        load = ROMCHR,       type = rw;
}

FEATURES {
    CONDES: segment = RODATA,
        type = constructor,
        label = __CONSTRUCTOR_TABLE__,
        count = __CONSTRUCTOR_COUNT__;
    CONDES: segment = RODATA,
        type = destructor,
        label = __DESTRUCTOR_TABLE__,
        count = __DESTRUCTOR_COUNT__;
}
```
これでnesファイルが出来るので回してみる。
エミュレータは以下を利用した。

https://github.com/SourMesen/Mesen

![スクリーンショット 2023-12-10 163146.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/bcea6219-e061-8ba0-e230-d9498f2accb7.png)

はい？？？？
ここからchrファイル作成地獄に突入する。
こんな感じで読めそうにないピクセルを削除していく。
![スクリーンショット 2023-12-10 131511.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/4bae5818-56dd-4b1b-077f-c40984dc8a08.png)


以下は私が作成した芸術作品たちである。
是非ともここで供養させてほしい。

### エントリーナンバー1 - いそいそ
![スクリーンショット 2023-12-10 132924.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/cd033168-9b75-2f4c-c274-2697719f177d.png)

### エントリーナンバー2 - よしよさ
![スクリーンショット 2023-12-10 135752.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/d48cc903-fd55-09da-65ed-54c70fb5f0c6.png)

### エントリーナンバー3 - 8888
![スクリーンショット 2023-12-10 140302.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/d41703cb-ab8b-89f4-4da9-4f5b86db25f5.png)

### エントリーナンバー4 - よしよ
![スクリーンショット 2023-12-10 141048.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/4716856c-3871-f1a7-102b-86db75f852a8.png)

### エントリーナンバー5 - Lv1
![スクリーンショット 2023-12-10 152924.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/b6f96a1b-4871-c9f5-20c6-7f2edc420d4e.png)

### エントリーナンバー6 - X
![スクリーンショット 2023-12-10 162102.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/2fdc7023-3b43-5ad8-f311-1a044ed807f2.png)

### エントリーナンバー7 - ここここここここここここここここここここここここ
![スクリーンショット 2023-12-10 163146.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/dc741186-a5d8-f21f-f637-fcda17302402.png)

NES難しい。
なんもわからん。
正解は`asm`に書いてあるこの`data`のマッピングと`bmp`を比べるだけらしい。
なんもわからん。
![スクリーンショット 2023-12-10 195802.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/a0259070-0b9f-80ae-88fb-e784f310b1fa.png)
![スクリーンショット 2023-12-10 195649.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/48b13796-5b4a-ff0c-859f-e603437f44f6.png)
おそらく問題設定として「`bmp`から`chr`作る」のではなく、「昔作った`chr`の名残で出てきた`bmp`」が問題の`bmp`ファイルだからこの方法でのエミュレートではそもそも問題の趣旨と違うので間違った答えが出るのだと思う。
その発想はなかった。頭カチコチ。

# まとめ
![スクリーンショット 2023-12-10 205709.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/fc6b4a13-04da-0674-6d59-26e1e9d1ae9d.png)

チームのPro OSINTerたちのお陰で初めて一桁台の順位にいきました！！！
とても楽しかった！！！
（次回からは自分も貢献できるように頑張ります。）