Không có tiêu đề.

旧Não tem título.

SECCON 2015。

f:id:kou66_m:20151208115911j:plain

ナンプラ日本人宅にて。
(停電だったので電気をもらいに)

SECCON CTFのオンライン予選に参加。
画像は唯一解けた問題(しかも力業で)。


以下、答えを探すのに使ったRubyスクリプトをWrite-Up的に書いておく。

# 計算イメージ
#  1. waUqjjDGnQ==                                  #=> SECCON{
#  2. waUqjjDGnYxV                                  #=> SECCON{ + Cr
#  3. waUqjjDGnYxVyvUu                              #=> SECCON{Cr + y_P
#  4. waUqjjDGnYxVyvUOLN8H                          #=> SECCON{Cry_P + to_
#  5. waUqjjDGnYxVyvUOLN8HquEO                      #=> SECCON{Cry_Pto_ + Oo_
#  6. waUqjjDGnYxVyvUOLN8HquEO0J5D                  #=> SECCON{Cry_Pto_Oo_ + Oo1
#  7. waUqjjDGnYxVyvUOLN8HquEO0J5Dqkh/              #=> SECCON{Cry_Pto_Oo_Oo1 + Oo_
#  8. waUqjjDGnYxVyvUOLN8HquEO0J5Dqkh/zr/3          #=> SECCON{Cry_Pto_Oo_Oo1Oo_ + oo_
#  9. waUqjjDGnYxVyvUOLN8HquEO0J5Dqkh/zr/3KXJC      #=> SECCON{Cry_Pto_Oo_Oo1Oo_oo_ +Oo_
# 10. waUqjjDGnYxVyvUOLN8HquEO0J5Dqkh/zr/3KXJCEnw=  #=> SECCON{Cry_Pto_Oo_Oo1Oo_oo_Oo_ + O}



# 使用されていると思われる文字セット
char_ary = %w|0 1 2 3 4 5 6 7 8 9 @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z|

# 既に分かっている文字列(上記計算イメージ3を求める場合)
answer_str ||= "SECCON{Cr"

# 求めるinput後の出力値
base64_str = "waUqjjDGnYxVyvUu"

# 処理高速化のため、一桁目のあたりをつける
# ここでは出力値がwaUqjjDGnYxVy***(*は任意の一文字)となる一桁目の集合を求める
# ([w, x, y, z]が得られる)
_tmp_first_char_ary = []
char_ary.each do |c|
  _tmp_first_char_ary << c if `./cryptooo #{answer_str + c}` =~ /#{base64_str[0...-3]}/
end

# 3文字の走査
# ("y_P"が得られる)
three_chars = catch :exit do
  _tmp_first_char_ary.each do |c1|
    char_ary.each do |c2|
      char_ary.each do |c3|
        throw :exit, c1+c2+c3 if `./cryptooo #{answer_str + c1 + c2 + c3}` =~ /#{base64_str}/
      end
    end
  end
end

answer_str += three_chars