Tr0n_ icon

Untitled

Tr0n_ | PRO | 05/14/18 02:56:59 PM UTC | 0 ⭐ | 129 👁️ | Never ⏰ | []
text |

1.81 KB

|

None

|

0 👍

/

0 👎

require 'pbkdf2.rb'
 args = ARGV # arguments in the following order: salt hash iterations samples.txt transformations.txt -v
 if !args.empty?
  salt = args[0]
  hash = args[1]
  iterations = Integer(args[2])
  samplesTxt = args[3]
  transformsTxt = args[4]
else
  puts "Error: Following order required: \"salt hash iterations samples.txt transformations.txt [-v]\""
end
 # puts PBKDF2.new(:password=>"1337", :salt=>"kikugalanet", :iterations=>10000).hex_string
  if ARGV.include? "-v"
  debug = true
end
 # Guess by file approach
 if debug
  puts "Testing words from #{samplesTxt}"
end
 samplesFile = File.new(samplesTxt, "r")
 IO.foreach(samplesFile){|sampleLine|
  temp_password = PBKDF2.new(:password=>sampleLine, :salt=>salt, :iterations=>iterations)
  if hash == temp_password.hex_string
    puts "PASSWORD FOUND: #{sampleLine}"
    samplesFile.close
    exit
  else
    if debug
      puts "Failed: #{sampleLine}"
    end
  end
}
 # Tranformations approach
 if debug
  puts "Testing permutations using #{transformsTxt}"
end
 samplesFile = File.new(samplesTxt, "r")
transformsFile = File.new(transformsTxt, "r")
 IO.foreach(samplesFile){|sampleLine|
  temp = sampleLine
  IO.foreach(transformsFile){|transformLine|
    split = transformLine.split
    temp = temp.gsub(split[0].match(/(?<=\/)(.*?)(?=\/)/).to_s, split[1].match(/(?<=\')(.*?)(?=\')/).to_s)
  }
   temp_password = PBKDF2.new(:password=>temp, :salt=>salt, :iterations=>iterations)
   if hash == temp_password.hex_string
    puts "PASSWORD FOUND: #{temp}"
    samplesFile.close
    transformsFile.close
    exit
  else
    if debug
      puts "Failed: #{temp}"
    end
  end
}
 samplesFile.close
transformsFile.close
 # Brute Force approach
 if debug
  puts "Last Method: \"Brute Force\" initialized"
end

Comments