Forensicsmedium
Cyber Squirrel's Secret
by Pavel Knespl (capyplivl)
The .zip is actually a Krita document (.kra). The flag is split one character per hidden vector layer, so it never shows in the rendered preview. Sort the glyphs by x position to read it.
Solve
- Confirm the true type and unzip:
file finalsvibgr.zip
unzip finalsvibgr.zip -d extracted
file reports Zip data with MIME type application/x-krita.
2. Each hidden layer is a finalsvi/layers/*.shapelayer/content.svg holding one <text> glyph. Extract every glyph and order by SVG x coordinate:
import glob, re, html
items = []
for f in glob.glob("extracted/finalsvi/layers/*.shapelayer/content.svg"):
data = open(f, encoding="utf-8", errors="replace").read()
m = re.search(r"<text\b([^>]*)>(.*?)</text>", data, re.S)
if not m:
continue
attrs, inner = m.group(1), m.group(2)
c = html.unescape(re.sub(r"<[^>]+>", "", inner)).strip()
if not c:
continue
tm = re.search(r"translate\(([-\d.]+),", attrs)
mm = re.search(r"matrix\([-\d.eE]+\s+[-\d.eE]+\s+[-\d.eE]+\s+[-\d.eE]+\s+([-\d.eE]+)", attrs)
x = float(tm.group(1)) if tm else (float(mm.group(1)) if mm else 0.0)
items.append((x, c))
items.sort()
print("".join(c for _, c in items))
- Run it:
python3 solve.py extracted
Flag: SVIBGR{Kik!_s@y$_T3ch_w/_<3!}