ブルートフォースアタック
をするプログラムを書いてみた。
=begin ### brute.rb # ## 指定したpassをブルートフォースアタックで見つける # ## usage: ruby brute.rb [pass] # ### =end $pass = "kwt" $pass = ARGV.shift if ARGV.size > 0 $temp = "" $cand = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYX0123456789" #$cand = "abc" $cand = $cand.split('') $old = Time.now def brute(n) if n == 0 # プロセスを全て表示(すると大分遅くなる) #puts $temp if $temp == $pass puts "Password: #{$temp}" puts "Time: #{Time.now-$old}msec" exit end return end $cand.each {|c| $temp += c brute(n-1) # 最後尾の一文字をカット $temp = $temp.slice(0, $temp.size-1) } end for i in 1..$pass.size puts "--- Try#{i} ---" brute(i) end
ループの処理が中々上手くできなかった。悩んだときはやっぱり紙に書いてみるに限る。