goo blog サービス終了のお知らせ 

コード溜め

備忘録的コンピュータ日記

[Ruby]暗号ツールEDで復号化を支援するスクリプト

2010-06-04 06:36:28 | Ruby
暗号化ツールED(http://type74.org/ed.php)にはコマンドラインから操作ができる機能があって、それを使って復号化を支援するコードを書いた。

E_D.exeをd:\Program Files\ED フォルダにいれてから
ruby -Ks 当スクリプト 復号化したいENCファイル.enc
 として使う バッチファイルにしてもよい。

ENCファイル名に10.06.10みたいに日付が入っていると、配列passrules
に入っているパスワードルールを順次試してくれる。
パスワードルールが適用できないと、コマンドプロンプトでパスワードを聞いてくる。


--ed_decode.rb
class SearchDate
 def SearchDate.get(str)
  date = Array.new
  date[0]=''
  if str =~ /20(\d\d)[\.\-](\d\d)[\.\-](\d\d)/ then
    date= [$1,$2,$3]
  else if str =~ /(\d\d)(\d\d)(\d\d)/ then
    date=  [$1,$2,$3]
  end
  date
 end
end

class RubyDecode

 def initialize (file = "")
  @file = file
  @target = @file
  @target= @target.sub(/.enc$/,'')
 
  @ruby_exec = "d:\\program files\\ed\\e_d.exe"
  @decodeline=@ruby_exec+" -D -F -P "
 end

 def getpass
  print "Input password and Press Enter key:"
  @password = $stdin.gets
  @password.chomp!
 end
 
 def decode
   @decodeline=@ruby_exec+" -D -F -P "

  @decodeline << @password
  @decodeline << " \""
  @decodeline << @file
  @decodeline << "\""
  print "Exec: "
  p @decodeline
  system(@decodeline)
 end
 
 def chk_success
  File.file?(@target)
 end
 
 def setpass(str="")
  @password = str
 end
end

#パスワードのルールを入れる%sの部分にそれぞれYYMMDDが収まる
passrules = ["XXXXX\%s\%s\%s",
           "ZZZZZ\%s\%s\%s"]

obj = RubyDecode.new(ARGV[0])

unless ARGV[0] =~ /^.*(.enc)$/ then
 print "Specify enc file\n"
 exit
end

date = SearchDate.get(ARGV[0])
unless date[0] == '' then
  automode = 1
  p "automode"
else
  automode = 0
  obj.getpass
end
 
if automode== 1 then
  passrules.each{|rule|
   pass = sprintf(rule,date[0],date[1],date[2])
   p pass
   
   obj.setpass(pass)
   obj.decode
   if obj.chk_success then
     p "Success\n"
     exit
   end
  }
  obj.getpass
end

obj.decode
if obj.chk_success then
  print "success\n"
  exit
else
  print "Failed. Check Password and Retry!\n"
end
end

コメントを投稿

サービス終了に伴い、10月1日にコメント投稿機能を終了させていただく予定です。