v0.3.0
Reworks the credential output formats and brings the secretsdump-compatible pwdump/hashcat output to byte-for-byte parity.
Breaking: the John the Ripper format and the no-op
--rawflag are removed, and the hashcat/pwdump output filenames change. See Removed / Changed below.
Added
--hashcat-usernameselects the username field in hashcat output lines:sam(sAMAccountName, the default),upn,rid, orsid.- Structured output (NDJSON/JSON/CSV) now captures the previous-password and service Kerberos key sets from
supplementalCredentials-- theKERB_STORED_CREDENTIAL_NEWOldCredentials/OlderCredentials/ServiceCredentialsarrays -- underkerberosOld/kerberosOlder/kerberosService, alongside the currentkerberoskeys. These were previously dropped, yet every computer account (and any password-changed user) carries them. The hashcat and pwdump outputs are unchanged: they still emit only the current key set, matching secretsdump. - Every credentialed object now includes
supplementalCredentialsRaw: the complete decodedsupplementalCredentialsstructure verbatim -- every package (including the legacyPrimary:Kerberosand thePackageslist), the default salt and iteration count, and all four key arrays, with byte values hex-encoded and nothing curated away.
Changed
- Reworked the hashcat output into per-class
username:hashfiles forhashcat --username(ntlm_<type>_current.txt,ntlm_<type>_history.txt,lm_<type>_current.txt,lm_<type>_history.txt), split by object class, hash type, and age. LM hashes are emitted as their two 8-byte halves (mode 3000). Kerberos keys are no longer written to the hashcat output -- they are pass-the-key material, not hashcat-crackable hashes. - The pwdump format now emits secretsdump's "newer pwdump" file set, byte-for-byte compatible with
impacket-secretsdump -outputfile:hashes.ntds(username:rid:lm:nt:::with inlineusername_historyNlines),hashes.ntds.kerberos(username:<etype>:<key>, lowercase etypes, no RC4), andhashes.ntds.cleartext(username:CLEARTEXT:<password>).
Removed
- The John the Ripper output format (
--format john); usehashcatorpwdump. - The
--rawflag, which never had any effect. The completeness it implied is now always on viasupplementalCredentialsRaw(see Added).
Fixed
- The pwdump
hashes.ntds.kerberosfile omitted thedec-cbc-crc(DES-CBC-CRC) andrc4_hmacKerberos keys on Windows Server 2008 databases, which store five KeyTypes insupplementalCredentials(2016+ store three). The writer now keys on the numeric Kerberos KeyType, mirroringimpacket'sKERBEROS_TYPEtable exactly (including the0xFFFFFF74RC4 marker and thedec-cbc-crcspelling), sohashes.ntds.kerberosis byte-identical to secretsdump across Server 2008-2022. - Password history (
ntPwdHistory/lmPwdHistory) was silently dropped for every account, sohashes.ntdswas missing all_historylines. dissect returns the blob wrapped in a one-element list (which failed anisinstance(bytes)check), and the AES PEK layer was PKCS7-unpadded, stripping the trailing block secretsdump keeps. History is now decrypted faithfully andhashes.ntdsis byte-identical tosecretsdump -historyacross the RC4 and AES eras (Windows Server 2008-2022). The AES padding block is kept for exact parity (secretsdump emits it as a history entry); because it is not a real password, NTDSWolf logs a stderrWARNINGnaming each account whose history decrypts to more hashes than itsSecretLengthdeclares. - Removed the redundant
--exclude-deletedflag;--include-deletedis now a single switch (deleted objects are excluded by default).
Install
uv tool install git+https://github.com/StrongWind1/NTDSWolf@v0.3.0Full changelog: https://github.com/StrongWind1/NTDSWolf/blob/main/CHANGELOG.md · Docs: https://strongwind1.github.io/NTDSWolf/