princeprocessor is a standalone password candidate generator using the PRINCE algorithm.
The name PRINCE is used as an abbreviation and stands for PRobability INfinite Chained Elements, which are the building blocks of the algorithm.
Princeprocessor is a password candidate generator that can be thought of as an advanced combinatorial attack. However, instead of taking two different wordlists as input and then outputting all possible two word combinations, princeprocessor has only one input wordlist and builds “strings” of concatenated words. These strings can contain from 1 to N words from the input wordlist, concatenated together. So, for example, if it outputs candidates for passwords of length four, it can generate them using combinations from the input wordlist, such as:
- 4 letter word
- 2 letter word + 2 letter word
- 1 letter word + 3 letter word
- 3 letter word + 1 letter word
- 1 letter word + 1 letter word + 2 letter word
- 1 letter word + 2 letter word + 1 letter word
- 2 letter word + 1 letter word + 1 letter word
- 1 letter word + 1 letter word + 1 letter word + 1 letter word
princeprocessor is a reference implementation of a PRINCE attack that generates candidate passwords by intelligently combining words in all possible combinations from a given list of words.
Author: Jens Steube, magnum
princeprocessor [options] [<] wordlist
* Startup: -V, --version Print version -h, --help Print help * Misc: --keyspace Calculate number of combinations * Optimization: --pw-min=NUM Print candidate if length is greater than NUM --pw-max=NUM Print candidate if length is smaller than NUM --elem-cnt-min=NUM Minimum number of elements per chain --elem-cnt-max=NUM Maximum number of elements per chain --wl-dist-len Calculate output length distribution from wordlist --wl-max=NUM Load only NUM words from input wordlist or use 0 to disable -c, --dupe-check-disable Disable dupes check for faster initial load --save-pos-disable Save the position for later resume with -s * Resources: -s, --skip=NUM Skip NUM passwords from start (for distributed) -l, --limit=NUM Limit output to NUM passwords (for distributed) * Files: -o, --output-file=FILE Output-file * Amplifier: --case-permute For each word in the wordlist that begins with a letter generate a word with the opposite case of the first letter
princeprocessor Usage Example
Usage example for slow hashes:
princeprocessor < wordlist.dict | hashcat [OPTIONS] target.hash
Usage example for fast hashes (for a more complete use of GPUs):
princeprocessor < wordlist.dict | hashcat [ОПЦИИ] target.hash -r prince_optimized.rule
Using words from the specified dictionary (dict1.OPTIONS), compose chains with a minimum length of 2 elements (--elem-cnt-min=2) and a maximum length of 2 elements (--elem-cnt-max=2), that is, each chain will contain only 2:
princeprocessor --elem-cnt-min=2 --elem-cnt-max=2 dict1.txt
How to install princeprocessor
Installation on Kali Linux
sudo apt install princeprocessor
Installation on Debian, Linux Mint, Ubuntu
sudo apt install git git clone https://github.com/hashcat/princeprocessor cd princeprocessor/src make ./pp64.bin -h
./pp64.bin [options] [<] wordlist
Installation on BlackArch
The program is pre-installed on BlackArch.
sudo pacman -S princeprocessor
Installation on Windows
Go to the official website of the program: https://github.com/hashcat/princeprocessor/releases and download the “princeprocessor-*.7z” archive.
Unzip the downloaded folder.
To fully work with the program, you need to run it on the command line. If you do not know what this is, then read the article “How to set up the PowerShell environment on Windows and Linux”.
An example of starting a program on Windows:
1. Let's open PowerShell - for this press Win+x and select “Windows PowerShell”.
2. Suppose the pp64.exe file is located in the c:\princeprocessor-0.22\ folder, go to it using the cd command:
3. To compose a new dictionary, run a command of the form:
For example, the dictionary is located in the same folder as princeprocessor and is called dict1.txt, then the command to run is as follows:
The generated lines will be output to the console, to save them to a file, use a construction like this:
.\pp64.exe 'C:\PATH\TO\DICTIONARY.txt' > 'C:\PATH\TO\NEW\DICTIONARY.txt'
.\pp64.exe dict1.txt > new_dic.txt