Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Catalog · How the catalog works

Random project

ntlmpwnd

Check NTLM password hashes against haveibeenpwned list

View on GitHub

Anyone may press Interesting, signed in or not. It helps others find this project.

Member rating

No ratings yet.

Sign in to rate this project.

README

ntlmpwnd

Check NTLM password hashes against haveibeenpwned list

Source code for free pascal (fpc) https://www.freepascal.org/ which takes a list of NTLM hashes from https://haveibeenpwned.com/Passwords and compares with your own list of NTLM hashes.

The program has been designed to require low memory and CPU, currently it does not need more than +/- 400 MB of RAM and it runs in single core, so no threads library is needed.

Some details on performance, running the program in a 2012 Intel i7 with a mechanic harddisk.

Time to preprocess source hashes list:
10 mins and 30 seconds. Mostly bound by HD performance.
Final database size:
10 Gigabytes in 32 files.

This first process is needed to be done once.

User NTLM hashes checking speed (all positive):
On a cold drive 237,500 hashes checked in 92 seconds @ 2550 h/s
On a warm drive 237,500 hashes checked in 20 seconds @ 11800 h/s


pascal
NTLM hashes PWND check. (c) 2020 joshyfun (at host) gmail.com. License LGPL.
pascal
Usage: ntlmpwnd.exe -h --help --generate-blocks --check-users [--bits={n}] [--hashes-path={path}]
pascal
-h --help               Show this help page (help a bit longer).  
--generate-blocks       Generate blocks of PWND hashes.  
  --pwndlist={file}     List of PWND hashes.  
--check-users           Generate blocks of PWND hashes.  
  --userslist={file}    List of user names:hashes.  
--check-password={pass} Check one password against the pwndlist.  
--bits                  Bits used to split the PWND list and reduce memory,  
                        by default 5 bits, so 32 slices.  
--hashes-path={path}    Where hashes post-processed will be stored or loaded,  
                        stored when "--generate-blocks" and loaded for "check-users".  
--get-ntlm-hash={pass}  Calculate the NTLM password hash.
pascal
pwndlist file format:
pascal
0123456789ABCDEF0123456789ABCDEF:nnnnn
pascal
Where "0123456789ABCDEF0123456789ABCDEF" is NTLM hash in hexadecimal
and "nnnnn" is a number related with the hash.
pascal
userlist file format.
pascal
john.doe:0123456789ABCDEF0123456789ABCDEF
pascal
Where "john.doe" is the user name (":" is prohibited)
and "0123456789ABCDEF0123456789ABCDEF" is the user's NTLM hash in hexadecimal.