[ksnctf] Are you human?

ksnctfにチャレンジ
第34問目です。

※ksnctfは常駐型のCTFサイトです。
※問題のページはコチラです。

Are you human?

第一段階として 画像データとして渡される RS符号付きの破損画像データの
ダンプデータを復元する作業に苦戦します。

OCRにかけるしかないのですが、OCRを邪魔する線などが多く
OCRが嫌いそうな明るさの文字のせいでほとんどテキストが
抽出できません。

よってまず ImageMagicで下処理してみることにしました。

OCRには tesseract を使うことにして

#!/bin/sh

mkdir text
mkdir img
echo "tessedit_char_whitelist 0123456789ABCDEF" > ocr.conf

for pic in *.png
do
    base=$(basename ${pic} .png)
    BG=$(convert ${base}.png -crop 1x1+0+0 txt:- | sed -n 2p - | cut -d " " -f4)
    convert -fill '#FFFFFF' -opaque "${BG}" ${base}.png  ${base}_a.png
    convert -threshold 55000 ${base}_a.png ${base}_b.png
    convert -gaussian-blur 2x2 ${base}_b.png ${base}_c.png
    convert -threshold 35000 ${base}_c.png ${base}_d.png
    tesseract ${base}_d.png stdout -psm 7 ocr.conf > ./txt/${base}.txt
    mv ${base}_d.png ./img/${base}.png
    rm ${base}_?.png
done

これで





変換されるので 大抵の画像でOCRが通るようになりますが
それでも百近いデータを処理ミスしてしまい
これは手作業で直さないとどうにもなりそうになく、
ちょっとやる気にならないので画像の処理方法を工夫中です。

ある程度の読み取りミス (D↔0 や B↔8)などは
リード・ソロモンの訂正能力を信じたいとしても
出力文字0の画像が数十あるようではちょっと厳しいと思います。

…というわけで未解決です。

仕組み上はこのOCR作業を乗り越えれば、
得られるテキストが
Flagが書かれていると思われる画像にリードソロモン符号を
付したものにノイズがわざと加えられたデータのダンプ
になっているので

ダンプテキストから元のバイナリに戻し
リードソロモン符号をデコードすれば
ノイズを修正して元の正確なデータが手に入る

という筋書きだと思います。

が、肝心のOCRが上手く行かないので続きができない感じです。


OCRが上手く行く方法に心当たりがある方
または、OCR失敗データを人力修正できる忍耐力のある方は是非
コメントください…。

リードソロモン符号のデコードに関しては

python1
python2

このあたりのコードが使えると思います。
配布されている問題ページで配布されている
ecc.py
内での宣言から

N = 255
K = 64
GF 2^8bit

という設定にすればdecode可能なハズです。

コメントする