記録は作業の証

鉄道とコンピュータ

picoCTF Write-up The Numbers

問題文

https://play.picoctf.org/practice/challenge/68

The numbers... what do they mean?

考えたこと

リンクはPNG画像を指している。画像ビューアで開くと、数列が書かれている。

{や}があることから、フラグそのものの可能性がある。

色々考えたすえ、ASCIIコード表を眺めてみると、どうやら画像の数字は文字A(0x41)からの距離らしいことがわかった。

解答

Racketで復号してみる。

gistbd3dce884232c346bb074bda2fb99440

picoCTF Write-up Transformation

問題文

https://play.picoctf.org/practice/challenge/104

I wonder what this really is... enc ''.join([chr((ord(flag[i]) << 8) + ord(flag[i + 1])) for i in range(0, len(flag), 2)])

考えたこと

encというファイルには、文字化けする謎のバイナリデータが書かれている。 問題には以下のようなコード片があるが、これが暗号化に使われたコードだろう。

''.join([chr((ord(flag[i]) << 8) + ord(flag[i + 1])) for i in range(0, len(flag), 2)])

このコードのアルゴリズムは、要約すると次のようなものになる。

  • 平文を2文字ずつに区切り、Unicodeの1文字に無理矢理まとめる。
  • まとめかたは、2文字をそれぞれコードポイントに変換し、平文の先頭側を8ビット左シフトして、後尾側とビットORするもの。

ということは、逆の操作を実装すれば復号できるはず。

解答

Racketを使って復号してみることにした。

gist81fcbf8dd6172c81d919c0d37ab23a64