暗号化ツール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
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
※コメント投稿者のブログIDはブログ作成者のみに通知されます