ログイン
編集不可のページディスカッション情報添付ファイル

2014-12-22 02:27:21時点のリビジョン1

メッセージを消す
ytoku/CTF/Writeup/AdventCalendarCTF2014/2014-12-09

MMA

qrgarden

問題

Read a lot, and the flag begins with "ADCTF_".

qrgarden.png

解法

10000個のQRコードからADCTF_で始まっている物を探しだす問題。

下手に自作のQRコードリーダを持っていたせいで時間がかかってしまった。 作ったQRコード調査ライブラリの問題点(動作の遅さ)を気づかせてくれた問題。

   1 import Image
   2 import sys
   3 from qr import *
   4 
   5 def scan(img, top, left, msize, version):
   6     w = h = version * 4 + 17
   7     qr = []
   8     for y in range(h):
   9         line = []
  10         for x in range(w):
  11             c = img.getpixel((top + msize * x, left + msize * y))
  12             if c == (0, 0, 0):
  13                 x = 1
  14             elif c == (255, 255, 255):
  15                 x = 0
  16             else:
  17                 x = -1
  18             line.append(x)
  19         qr.append(line)
  20     return qr
  21 
  22 version = 3
  23 
  24 img = Image.open("qrgarden.png")
  25 img = img.convert('RGB')
  26 for y in range(0, 100):
  27     for x in range(100):
  28         qrtxt = scan(img, 29*3*x, 29*3*y, 3, version)
  29         print read_qr(qrtxt)

% python solve.py | grep ADCTF_
ADCTF_re4d1n9_Qrc0de_15_FuN

とりあえずyの範囲を分けて並列で実行した。pypyで実行したら早くなるだろうか。