picoCTF 2022 writeup[rev]
picoCTF 2022のReverse Engineeringのwriteupです
picoCTF 2022 writeup[rev]
問題ファイルや私がかいたソルバは()にあります。
file-run1 (100pts)
実行ファイルを走らせるだけ。
$ ./run
The flag is: picoCTF{U51N6_Y0Ur_F1r57_F113_5578e314}
file-run2 (100pts)
実行ファイルを走らせるだけ2。実行時引数に"Hello!"を入れます。
$ ./run Hello!
The flag is: picoCTF{F1r57_4rgum3n7_981abfb5}
GDB Test Drive (100pts)
言われた通り、*(main+99)
で止めて*(main+104)
に飛ぶとflagを出せます。
$ gdb ./gdbme
(gdb) break *(main+99)
(gdb) run
(gdb) jump *(main+104)
picoCTF{d3bugg3r_dr1v3_93b87433}
patchme.py (100pts)
配布されたpythonプログラムを見ると、passwordはak98-=90adfjhgj321sleuth9000
であることがわかります。
$ echo ak98-=90adfjhgj321sleuth9000 | python3 patchme.flag.py
Please enter correct password for flag: Welcome back... your flag, user:
picoCTF{p47ch1ng_l1f3_h4ck_4d5af99c}
Safe Opener (100pts)
配布されたプログラムを見ると、encodedkeyがcGwzYXMzX2wzdF9tM18xbnQwX3RoM19zYWYz
であることがわかります。encode形式がbase64なので、base64デコードすればよいです。
$ echo cGwzYXMzX2wzdF9tM18xbnQwX3RoM19zYWYz | base64 -d
pl3as3_l3t_m3_1nt0_th3_saf3
picoCTF{pl3as3_l3t_m3_1nt0_th3_saf3}
unpackme.py (100pts)
printデバッグするだけ。
picoCTF{175_chr157m45_8aef58d2}
bloat.py (200pts)
printデバッグするだけ。arg133()
とかいう関数内のif文で入力とpasswordを比較していそうなので、print(a[71]+a[64]+a[79]+a[79]+a[88]+a[66]+a[71]+a[64]+a[77]+a[66]+a[68])
すればpasswordがhappychance
であるとわかります。
picoCTF{d30bfu5c4710n_f7w_c47f9e9c}
Fresh Java (200pts)
Javaのclassファイルが渡されるので、Java Decompilerに通して頑張って読みます。
picoCTF{700l1ng_r3qu1r3d_126c59f0}
Bbbloat (300pts)
angrに投げたら解いてくれました。favorite numberとして34360287623を答えるとflagが出力されます。
picoCTF{cu7_7h3_bl047_2d7aeca1}
unpackme (300pts)
upxでcompressされているので、upx -d ./unpackme-upx
でunpackしてから解析してみます。main関数を見てみると、
gdb-peda$ disas main
...
0x0000000000401eeb <+120>: mov eax,0x0
0x0000000000401ef0 <+125>: call 0x410f80 <__isoc99_scanf>
0x0000000000401ef5 <+130>: mov eax,DWORD PTR [rbp-0x3c]
0x0000000000401ef8 <+133>: cmp eax,0xb83cb
0x0000000000401efd <+138>: jne 0x401f42 <main+207>
0x0000000000401eff <+140>: lea rax,[rbp-0x30]
...
と、入力をscanfでとってからcmp
命令で比較し、何らかの値と比較して一致しなかったらjne
で遠くに飛ばしています。ここの処理をskipすればよいはずです。よって、*(main+138)
にbreakpointを置き、*(main+140)
に飛んでみます。
gdb-peda$ b *(main+138)
Breakpoint 1 at 0x401efd
gdb-peda$ r
Starting program: /home/altair626/workspace/picoctf2022/rev/unpackme/unpackme-upx
What's my favorite number? x
[----------------------------------------------------------------registers-----------------------------------------------------------------]
RAX: 0x0
RBX: 0x400530 --> 0x0
RCX: 0x0
RDX: 0x0
RSI: 0x78 (b'x')
RDI: 0x7fffffffd8c0 --> 0x0
RBP: 0x7fffffffde50 --> 0x402f50 (<__libc_csu_init>: endbr64)
RSP: 0x7fffffffde00 --> 0x7fffffffdf88 --> 0x7fffffffe1d7 ("/mnt/c/Users/ke"...)
RIP: 0x401efd (<main+138>: jne 0x401f42 <main+207>)
R8 : 0x78 (b'x')
R9 : 0x7c (b'|')
R10: 0x4df800 --> 0x4e53a0 --> 0x0
R11: 0x246
R12: 0x402ff0 (<__libc_csu_fini>: endbr64)
R13: 0x0
R14: 0x4df018 --> 0x44f220 (<__strcpy_avx2>: endbr64)
R15: 0x0
[-------------------------------------------------------------------code-------------------------------------------------------------------]
Display various information of current execution context
Usage:
context [reg,code,stack,all] [code/stack length]
Breakpoint 1, 0x0000000000401efd in main ()
gdb-peda$ jump *(main+140)
Continuing at 0x401eff.
picoCTF{up><_m3_f7w_ed7b0850}
[Inferior 1 (process 19120) exited normally]
ビンゴですね。
picoCTF{up><_m3_f7w_ed7b0850}
Keygenme (400pts)
angrに投げたら解いてくれました2。
picoCTF{br1ng_y0ur_0wn_k3y_247d8a57}
Wizardlike (500pts)
簡単な迷路ゲームが渡されますが、普通にプレイすると途中で絶対に進めないマップが出てきてしまいます。マップの形状が怪しいので、.data
領域からマップデータを取ってきて全10面あるマップを頑張って復元します。
すると、各マップにflagの断片が書かれていることがわかります。これを集めればよいです。
picoCTF{ur_4_w1z4rd_2a05d7a8}
1面 picoCTF{
#########
#.......# ......#...................................
#.......# ....................####.#####.#####..###.
#........ .####.#..###..###..#.......#...#......#...
#.......# .# #.#.#....# #.#.......#...###...#....
#.......# .####.#.#....# #.#.......#...#......#...
#.......# .#....#..###..###...####...#...#......###.
#.......# .#........................................
#.......# ..........................................
#.......#
#.......#
#.......#
#.......#
#.......#
#......>#
#########
2面 ur_4_w1z4rd_
#####. .............................................................
#.<.#. ...............#..#.............##.......#..#........#.......
#...#. .#..#.###......#..#.......#...#..#.####..#..#.###....#.......
#...#. .#..#.#........####.......#.#.#..#...#...####.#...####.......
#...#. .####.#...####....#.#####..#.#..###.####....#.#...####.#####.
. .............................................................
. .............................................................
. .............................................................
#....
#...#
#...#
#...#
#...#
#...#
#.>.#
#####
3面 2
################# .......
#<..............#. ..###..
#...............#.. .#...#.
#..............#........#..
#...#.......#...#.. ...#...
#..###.....###..#. .#####.
#...#...#...#...# .......
#......#>#......# .......
#...............#
#...#.......#...#
#..###.....###..#
#...#.......#...#
#...............#
#...............#
#...............#
#################
4面 A
... .. .......
.<. ####. ..###..
... ...#.. .#...#.
... ...#....#####.
..>#.. .#...#.
####. .#...#.
.. .......
.......
5面 0
########################
#<.............#.......#
#..............#..###..#
#..............#.#...#.#
#..............#.#...#.#
#..............#.#...#.#
#..............#..###..#
#..............#.......#
#..............#.......#
########################
################
#..............#
#..............#
#..............#
#..............#
#..............#
#..............#
#..............#
#.............>#
################
6面 5
.......
.<.....
.......
.......
.......
.......
.......
.......
.......
.......
.......
.....>.
.......
#######
.......
.#####.
.#.....
.####..
.....#.
.####..
.......
.......
7面 D
...
.<.........
...........
... ..
..
..
..
..
..
..
..............
..##########..
.# #.
.# ....... #.
.# .####.. #.
.# .#...#. #.
.# .#...#. #.
.# .#...#. #.
.# .####.. #.
.# ....... #.
.# ....... #.
.# #.
..##########..
.............>
8面 7
#########################
#<#......#.#.......###..#
#.#.###..#.#.......##..##
#.#.#.#..#.#.......#..###
#.#.#.#..#.#.......#...##
#...#....#..#......#....#
#.######.##..###.###....#
#.#.....................#
#.###.#################.#
#.......................#
#########.###.#########.#
#.......#.#.#.#.........#
#.#####.#.#...#.#########
#....#..#.#.#.#.........#
#...#...#.#.#.#########.#
#..#....#.#.#.#.........#
#..#....#.#.#.#.#########
#.......#.#.#.#.........#
#.......#.#.#.#########.#
#########.#.#.#...#...#.#
#...........#.#.#.#.#.#.#
#########...#.#.#.#.#.#.#
#.......#...#.#.#.#.#.#.#
####.####...#.#.#.#.#.#.#
##..........#.#.#.#.#.#.#
#.#..####...#.#.#.#.#.#.#
#..#....#####.#.#.#.#.#.#
#...#...#...#.#.#...#...#
#....#........#.#########
#...........#.#........>#
########################.
9面 A
... .......
.<. ..###..
... .#...#.
... .#####.
.#...#.
.#...#.
.......
.......
.
.
.
.
.
.
.
.
.
.
.
. .
..
.
.
. . .
. .
.
...
...
.>.
...
10面 8}
<...................................................................................................
................................................................................................#...
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
#####################################################################################..............#
#####################################################################################..###..###....#
#####################################################################################.#...#...#....#
#####################################################################################..###.....#...#
#####################################################################################.#...#...#....#
#####################################################################################..###..###....#
#####################################################################################..............#
#####################################################################################..............#
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
................................................................................................#...
....................................................................................................