1) Go to
http://rubyinstaller.org/downloads/ and download Ruby 2.0.0-p353. Once the file has downloaded, run the installer. Restart your computer.
2) COPY the code below and paste it into Notepad. Save the file as “brute.rb” (including the quotation marks – this is so Notepad doesn't automatically save it as a .txt.) Make sure the file is in the same folder as your protoshares-qt.exe file (this is for convenience later).
The following code is modified very slightly from the original code written by Revalin, but since he doesn't charge for his services, I hope he doesn't mind me using his code for this tutorial.
#!/usr/bin/ruby
require 'base64'
require 'digest/sha2'
require 'open3'
require 'openssl'
# Put your best guess at your passphrase here
passphrase = 'Oops I forgot'
# The full path to your Protoshares wallet file
wallet_file = ''
# Where to find Protoshares-qt client.
$protoshares = ''
def test(phrase)
$cipher.reset
$cipher.key = Digest::SHA256.digest(Digest::SHA256.digest(phrase))
$cipher.update $seed
$cipher.final
puts phrase
i,o,t = Open3.popen2e($protoshares, "-o", "getseed")
i.puts(phrase)
i.close
if t.value.success?
puts "Found it! #{phrase}"
exit
end
rescue OpenSSL::Cipher::CipherError
end
def scramble(passphrase)
characters = " !\"\#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
list = []
# transpose adjacent chars
(passphrase.length - 1).times do |i|
testphrase = passphrase.dup
testphrase[i] = passphrase[i+1]
testphrase[i+1] = passphrase[i]
list << testphrase
end
# delete one char
passphrase.length.times do |i|
testphrase = passphrase.dup
testphrase = testphrase[0,i] + testphrase[(i+1)..-1]
list << testphrase
end
# substitutute one char
passphrase.length.times do |i|
characters.chars.each do |c|
testphrase = passphrase.dup
testphrase[i] = c
list << testphrase
end
end
# insert one char
(passphrase.length + 1).times do |i|
characters.chars.each do |c|
testphrase = passphrase.dup
testphrase.insert(i, c)
list << testphrase
end
end
return list.uniq
end
wallet = File.read(wallet_file)
seed_base64 = wallet.match(/'seed': '([^']+)'/).captures.first
$seed = Base64.decode64(seed_base64)
$cipher = OpenSSL::Cipher.new('aes-256-cbc')
$cipher.iv = $seed.slice!(0,16)
Dir.chdir File.dirname $protoshares
list1 = scramble(passphrase)
list1.each { |i| test i }
list1.each { |i| scramble(i).each { |j| test j }}
puts "No luck."
exit 1
4) EDIT brute.rb, filling in these values:
1. At the top; where the code says “oops I forgot”, edit this to be the password you believe should work for your wallet.
2. Inside the quotes after “$wallet_file =”, insert the full path to your wallet.dat file for protoshares-qt (e.g. C:\Protoshares\wallet.dat)
3. Inside the quotes after “$protoshares”, insert the full path to the protoshares-qt.exe file. (e.g. C:\Protoshares\protoshares-qt.exe)
5) Go to the start menu and choose “run...”
6) Type “cmd” and press enter
7) In the big black window that appears, type “cd”, followed by a space, and then the full path to the folder that proshares-qt.exe is in. E.g. “cd C:\Protoshares\”)
Type the following, then press enter.
protoshares-qt -server -rpcpassword=some-password -rpcport=3838
9) Finally, type brute.rb and wait.
Hi thanks for your help so far couple of things I wanted to check.
I edited the file at the start while it was still in txt format and then saved to "brute.rb" is this correct? I couldn't find a way to edit it once I'd saved it as "brute.rb"
The part in the CMD window where you type rpcpassword=some-password what do I need to type in here? do I have to create a .conf file in the same file as the wallet.dat?
On the last step, I've tried using windows CMD and the Ruby version at step 8 I press enter and the protoshares-qt opens when I then type brute.rb in the CMD window and press enter I get the following message
C:\"filepath"\brute.rb:62:in '
' : undefined method 'captures' for nil:NILClass