• Stars
    star
    824
  • Rank 55,348 (Top 2 %)
  • Language
    C
  • Created over 9 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A proof-of-concept cracker for cryptocurrency brainwallets and other low entropy key alogrithms.

Brainflayer

⚠️ I am not currently maintaining Brainflayer. It has acomplished what I set out to do with it, and the work that went into it brought about a major inflection point in my career, but I have moved on to other things. Someday, I may come back to it, but don't count on that. ⚠️

I am currently suing the British Government. If you've found my work useful...

...please donate to my crowdfunding effort.

Description

Brainflayer is a Proof-of-Concept brainwallet cracking tool that uses libsecp256k1 for pubkey generation. It was originally released as part of my DEFCON talk about cracking brainwallets (slides, video, why).

The name is a reference to Mind Flayers, a race of monsters from the Dungeons & Dragons role-playing game. They eat brains, psionically enslave people and look like lovecraftian horrors.

The current release is more than four times faster than the DEFCON release, and many features have been added.

If brainflayer is useful to you, please get in touch to let me know. I'm very interested in any research it's being used for, and I'm generally happy to collaborate with academic groups.

Disclaimer

Just because you can steal someone's money doesn't mean you should. Stealing would make you a jerk. Don't be a jerk.

No support will be provided at this time, and I may ignore or close issues requesting support without responding.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Usage

Basic

Precompute the bloom filter:

hex2blf example.hex example.blf

Run Brainflayer against it:

brainflayer -v -b example.blf -i phraselist.txt

or

your_generator | brainflayer -v -b example.blf

Advanced

Brainflayer's design is heavily influenced by Unix philosophy. It (mostly) does one thing: hunt for tasty brainwallets. A major feature it does not have is generating candidate passwords/passphrases. There are plenty of other great tools that do that, and brainflayer is happy to have you pipe their output to it.

Unfortunately, brainflayer is not currently multithreaded. If you want to have it keep multiple cores busy, you'll have to come up with a way to distribute the work yourself (brainflayer's -n and -k options may help). In my testing, brainflayer benefits significantly from hyperthreading, so you may want to run two copies per physical core. Also worth noting is that brainflayer mmaps its data files in shared memory, so additional brainflayer processes do not use up that much additional RAM.

While not strictly required, it is highly recommended to use the following options:

  • -m FILE Load the ecmult table from FILE (generated with ecmtabgen) rather than computing it on startup. This will allow multiple brainflayer processes to share the same table in memory, and signifigantly reduce startup time when using a large table.

  • -f FILE Verify check bloom filter matches against FILE, a list of all hash160s generated with sort -u example.hex | xxd -r -p > example.bin Enough addresses exist on the Bitcoin network to cause false positives in the bloom filter, this option will suppress them.

Brainflayer supports a few other types of input via the -t option:

  • -t keccak passphrases to be hashed with keccak256 (some ethereum tools)

  • -t priv raw private keys - this can be used to support arbitrary deterministic wallet schemes via an external program. Any trailing data after the hex encoded private key will be included in brainflayer's output as well, for reference. See also the -I option if you want to crack a bunch of sequential keys, which has special speed optimizations.

  • -t warp salts or passwords/passphrases for WarpWallet

  • -t bwio salts or passwords/passphrases for brainwallet.io

  • -t bv2 salts or passwords/passphrases for brainv2 - this one is very slow on CPU, however the parameter choices make it a great target for GPUs and FPGAs.

  • -t rush passwords for password-protected rushwallets - pass the fragment (the part of the url after the #) using -r. Almost all wrong passwords will be rejected even without a bloom filter.

Address types can be specified with the -c option:

  • -c u uncompressed addresses

  • -c c compressed addresses

  • -c e ethereum addresses

  • -c x most signifigant bits of public point's x coordinate

It's possible to combine two or more of these, e.g. the default is -c uc.

An incremental private key brute force mode is available for fans of directory.io, try

brainflayer -v -I 0000000000000000000000000000000000000000000000000000000000000001 -b example.blf

See the output of brainflayer -h for more detailed usage info.

Also included is blfchk - you can pipe it hex encoded hash160 to check a bloom filter file for. It's very fast - it can easily check millions of hash160s per second. Not entirely sure what this is good for but I'm sure you'll come up with something.

Building

Should compile on Linux with make provided you have the required devel libs installed (at least openssl and gmp are required along with libsecp256k1's build dependencies). I really need to learn autotools. If you file an issue about a build failure in libsecp256k1 I will close it.

Dependencies should install with

apt install build-essential libgmp-dev libssl-dev

Supported build target is currently Ubuntu 20.04 on amd64/x86_64. Issues with building for other platforms probably won’t be fixed. In particular, Kali Linux is not supported. Support for operating systems other than Linux would require extensive refactoring of Brainflayer's memory optimizations and is not happening.

Redistribution of compiled brainflayer binaries is prohibited, and unauthorized binaries probably contain malware.

Authors

The bulk of Brainflayer was written by Ryan Castellucci. Nicolas Courtois and Guangyan Song contributed the code in ec_pubkey_fast.c which more than doubles the speed of public key computations compared with the stock secp256k1 library from Bitcoin. This code uses a much larger table for ec multiplication and optimized routines for ec addition and doubling.

More Repositories

1

ssh-chain

Perl
122
star
2

threshcrypt

A password-based implementation of threshold encryption
C
30
star
3

storybits

JavaScript
23
star
4

dnsstore

Prolog
21
star
5

VerifyJS

VerifyJS - Load JavaScript from a CDN, no trust required!
JavaScript
10
star
6

llhash

A permissively licensed, low-level, high-performance cryptographic hash library for hackers.
Assembly
9
star
7

mariadb-bcrypt-udf

bcrypt user-defined functions for MariaDB/MySQL
C
7
star
8

libsdsock

An LD_PRELOAD hack for systemd socket activation
C
7
star
9

goatsefloppy

A github mirror of the "goatse rescue floppy" circa 2004.
HTML
6
star
10

isodecrypt

Perl
5
star
11

certpy

CertPy is a high level toolkit for generating x509 (e.g. SSL/TLS/HTTPS) certificates in Python.
Python
5
star
12

hashprogs

A collection of small programs which compute cryptographic hashs.
C
4
star
13

undercrypto2014

Python
4
star
14

enfringement

Tools for working with EnGenius EnSky series WAPs
Python
4
star
15

bloomslice

a byte sliced bloom filter implementation for pre-hashed inputs
C
3
star
16

p256.js

Utility routines for working with P-256 Elliptic Curve keys in javascript, intended for use with the Web Crypto API
JavaScript
3
star
17

gub211

Userspace Linux driver for IOGEAR GUB211 USB 2.0 Printer Auto Sharing Switch
C
3
star
18

ryancdotorg

profile repository
2
star
19

bootselfie

From the PancakesCon 3 CTF
HTML
2
star
20

rfc1421

Python
2
star
21

probemon

unfinished wifi activity monitoring code
Python
2
star
22

dhclient-script-multiwan

Fork of dhclient-script with modifications to better support multi-homed hosts
Shell
2
star
23

libtprpg

A tiny pseudorandom permutation generator library
C
2
star
24

python-nflogr

An object-oriented Python interface to read data via NFLOG
C++
2
star
25

ja3d

Python
1
star
26

proberelay

C
1
star
27

nametrade

non-interactive atomic name trading for namecoin
Python
1
star
28

pelican-spoiler-rst

Pelican plugin adding a spoiler role to reStructuredText
Python
1
star
29

3vain5me

A P2SH vanity address generator
1
star
30

async-sha256-js

1
star
31

dashmon

personal project for integrating amazon dash buttons with mqtt
Python
1
star
32

bcrypt-ext

Extended bcrypt, increases max work factor and adds keywrap.
C
1
star
33

trivial-rsa

A very simple OpenVPN TLS config generator.
Shell
1
star