Задание:

Собери меня.
Формат флага — “RUCTF_.*”

Итак, был дан исходный файл на c++. Нужно было его собрать. Задача бы крайне упростилась, если бы из исходника не были вырезаны инклюды. Путем анализа ошибок от g++ были получены следующие зависимости:

spidermonkey, nspr, snappy, libhangul, blitz, botan, blitz, mhash, libsnappy, mozilla spidermonkey, zopfli, botan.

Устанавливаем необходимые библиотеки. Отдельное спасибо homebrew, большинство библиотек установилось путём “brew install package” ;) Чего не было в homebrew – скачали, распаковали. Далее несколько муторное дело – собрать итоговую строку компиляции. В теории, можно было использовать autoconf, но у меня нет должного опыта работы с ними, так что пришлось это делать вручную. Вот такая строка в итоге у меня получилась.

#!/bin/bash
g++ source.cpp -I/usr/local/Cellar/mhash/0.9.9.9/include -I/usr/local/Cellar/spidermonkey/1.8.5/include -I/usr/local/Cellar/nspr/4.10/include/nspr -I/usr/local/Cellar/snappy/1.1.1/include \
-I/Users/headhunter/work/ctf/compile/libhangul-0.1.0/hangul \
-I/usr/local/Cellar/blitz/0.10/include \
-I/usr/local/include/botan-1.10 \
-Wmissing-declarations \
-lblitz -lmhash \
/usr/local/Cellar/snappy/1.1.1/lib/libsnappy.a \
`pkg-config mozjs185 --libs` \
/Users/headhunter/work/ctf/compile/zopfli/blocksplitter.c \
/Users/headhunter/work/ctf/compile/zopfli/cache.c \
/Users/headhunter/work/ctf/compile/zopfli/deflate.c \
/Users/headhunter/work/ctf/compile/zopfli/gzip_container.c \
/Users/headhunter/work/ctf/compile/zopfli/hash.c \
/Users/headhunter/work/ctf/compile/zopfli/katajainen.c \
/Users/headhunter/work/ctf/compile/zopfli/lz77.c \
/Users/headhunter/work/ctf/compile/zopfli/squeeze.c \
/Users/headhunter/work/ctf/compile/zopfli/tree.c \
/Users/headhunter/work/ctf/compile/zopfli/util.c \
/Users/headhunter/work/ctf/compile/zopfli/zlib_container.c \
/Users/headhunter/work/ctf/compile/zopfli/zopfli_lib.c \
`pkg-config botan-1.10 --libs` \
`pkg-config libhangul --libs` \
/usr/local/Cellar/beecrypt/4.2.1/lib/libbeecrypt.a

Запускаем a.out – вуаля