Misc
build_error
以下のファイルが渡される。このファイルをうまいこと実行出来たらFlagゲットできるらしい。
- main.o
- one.o
- Makefile
実行ファイル作るためにmakeした。
a, bないので無理いわれる。
Ghidraで見る。
main.o
one.o
Exportsできてませんね。
新たに定義して一緒にコンパイルする。
int a = 0xb;
int b = 0xc;
フラグ判定でabcの和を聞かれ正誤判定されるが、
別にaとbが合ってる必要ないので適当にやって動的解析する方向にします。
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つけて回します。
┌──(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$
rbp-0x10
のとこ0x7fffffffe180
のアドレスに答えが入ってます。
120
です。
TsukuCTF23{120}
content_sign
以下のファイルが渡されます。Autherと編集日時を答えるみたいデス。
- signed_flag.png
とりあえずstrings見ます。
C2PA
の文字があるので以下入れます。
回します。
┌──(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
ここから解けなかったやつ
Rev - title_screen
NESのファミコンのアセンブリっぽい。初めて見た。
とりあえずエミュレートする。
chr作成。
nesファイル作る。
┌──(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
を編集する。
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ファイルが出来るので回してみる。
エミュレータは以下を利用した。
はい????
ここからchrファイル作成地獄に突入する。
こんな感じで読めそうにないピクセルを削除していく。
以下は私が作成した芸術作品たちである。
是非ともここで供養させてほしい。
エントリーナンバー1 - いそいそ
エントリーナンバー2 - よしよさ
エントリーナンバー3 - 8888
エントリーナンバー4 - よしよ
エントリーナンバー5 - Lv1
エントリーナンバー6 - X
エントリーナンバー7 - ここここここここここここここここここここここここ
NES難しい。
なんもわからん。
正解はasm
に書いてあるこのdata
のマッピングとbmp
を比べるだけらしい。
なんもわからん。
おそらく問題設定として「bmp
からchr
作る」のではなく、「昔作ったchr
の名残で出てきたbmp
」が問題のbmp
ファイルだからこの方法でのエミュレートではそもそも問題の趣旨と違うので間違った答えが出るのだと思う。
その発想はなかった。頭カチコチ。
まとめ
チームのPro OSINTerたちのお陰で初めて一桁台の順位にいきました!!!
とても楽しかった!!!
(次回からは自分も貢献できるように頑張ります。)