Giter VIP home page Giter VIP logo

coding-enthusiast / finderouter Goto Github PK

View Code? Open in Web Editor NEW
271.0 35.0 102.0 4.12 MB

Easy to use bitcoin recovery tool to fix damaged private key, mini-private key, address, BIP38 encrypted key, mnemonic (seed phrase), BIP-32 derivation path, Armory backups, recover passwords and more

License: MIT License

C# 100.00%
bitcoin private-key base58 message-signing brute-force bip38 mini-privatekey minikey mnemonic seed

finderouter's Introduction

.NET-CI License Target Downloads

The FinderOuter

The FinderOuter is a bitcoin recovery tool that focuses on making the recovery process easy for everyone with any level of technical knowledge. It uses a simple user interface with a list of recovery options. Each option has an explanation and many hints helping user figure out what is needed. It always consist of filling some text boxes and selecting some options and finally clicking the Find button. This eliminates the need to read long guide pages on how to use the application. Each option also has some example cases that can show a simple preview of how each option should be filled for different cases.

FinderOuter is specialized for maximum efficiency, each recovery option and their parts are written from scratch and all those parts down to the basic cryptography used (such as SHA, ECC,...) are specialized for that operation.

Thanks to .Net core and AvaloniaUI FinderOuter can run on all operating systems.
This project is written fully in C# and is 100% open source and will always remain free to use. You can make a donation if you found this tool useful.
FinderOuter is still in beta and under development. New features are slowly added and everything is optimized.
Contribution is always welcome. Please report any bugs you find or any improvement suggestions you have by creating a new issue.

Quick guide

  1. Select an option from this list depending on what you want to recover
  2. Read the instructions
  3. Fill in the required information
  4. Select appropriate available options according to the entered data
  5. There are some useful advanced options to speed up the recovery
  6. Click Find button
  7. Reports are printed here as the program works on recovering your keys
  8. Progressbar showing the progress percentage shows up for options that use multi-threading (take more than a couple of seconds to complete)
  9. All recovery options come with examples, click this button repeatedly to cycle through them
  10. Some parts have a help button that brings up the respective FinderOuter knowledge base page

Preview

Available recovery options

1. Message signature verification

User can enter a message signature here to verify it. In case there is a problem with the message (except being an actually invalid signature), the code can search to find the common issues that some signing tools have and fix them.

2. Missing Base-58 characters

This option can be used to recover any base-58 encoded string with a checksum that is missing some characters. For example a damaged paper wallet where some characters are erased/unreadable. The position of missing characters must be known.
It works for (1) WIFs (Base-58 encoded private key) (2) Addresses (Base-58 encoded P2PKH or P2SH address) (3) BIP-38 (Base-58 encoded encrypted private key).

There is also a "special case" for private keys missing 1, 2 or 3 characters at unknown positions.

3. Missing Base-16 characters

This option is similar to previous feature but works for base-16 (hexadecimal) private keys. Since there is no checksum in this encoding it requires an additional input to check each permutation against. It accepts any address type and public keys. This option is slower in comparison because it uses ECC and that is not yet optimized.

4. Missing mini-privatekey characters

This option is similar to 2 and 3 but works for mini-privatekeys (eg. SzavMBLoXU6kDrqtUVmffv). It requires the corresponding address or public key of the minikey to check each possible key against, as a result it is also slower since it depends on ECC and has 2 additional hashes.

5. Missing mnomonic (seed) words

This option works for both BIP-39 and Electrum mnemonics that have some missing words. It requires knowing one child (private/public) key or address created from that seed and the exact derivation path of it.

6. Missing mnemonic passphrase

This option is used to recover the extension words (aka passphrase) used in mnemonics. It works for both BIP-39 and Electrum mnemonics algorithms. The available passphrase recovery modes are:
a. Alphanumeric: This is when the passphrase consists of letter, numbers and symbols and is random. Example: OT!pA?8i
b. CustomChars: This mode allows user to define their own set of characters to be used in the passphrase. c. soon

7. Missing BIP-38 password

This option can recover passwords used in encrypting bitcoin private keys using the BIP-38 proposal. The available password recovery modes are the same as mnemonic passphrase option.

8. Missing BIP-32 derivation path

This option could be used to find derivation path of a child key (private key, public key or the address) by having the mnemonic or the extended master keys (xprv or xpub). It only checks a hard-coded list of popular derivation paths.

9. Missing characters in Armory recovery phrase

This option is used to recover Armory paper backups (containing 2 or 4 lines of 36 characters in Base-16 with custom char-set) that are missing some of their characters. Since the last 4 characters of each line is the checksum this option can be very fast (1 trillion keys/sec) if the checksum is available or extremely slow (100 key/sec) if not.

10. Missing string encoding

This option could be used to determine the encoding of an arbitrary text. It currently supports Base-16, Base-43, Base-58, Base-58 with checksum and Base-64. All inputs will be converted to hexadecimal.

Future plans

Check out roadmap here: #47

  • Optimization is always at the top of the to-do list
  • File password recovery (user knows some parts of his password but not all and has the encrypted wallet file)
  • SIMD code
  • GPU support

Getting started

Step 1: Preparation

You can ignore this step at your own risk and skip to step 2.
Since this project deals with sensative information such as private keys, mnemonics, etc. the safest approach is to run it on a clean and air-gapped computer. Easiest way of acheiving that is using a live Linux:

  1. Download Ubuntu or any other Linux OS (all FinderOuter releases are tested on 64-bit Ubuntu 20.04 before being published)
  2. Verify Ubuntu's iso (link)
  3. Follow step 2 while you are still online
  4. Disconnect network cable (to remain offline)
  5. Burn that ISO on a DVD or could be a USB disk (link)
  6. Boot into Ubuntu to run FinderOuter
  7. After you are done, shut down Ubuntu and remove the medium used in step 5

Step 2: Download and build

If you cannot or do not want to build you can go to releases where the ready to run binaires are found for 3 different x64 operating systems: Windows, Linux and MacOS. the other two files named Source code.zip and Source code.tar.gz are the project's source code that GitHub automatically adds at that release version's commit.

To build FinderOuter:
If you have Visual Studio you can clone this repository and build the included solution file called FinderOuter.sln.
Building is also possible through these steps using command line:

  1. Get Git: https://git-scm.com/downloads
  2. Get .NET 5.0 SDK: https://dotnet.microsoft.com/download (see TargetFramework in FinderOuter.csproj for the required .net version in case readme wasn't updated)
  3. Clone FinderOuter git clone https://github.com/Coding-Enthusiast/FinderOuter.git
  4. Build using dotnet publish -c Release -r <RID> --self-contained true (replace <RID> with RID of the operating system you want to build for. e.g. win-x64 for x64 Windows or linux-arm64 for Linux x64 ARM)

Important notes:

  • Remember to build the project using release configuration to benefit from compiler optimizations.
  • .Net applications can be published as self contained which will increase the size of the binray by including the required framework in it. That helps running the application on any computer (like the live Linux explained above) without needing to install .Net separately. The size can be reduced by selecting the Trim unused assemblies option.
  • This project can be built on and used on any operating system, use -r|--runtime <RUNTIME_IDENTIFIER> to specify OS with the correct RID.

Step 3: Run

If you have compiled FinderOuter as SCD or downloaded the provided binaries there is no need to download .Net Core, otherwise it has to be downloaded and installed on the system that needs to run FinderOuter.
FinderOuter can be run by using console/terminal command dotnet FinderOuter.dll for Linux, dotnet FinderOuter on MacOs and running the FinderOuter.exe on Windows.
Linux may require providing persmissions first (more info):

  1. Provide execute permissions chmod 777 ./FinderOuter
  2. Execute application ./FinderOuter

Contributing

Please first check out conventions for information about coding styles, versioning, making pull requests, and more.

Donations

If You found this tool helpful consider making a donation:
Legacy address: 1Q9swRQuwhTtjZZ2yguFWk7m7pszknkWyk
SegWit address: bc1q3n5t9gv40ayq68nwf0yth49dt5c799wpld376s

finderouter's People

Contributors

coding-enthusiast avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

finderouter's Issues

p2sh recovery

Hello.i have a p2sh wallet .i lost 4 character of private key and i know they position.i tried your software but it cant recover them.also i tried another wallet but it works well .maybe p2sh is the problem to recover?my private key starts with (L4A3.........)
Can you help me?

No clear instruction on how to run on Mac OS

I can't seem to figure out how to run this on Mac OS, bearing in mind that I have zero knowledge on this.

I downloaded the binary file, ran terminal at the folder and used this command: dotnet FinderOuter

I get this error:
Could not execute because the specified command or file was not found.
Possible reasons for this include:

  • You misspelled a built-in dotnet command.
  • You intended to execute a .NET program, but dotnet-FinderOuter does not exist.
  • You intended to run a global tool, but a dotnet-prefixed executable with this name could not be found on the PATH.

Recover time

Hello.i started to recover a key with 11 characters lost almost between the private key.and it starts with K.i forget to calculate the time and i cant stop the procces because it spend 5~6 hours.my cpu is core i7 8700.can just tell me how much it gonna work?

character select

I love your idea about character select. Is it going to be in the next release since gpu support is a whiles away.

Roadmap

This is a short roadmap to loosely outline the plans for the future releases. This issue will be updated with time.
Each release usually takes a month or two but can take more time depending on complexity and developer's free time.

v 1.0.0

  • Maximize test coverage

v 1.1.0

  • Rewrite ECC to use UInt64 and a bigger radix representation

v 1.2.0

  • Use SIMD wherever possible (mostly all hash algorithms and some of the recovery services)

v 1.3.0

  • Try to add pause/resume capability

v 1.4.0

  • (possibly) add wallet file password recovery. The problem is lack of clear documentation and example file.

v 2.0.0

  • GPU support

API / command line version

hi is there a command line version of the software? or some kind of API? I would like to be able to run multiple searches without using the user interface.

Example for Metamask Seed

Hello.

Hello, I'm trying to retrieve a word that I forgot from the metamask wallet seed, but it's giving an error.

image

AddrComp

Is it helpful to enter address Comp for recovering base58 ?

Add progress bar

The total is already computed and shown but a progress bar helps visualize the speed and the "progress".

Add benchmark for time prediction

Users always want to know how long it would take to perform the recovery or sometimes to just know the possibility of recovering something considering how much of it is lost. Examples: #20 #17 #7
It would be useful to add a feature that would take some minimal inputs (such as mnemonic total word count and number of missing words), ran the main loop of the respective Service and reported a key/second speed with the total amount of time it would take to go through all of it.

Recovering BIP38 password without having the address

Since the BIP38 string already contains an address hash, recovering without the address itself is technically possible but it would add 1x Base58 encoding and 2x SHA256 hash and our IConverter implementations don't have that option yet. The encoding part has to be optimized otherwise the speed could decrease significantly.

This feature is postponed until there is either demand for it or version 1.0 is about to be released.

Idea of speed increase

Cant wait until you add gpu support. Any idea an how much faster program will run. i have 11missing characters with 20 million in my wallet.

Add damaged word recovery option

The individual words used in a mnemonic could be partially damaged and require to be recovered. It is faster to do that instead of using the mnemonic recovery option.
For this purpose we could use the Levenshtein distance (or maybe other string metrics) that was added to Bitcoin.Net recently.
Probably an option to be added to FinderOuter v.0.6.0.

Anything that involves ECC is very slow, also prevents using 100% of CPU in parallel mode

Due to the way it is implemented (using BigInteger) elliptic curve cryptography is slow in this project.
Also any part that requires it in parallel mode fails to use 100% of CPU (usually swings between 60% to 70%) such as mnemonic recovery or any ICompareService that has to convert private key to public key.

The plan to solve this is to re-implement ECC using a custom readonly struct ModularUInt256 with optimized algorithms to compute point multiplication and a lot of the modular arithmetic used in ECC.

Time prediction

How much 8 missing characters from middle gonna take to find with corei7 8700 cpu? Just a estimated time

Missing private keys

Hi,
is it possible to retrieve the first 10 characters of a private key?
I have the last 41 characters

Custom Derivation Paths

First off, this is great. So easy to get up and running (the binary works like a charm) and the instructions are easy to understand. Very refreshing for avid tinkerers like myself who are not quite computer scientists.

Anyway, I was wondering if there are any plans to allow entering a custom derivation path? Or at least part of 1? Some wallets of course use non-standard ones. And I know that altcoins are not supported, but a lot of them would still be compatible with the software as-is if we could just change the derivation path. For instance, I'm trying to recover an Ethereum key and I know the mnemonic (I think), and I have the public key, which is the same format as a Bitcoin public key. If I could set the path to something like m/44'/60'/?/? or something like that, I could maybe potentially use it for recovering that Ethereum key (I think...please correct me if I'm wrong about that). I don't really mind if I have to run the thing for hours and hours, if that's what it takes.

Anyway, just thought I'd throw that out there. Thanks again for making this tool!

Add recovery option for Armory paper backups

Armory doesn't seem to be using mnemonics but lets users create a paper backup of their "root seed" as a base-16 encoded string with custom characters split into 4 char words and in 2 or 4 lines.
The code is already written but unpublished. It requires some test vectors which have not yet been found. Hopefully this can be released in v. 0.8.0.

If you know any test vectors that could be used here please post them in this issue.

Add the case that location of missing characters is not known.

Base-58 service only supports the case when the user knows the location of missing characters.
A new option is needed for when that location is not known. But the option has to work with any number of missing characters without needing to hard-code each case individually.

Example for Binance Smart Chain

Hi. I`m try to find few word of seed for Binance Smart Chain, but it does not work
I'm choose Missing Mnemonic with parametrs:
Phrase - original leader remove powder trumpet morning amazing trophy fee high * *
Wallet - 0x113EEE4418D83e319526473fe0785acc50D07E09
Path - m'/44'/60'/0'/0

Result - Invalid extra input or input type AddrComp.

What i`m doing wrong?

Recover password wallet.dat

I saw that the project will have a function to retrieve the password for wallet.dat. Do you have an estimate of when this implementation will take place?

Allow valid armory characters

in armory the valid input characters into the dialogs are based on

BASE58CHARS = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'

in finderOuter they are based on constants in file ConstantsFO.cs line 18

ArmoryChars = "asdfghjkwertuion";

I might be mistaken but I think the finderOuter armory chars is too restrictive by not allowing characters such as b or c etc.

ArmoryService.cs line 600:

else if (lines.Any(line => line.Any(c => **!ConstantsFO.ArmoryChars.Contains(c)** && c != missChar)))
{
report.Fail("Input contains invalid characters.");
}

I might be misunderstanding the code, apologies if that's the case.

BIP38 encryption password recovery

Hello. you can help to make a password guessing for BIP 38
I have a key, but it's encrypted.
your utility will be even more useful with the addition of this functionality.
I am currently using a program written in python.
the speed is bad.
thanks for any help.

Add missing characters hints

It would be useful to add possibility to specify the set of potential candidates per missing character - for example to say that on position X could be only digit or any subset of base58.
By the way - is the app smart enough to limit potential candidates from the top? For example, if WIF starts with L, then on 2nd could be max 5, if on 2nd is 5 then on 3rd could be max o etc.

menemonic phase

I used the option to recover the menemonic phase for 2 missing words from the atomic wallet, I ran the program and it gave an error. do you know why?

i used m/44'/0'/0'/0/0

Does this application support Etherium?

I tried to find the last word in the SEED phrase for the Etherium wallet, but I ran into the problem "Invalid extra input or input type AddrComp". Is it possible to fix this somehow, or is this code not suitable for Etherium?
1

Autarkysoft.Bitcoin 0.9.0 is not compatible with net50

I freshly installed net50 and Autarkysoft.Bitcoin 0.9.0

I am getting the error:
Error NU1202 Package Autarkysoft.Bitcoin 0.9.0 is not compatible with net50 (.NETFramework,Version=v5.0). Package Autarkysoft.Bitcoin 0.9.0 supports: netstandard2.1 (.NETStandard,Version=v2.1) Tests
C:\Users<me>\Source\Repos\FinderOuter\Src\Tests\Tests.csproj 1

Armory chaincode recovery

Hi,

I would like the ability to recover the chain code for armory. Currently this functionality isn't there and there is a comment in the code regarding this:

AmoryService.cs line 648
report.AddMessageSafe("FinderOuter currently doesn't support recovering chain-code." +
"Open a new issue if you need this feature.");

I would really like this feature to be implemented, thank you.

Uncompressed private keys

I have uncompressed private key (for BCH) with one missing character at unknown position, when will be possible to try recover such key?

help me!!

I lost 14 characters of my private key How do I recover the lost characters?
it's like this for example:
12 **** 3456789123 *** 123456788 **** 123456 *** 1234567
please tell me how to extract this program to find the missing 14 characters

Code

I put some code together from other codes to convert the compress wif to address but its slow can you help.
from bitcoin import *

f = open('boom.txt', 'r')
privates = []
line = f.readline()

while line != "":
line = line[0 :-1]
privates.append (line)
line = f.readline()

f.close()

for priv in privates:
pub = privtopub(priv)
addr = pubtoaddr(pub)
wif = encode_privkey(priv, 'wif')
file = open('boom_convert.txt', 'a')
file.write(wif + '\n' + addr + '\n\n')
file.close()
print (wif)

mutithreading

how many cpu can your program handle cuz i have aws 64 vcpu and im getting 600 m/s. can it handle more cpu with out running mutiple copys

Estimated Time Calculation

I lost 19 characters from the end of my private key starting with K. It has been working for about 5 days but unfortunately it has not yielded any results. How can the estimated time be calculated?

Missing BIP38 EC mult decryption mode

Your program- Missing Bip38 pass- refuses to work. Check the error-Invalid prefix.
I used this-

1AMYsRoWDAr5fAB49UUJUgse5LRZ2c82Qv

6PnWt89G6WGAr2mK5nEAPtSe7Q1EvK1W2Txodd9Y1KDEDJgWd6hg2Xv6nt

1945

bip-38

Question on 10 missing keys

have a question. Recently there was a flood and a paper notebook containing a offline wallet was damage and it destroyed part of a WIF private key, so now I basically have:

Kw**********(I have the next 40 characters, just not posting for obvious reasons), so I am missing 10 characters in all.

I also have the public key. Is it possible to use this software to start a search at Kw... and iterate over the missing 10 characters with the known 40 characters also in the key.

For example : 1B2Q8vPm5E5b8yxaNWUW5ZfdCR5Zu1KMJn - is the public address

and for the WIF private key I'd have Kw**********jcQmKRPNTF8CU9H1thzC981DCrZgmS4m8ygXFCEk (this is just an example, no funds are here)

basically I want to always have search for private key start at 'Kw', then search for missing 10, and end with 'jcQmKRPNTF8CU9H1thzC981DCrZgmS4m8ygXFCEk'

Any advice is appreciated and examples are even more appreciated.

Or is 10 characters just too many possible combos. All advice is much appreciated! I can maybe take a guess at one more character that kind of looks like something and get it down to 9 missing characters, but I am still worried that is too many.

Thank you

pause/resume and combinations processed

Hi,

is it possible to have a pause/resume function so that in a case where it requires more time to process to be able to pause the process and resume once the PC is available.
Also it would be nice to see the number of combinations processed, in this case the user would get a sense that the program is running and how far/close it is to resolution.

Thanks!

Time prediction

I have a key missing 25 characters, but when it is up to 13 characters, the software shows on the screen that it is optimizing the keys and will not check everything. Because when he misses 25 he doesn't do that? And also because there are no keys, he is checking and missing, will this be implemented? 25 characters missing, that's a lot, do you think that with a 256-core processor extremely possible, I can recover?

i left it a few days, it appeared that it found "a possible key". This was about three times, then he kept checking.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.