SECCON 2015。
ナンプラ日本人宅にて。
(停電だったので電気をもらいに)
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