diff --git a/name_that_hash/hashes.py b/name_that_hash/hashes.py index 0cbbe7b..49e76d5 100644 --- a/name_that_hash/hashes.py +++ b/name_that_hash/hashes.py @@ -19,7 +19,8 @@ class HashInfo: regex=re.compile(r"^[a-f0-9]{4}$", re.IGNORECASE), modes=[ HashInfo(name="CRC-16", hashcat=None, john=None, extended=False), - HashInfo(name="CRC-16-CCITT", hashcat=None, john=None, extended=False), + HashInfo(name="CRC-16-CCITT", hashcat=None, + john=None, extended=False), HashInfo(name="FCS-16", hashcat=None, john=None, extended=False), ], ), @@ -29,10 +30,13 @@ class HashInfo: HashInfo(name="Adler-32", hashcat=None, john=None, extended=False), HashInfo(name="CRC-32B", hashcat=None, john=None, extended=False), HashInfo(name="FCS-32", hashcat=None, john=None, extended=False), - HashInfo(name="GHash-32-3", hashcat=None, john=None, extended=False), - HashInfo(name="GHash-32-5", hashcat=None, john=None, extended=False), + HashInfo(name="GHash-32-3", hashcat=None, + john=None, extended=False), + HashInfo(name="GHash-32-5", hashcat=None, + john=None, extended=False), HashInfo(name="FNV-132", hashcat=None, john=None, extended=False), - HashInfo(name="Fletcher-32", hashcat=None, john=None, extended=False), + HashInfo(name="Fletcher-32", hashcat=None, + john=None, extended=False), HashInfo(name="Joaat", hashcat=None, john=None, extended=False), HashInfo(name="ELF-32", hashcat=None, john=None, extended=False), HashInfo(name="XOR-32", hashcat=None, john=None, extended=False), @@ -40,32 +44,40 @@ class HashInfo: ), Prototype( regex=re.compile(r"^[a-f0-9]{6}$", re.IGNORECASE), - modes=[HashInfo(name="CRC-24", hashcat=None, john=None, extended=False)], + modes=[HashInfo(name="CRC-24", hashcat=None, + john=None, extended=False)], ), Prototype( - regex=re.compile(r"^(\$crc32\$)?([a-f0-9]{8}.)?[a-f0-9]{8}$", re.IGNORECASE), - modes=[HashInfo(name="CRC-32", hashcat=11500, john="crc32", extended=False)], + regex=re.compile( + r"^(\$crc32\$)?([a-f0-9]{8}.)?[a-f0-9]{8}$", re.IGNORECASE), + modes=[HashInfo(name="CRC-32", hashcat=11500, + john="crc32", extended=False)], ), Prototype( regex=re.compile(r"^\+[a-z0-9\/.]{12}$", re.IGNORECASE), modes=[ - HashInfo(name="Eggdrop IRC Bot", hashcat=None, john="bfegg", extended=False) + HashInfo(name="Eggdrop IRC Bot", hashcat=None, + john="bfegg", extended=False) ], ), Prototype( - regex=re.compile(r"^[a-z0-9\/.]{12}[.26AEIMQUYcgkosw]{1}$", re.IGNORECASE), + regex=re.compile( + r"^[a-z0-9\/.]{12}[.26AEIMQUYcgkosw]{1}$", re.IGNORECASE), modes=[ - HashInfo(name="DES(Unix)", hashcat=1500, john="descrypt", extended=False), + HashInfo(name="DES(Unix)", hashcat=1500, + john="descrypt", extended=False), HashInfo( name="Traditional DES", hashcat=1500, john="descrypt", extended=False ), - HashInfo(name="DEScrypt", hashcat=1500, john="descrypt", extended=False), + HashInfo(name="DEScrypt", hashcat=1500, + john="descrypt", extended=False), ], ), Prototype( regex=re.compile(r"^[a-f0-9]{16}$", re.IGNORECASE), modes=[ - HashInfo(name="MySQL323", hashcat=200, john="mysql", extended=False), + HashInfo(name="MySQL323", hashcat=200, + john="mysql", extended=False), HashInfo(name="Half MD5", hashcat=5100, john=None, extended=False), HashInfo(name="FNV-164", hashcat=None, john=None, extended=False), HashInfo(name="CRC-64", hashcat=None, john=None, extended=False), @@ -104,14 +116,17 @@ class HashInfo: Prototype( regex=re.compile(r"^_[a-z0-9\/.]{19}$", re.IGNORECASE), modes=[ - HashInfo(name="BSDi Crypt", hashcat=12400, john="bsdicrypt", extended=False) + HashInfo(name="BSDi Crypt", hashcat=12400, + john="bsdicrypt", extended=False) ], ), Prototype( regex=re.compile(r"^[a-f0-9]{24}$", re.IGNORECASE), modes=[ - HashInfo(name="CRC-96(ZIP)", hashcat=None, john=None, extended=False), - HashInfo(name="PKZIP Master Key", hashcat=20500, john=None, extended=False), + HashInfo(name="CRC-96(ZIP)", hashcat=None, + john=None, extended=False), + HashInfo(name="PKZIP Master Key", hashcat=20500, + john=None, extended=False), HashInfo( name="PKZIP Master Key (6 byte optimization)", john=None, @@ -121,32 +136,41 @@ class HashInfo: ], ), Prototype( - regex=re.compile(r"^\$keepass\$\*1\*50000\*(0|1)\*([a-f0-9]{32})\*([a-f0-9]{64})\*([a-f0-9]{32})\*([a-f0-9]{64})\*1\*(192|1360)\*([a-f0-9]{384})$"), + regex=re.compile( + r"^\$keepass\$\*1\*50000\*(0|1)\*([a-f0-9]{32})\*([a-f0-9]{64})\*([a-f0-9]{32})\*([a-f0-9]{64})\*1\*(192|1360)\*([a-f0-9]{384})$"), modes=[ - HashInfo(name="Keepass 1 AES / without keyfile", hashcat=13400, john=None, extended=False), + HashInfo(name="Keepass 1 AES / without keyfile", + hashcat=13400, john=None, extended=False), ], ), Prototype( - regex=re.compile(r"^\$keepass\$\*1\*6000\*(0|1)\*([a-f0-9]{32})\*([a-f0-9]{64})\*([a-f0-9]{32})\*([a-f0-9]{64})\*1\*(192|1360)\*([a-f0-9]{2720})\*1\*64\*([a-f0-9]{64})$"), + regex=re.compile( + r"^\$keepass\$\*1\*6000\*(0|1)\*([a-f0-9]{32})\*([a-f0-9]{64})\*([a-f0-9]{32})\*([a-f0-9]{64})\*1\*(192|1360)\*([a-f0-9]{2720})\*1\*64\*([a-f0-9]{64})$"), modes=[ - HashInfo(name="Keepass 1 Twofish / with keyfile", hashcat=13400, john=None, extended=False), + HashInfo(name="Keepass 1 Twofish / with keyfile", + hashcat=13400, john=None, extended=False), ], ), Prototype( - regex=re.compile(r"^\$keepass\$\*2\*6000\*222(\*[a-f0-9]{64}){2}(\*[a-f0-9]{32}){1}(\*[a-f0-9]{64}){2}\*1\*64(\*[a-f0-9]{64}){1}$"), + regex=re.compile( + r"^\$keepass\$\*2\*6000\*222(\*[a-f0-9]{64}){2}(\*[a-f0-9]{32}){1}(\*[a-f0-9]{64}){2}\*1\*64(\*[a-f0-9]{64}){1}$"), modes=[ - HashInfo(name="Keepass 2 AES / with keyfile", hashcat=13400, john=None, extended=False), + HashInfo(name="Keepass 2 AES / with keyfile", + hashcat=13400, john=None, extended=False), ], ), Prototype( - regex=re.compile(r"^\$keepass\$\*2\*6000\*222\*(([a-f0-9]{32,64})(\*)?)+$"), + regex=re.compile( + r"^\$keepass\$\*2\*6000\*222\*(([a-f0-9]{32,64})(\*)?)+$"), modes=[ - HashInfo(name="Keepass 2 AES / without keyfile", hashcat=13400, john=None, extended=False), + HashInfo(name="Keepass 2 AES / without keyfile", + hashcat=13400, john=None, extended=False), ], ), Prototype( regex=re.compile(r"^[a-z0-9\/.]{24}$", re.IGNORECASE), - modes=[HashInfo(name="Crypt16", hashcat=None, john=None, extended=False)], + modes=[HashInfo(name="Crypt16", hashcat=None, + john=None, extended=False)], ), Prototype( regex=re.compile(r"^[a-f0-9]{32}$", re.IGNORECASE), @@ -159,10 +183,14 @@ class HashInfo: description="Used for Linux Shadow files.", ), HashInfo(name="MD4", hashcat=900, john="raw-md4", extended=False), - HashInfo(name="Double MD5", hashcat=2600, john=None, extended=False), - HashInfo(name="Tiger-128", hashcat=None, john=None, extended=False), - HashInfo(name="Skein-256(128)", hashcat=None, john=None, extended=False), - HashInfo(name="Skein-512(128)", hashcat=None, john=None, extended=False), + HashInfo(name="Double MD5", hashcat=2600, + john=None, extended=False), + HashInfo(name="Tiger-128", hashcat=None, + john=None, extended=False), + HashInfo(name="Skein-256(128)", hashcat=None, + john=None, extended=False), + HashInfo(name="Skein-512(128)", hashcat=None, + john=None, extended=False), HashInfo( name="Lotus Notes/Domino 5", hashcat=8600, john="lotus5", extended=False ), @@ -179,7 +207,8 @@ class HashInfo: john=None, extended=True, ), - HashInfo(name="md5(sha1($pass))", hashcat=4400, john=None, extended=True), + HashInfo(name="md5(sha1($pass))", hashcat=4400, + john=None, extended=True), HashInfo( name="md5(utf16($pass))", hashcat=None, john="dynamic_29", extended=True ), @@ -225,7 +254,8 @@ class HashInfo: ], ), Prototype( - regex=re.compile(r"(?:\$dynamic_39\$)?[a-f0-9]{32}\$[a-z0-9]{1,32}\$?[a-z0-9]{1,500}", re.IGNORECASE), + regex=re.compile( + r"(?:\$dynamic_39\$)?[a-f0-9]{32}\$[a-z0-9]{1,32}\$?[a-z0-9]{1,500}", re.IGNORECASE), modes=[ HashInfo( name="net-md5", @@ -239,7 +269,8 @@ class HashInfo: regex=re.compile(r"^[a-f0-9]{32}:[a-z0-9]+$", re.IGNORECASE), modes=[ HashInfo(name="Skype", hashcat=23, john=None, extended=False), - HashInfo(name="ZipMonster", hashcat=None, john=None, extended=True), + HashInfo(name="ZipMonster", hashcat=None, + john=None, extended=True), HashInfo( name="md5(md5(md5($pass)))", hashcat=3500, john=None, extended=True ), @@ -249,9 +280,12 @@ class HashInfo: john=None, extended=True, ), - HashInfo(name="md5(sha1($pass))", hashcat=4400, john=None, extended=True), - HashInfo(name="md5($pass.$salt)", hashcat=10, john=None, extended=True), - HashInfo(name="md5($salt.$pass)", hashcat=20, john=None, extended=True), + HashInfo(name="md5(sha1($pass))", hashcat=4400, + john=None, extended=True), + HashInfo(name="md5($pass.$salt)", hashcat=10, + john=None, extended=True), + HashInfo(name="md5($salt.$pass)", hashcat=20, + john=None, extended=True), HashInfo( name="md5(unicode($pass).$salt)", hashcat=30, john=None, extended=True ), @@ -354,7 +388,8 @@ class HashInfo: Prototype( regex=re.compile(r"^(\$snefru\$)?[a-f0-9]{32}$", re.IGNORECASE), modes=[ - HashInfo(name="Snefru-128", hashcat=None, john="snefru-128", extended=False) + HashInfo(name="Snefru-128", hashcat=None, + john="snefru-128", extended=False) ], ), Prototype( @@ -400,7 +435,8 @@ class HashInfo: Prototype( regex=re.compile(r"^{SHA}[a-z0-9\/+]{27}=$", re.IGNORECASE), modes=[ - HashInfo(name="SHA-1(Base64)", hashcat=101, john="nsldap", extended=False), + HashInfo(name="SHA-1(Base64)", hashcat=101, + john="nsldap", extended=False), HashInfo( name="Netscape LDAP SHA", hashcat=101, john="nsldap", extended=False ), @@ -411,21 +447,25 @@ class HashInfo: r"^\$1\$[a-z0-9\/.]{0,8}\$[a-z0-9\/.]{22}(:.*)?$", re.IGNORECASE ), modes=[ - HashInfo(name="MD5 Crypt", hashcat=500, john="md5crypt", extended=False), + HashInfo(name="MD5 Crypt", hashcat=500, + john="md5crypt", extended=False), HashInfo( name="Cisco-IOS(MD5)", hashcat=500, john="md5crypt", extended=False ), - HashInfo(name="FreeBSD MD5", hashcat=500, john="md5crypt", extended=False), + HashInfo(name="FreeBSD MD5", hashcat=500, + john="md5crypt", extended=False), ], ), Prototype( regex=re.compile(r"^0x[a-f0-9]{32}$", re.IGNORECASE), - modes=[HashInfo(name="Lineage II C4", hashcat=None, john=None, extended=False)], + modes=[HashInfo(name="Lineage II C4", hashcat=None, + john=None, extended=False)], ), Prototype( regex=re.compile(r"^\$H\$[a-z0-9\/.]{31}$", re.IGNORECASE), modes=[ - HashInfo(name="phpBB v3.x", hashcat=400, john="phpass", extended=False), + HashInfo(name="phpBB v3.x", hashcat=400, + john="phpass", extended=False), HashInfo( name="Wordpress v2.6.0/2.6.1", hashcat=400, @@ -455,32 +495,38 @@ class HashInfo: regex=re.compile(r"^[a-f0-9]{32}:[a-z0-9]{2}$", re.IGNORECASE), modes=[ HashInfo(name="osCommerce", hashcat=21, john=None, extended=False), - HashInfo(name="xt:Commerce", hashcat=21, john=None, extended=False), + HashInfo(name="xt:Commerce", hashcat=21, + john=None, extended=False), ], ), Prototype( - regex=re.compile(r"^\$apr1\$[a-z0-9\/.]{0,8}\$[a-z0-9\/.]{22}$", re.IGNORECASE), + regex=re.compile( + r"^\$apr1\$[a-z0-9\/.]{0,8}\$[a-z0-9\/.]{22}$", re.IGNORECASE), modes=[ HashInfo(name="MD5(APR)", hashcat=1600, john=None, extended=False), - HashInfo(name="Apache MD5", hashcat=1600, john=None, extended=False), + HashInfo(name="Apache MD5", hashcat=1600, + john=None, extended=False), HashInfo(name="md5apr1", hashcat=1600, john=None, extended=True), ], ), Prototype( regex=re.compile(r"^{smd5}[a-z0-9$\/.]{31}$", re.IGNORECASE), modes=[ - HashInfo(name="AIX(smd5)", hashcat=6300, john="aix-smd5", extended=False) + HashInfo(name="AIX(smd5)", hashcat=6300, + john="aix-smd5", extended=False) ], ), Prototype( regex=re.compile(r"^[a-f0-9]{32}:.{5}$", re.IGNORECASE), modes=[ - HashInfo(name=u"IP.Board ≥ v2+", hashcat=2811, john=None, extended=False) + HashInfo(name=u"IP.Board ≥ v2+", hashcat=2811, + john=None, extended=False) ], ), Prototype( regex=re.compile(r"^[a-f0-9]{32}:.{8}$", re.IGNORECASE), - modes=[HashInfo(name=u"MyBB ≥ v1.2+", hashcat=2811, john=None, extended=False)], + modes=[HashInfo(name=u"MyBB ≥ v1.2+", hashcat=2811, + john=None, extended=False)], ), Prototype( regex=re.compile(r"^[a-z0-9]{34}$", re.IGNORECASE), @@ -500,7 +546,8 @@ class HashInfo: extended=False, description="Used for checksums.[link=https://en.wikipedia.org/wiki/SHA-1]See more[/link]", ), - HashInfo(name="Double SHA-1", hashcat=4500, john=None, extended=False), + HashInfo(name="Double SHA-1", hashcat=4500, + john=None, extended=False), HashInfo( name="RIPEMD-160", hashcat=6000, john="ripemd-160", extended=False ), @@ -552,8 +599,10 @@ class HashInfo: john="dynamic_270", extended=False, ), - HashInfo(name="Haval-160", hashcat=None, john=None, extended=False), - HashInfo(name="Tiger-160", hashcat=None, john=None, extended=False), + HashInfo(name="Haval-160", hashcat=None, + john=None, extended=False), + HashInfo(name="Tiger-160", hashcat=None, + john=None, extended=False), HashInfo(name="HAS-160", hashcat=None, john=None, extended=False), HashInfo( name="LinkedIn", @@ -562,8 +611,10 @@ class HashInfo: extended=False, description="Hashcat mode is only supported in oclHashcat." ), - HashInfo(name="Skein-256(160)", hashcat=None, john=None, extended=False), - HashInfo(name="Skein-512(160)", hashcat=None, john=None, extended=False), + HashInfo(name="Skein-256(160)", hashcat=None, + john=None, extended=False), + HashInfo(name="Skein-512(160)", hashcat=None, + john=None, extended=False), HashInfo( name="MangosWeb Enhanced CMS", hashcat=None, john=None, extended=True ), @@ -574,9 +625,12 @@ class HashInfo: extended=True, description="Hashcat mode is only supported in hashcat-legacy." ), - HashInfo(name="sha1(md5($pass))", hashcat=4700, john=None, extended=True), - HashInfo(name="sha1($pass.$salt)", hashcat=110, john=None, extended=True), - HashInfo(name="sha1($salt.$pass)", hashcat=120, john=None, extended=True), + HashInfo(name="sha1(md5($pass))", hashcat=4700, + john=None, extended=True), + HashInfo(name="sha1($pass.$salt)", hashcat=110, + john=None, extended=True), + HashInfo(name="sha1($salt.$pass)", hashcat=120, + john=None, extended=True), HashInfo( name="sha1(unicode($pass).$salt)", hashcat=130, john=None, extended=True ), @@ -603,14 +657,17 @@ class HashInfo: Prototype( regex=re.compile(r"^[a-f0-9]{40}$", re.IGNORECASE), modes=[ - HashInfo(name="MySQL5.x", hashcat=300, john="mysql-sha1", extended=False), - HashInfo(name="MySQL4.1", hashcat=300, john="mysql-sha1", extended=False), + HashInfo(name="MySQL5.x", hashcat=300, + john="mysql-sha1", extended=False), + HashInfo(name="MySQL4.1", hashcat=300, + john="mysql-sha1", extended=False), ], ), Prototype( regex=re.compile(r"^[a-z0-9]{43}$", re.IGNORECASE), modes=[ - HashInfo(name="Cisco-IOS(SHA-256)", hashcat=5700, john=None, extended=False) + HashInfo(name="Cisco-IOS(SHA-256)", + hashcat=5700, john=None, extended=False) ], ), Prototype( @@ -622,7 +679,8 @@ class HashInfo: HashInfo( name="Netscape LDAP SSHA", hashcat=111, john="nsldaps", extended=False ), - HashInfo(name="nsldaps", hashcat=111, john="nsldaps", extended=True), + HashInfo(name="nsldaps", hashcat=111, + john="nsldaps", extended=True), ], ), Prototype( @@ -639,17 +697,24 @@ class HashInfo: Prototype( regex=re.compile(r"^[a-f0-9]{48}$", re.IGNORECASE), modes=[ - HashInfo(name="Haval-192", hashcat=None, john=None, extended=False), - HashInfo(name="Tiger-192", hashcat=None, john="tiger", extended=False), - HashInfo(name="SHA-1(Oracle)", hashcat=None, john=None, extended=False), - HashInfo(name="OSX v10.4", hashcat=122, john="xsha", extended=False), - HashInfo(name="OSX v10.5", hashcat=122, john="xsha", extended=False), - HashInfo(name="OSX v10.6", hashcat=122, john="xsha", extended=False), + HashInfo(name="Haval-192", hashcat=None, + john=None, extended=False), + HashInfo(name="Tiger-192", hashcat=None, + john="tiger", extended=False), + HashInfo(name="SHA-1(Oracle)", hashcat=None, + john=None, extended=False), + HashInfo(name="OSX v10.4", hashcat=122, + john="xsha", extended=False), + HashInfo(name="OSX v10.5", hashcat=122, + john="xsha", extended=False), + HashInfo(name="OSX v10.6", hashcat=122, + john="xsha", extended=False), ], ), Prototype( regex=re.compile(r"^[a-f0-9]{51}$", re.IGNORECASE), - modes=[HashInfo(name="Palshop CMS", hashcat=None, john=None, extended=False)], + modes=[HashInfo(name="Palshop CMS", hashcat=None, + john=None, extended=False)], ), Prototype( regex=re.compile(r"^[a-z0-9]{51}$", re.IGNORECASE), @@ -663,16 +728,20 @@ class HashInfo: ], ), Prototype( - regex=re.compile(r"^{ssha1}[0-9]{2}\$[a-z0-9$\/.]{44}$", re.IGNORECASE), + regex=re.compile( + r"^{ssha1}[0-9]{2}\$[a-z0-9$\/.]{44}$", re.IGNORECASE), modes=[ - HashInfo(name="AIX(ssha1)", hashcat=6700, john="aix-ssha1", extended=False) + HashInfo(name="AIX(ssha1)", hashcat=6700, + john="aix-ssha1", extended=False) ], ), Prototype( regex=re.compile(r"^0x0100[a-f0-9]{48}$", re.IGNORECASE), modes=[ - HashInfo(name="MSSQL(2005)", hashcat=132, john="mssql05", extended=False), - HashInfo(name="MSSQL(2008)", hashcat=132, john="mssql05", extended=False), + HashInfo(name="MSSQL(2005)", hashcat=132, + john="mssql05", extended=False), + HashInfo(name="MSSQL(2008)", hashcat=132, + john="mssql05", extended=False), ], ), Prototype( @@ -693,7 +762,8 @@ class HashInfo: Prototype( regex=re.compile(r"^[a-f0-9]{56}$", re.IGNORECASE), modes=[ - HashInfo(name="SHA-224", hashcat=1300, john="raw-sha224", extended=False), + HashInfo(name="SHA-224", hashcat=1300, + john="raw-sha224", extended=False), HashInfo( name="sha224($salt.$pass)", hashcat=None, @@ -742,18 +812,24 @@ class HashInfo: john="dynamic_58", extended=True, ), - HashInfo(name="Haval-224", hashcat=None, john=None, extended=False), - HashInfo(name="SHA3-224", hashcat=17300, john=None, extended=False), - HashInfo(name="Skein-256(224)", hashcat=None, john=None, extended=False), - HashInfo(name="Skein-512(224)", hashcat=None, john=None, extended=False), + HashInfo(name="Haval-224", hashcat=None, + john=None, extended=False), + HashInfo(name="SHA3-224", hashcat=17300, + john=None, extended=False), + HashInfo(name="Skein-256(224)", hashcat=None, + john=None, extended=False), + HashInfo(name="Skein-512(224)", hashcat=None, + john=None, extended=False), HashInfo( name="Skein-224", hashcat=None, john="dynamic_330", extended=False ), - HashInfo(name="Keccak-224", hashcat=17700, john=None, extended=False), + HashInfo(name="Keccak-224", hashcat=17700, + john=None, extended=False), ], ), Prototype( - regex=re.compile(r"^(\$2[abxy]?|\$2)\$[0-9]{2}\$[a-z0-9\/.]{53}$", re.IGNORECASE), + regex=re.compile( + r"^(\$2[abxy]?|\$2)\$[0-9]{2}\$[a-z0-9\/.]{53}$", re.IGNORECASE), modes=[ HashInfo( name="Blowfish(OpenBSD)", @@ -768,11 +844,13 @@ class HashInfo: john=None, extended=False, ), - HashInfo(name="bcrypt", hashcat=3200, john="bcrypt", extended=False), + HashInfo(name="bcrypt", hashcat=3200, + john="bcrypt", extended=False), ], ), Prototype( - regex=re.compile(r"^\$y\$[.\/A-Za-z0-9]+\$[.\/a-zA-Z0-9]+\$[.\/A-Za-z0-9]{43}$", re.IGNORECASE), + regex=re.compile( + r"^\$y\$[.\/A-Za-z0-9]+\$[.\/a-zA-Z0-9]+\$[.\/A-Za-z0-9]{43}$", re.IGNORECASE), modes=[ HashInfo( name="yescrypt", @@ -785,10 +863,12 @@ class HashInfo: ), Prototype( regex=re.compile(r"^[a-f0-9]{40}:[a-f0-9]{16}$", re.IGNORECASE), - modes=[HashInfo(name="Android PIN", hashcat=5800, john=None, extended=False)], + modes=[HashInfo(name="Android PIN", hashcat=5800, + john=None, extended=False)], ), Prototype( - regex=re.compile(r"^(S:)?[a-f0-9]{40}(:)?[a-f0-9]{20}$", re.IGNORECASE), + regex=re.compile( + r"^(S:)?[a-f0-9]{40}(:)?[a-f0-9]{20}$", re.IGNORECASE), modes=[ HashInfo( name="Oracle 11g/12c", hashcat=112, john="oracle11", extended=False @@ -801,13 +881,15 @@ class HashInfo: re.IGNORECASE, ), modes=[ - HashInfo(name="bcrypt(SHA-256)", hashcat=None, john=None, extended=False) + HashInfo(name="bcrypt(SHA-256)", hashcat=None, + john=None, extended=False) ], ), Prototype( regex=re.compile(r"^[a-f0-9]{32}:.{3}$", re.IGNORECASE), modes=[ - HashInfo(name="vBulletin < v3.8.5", hashcat=2611, john=None, extended=False) + HashInfo(name="vBulletin < v3.8.5", + hashcat=2611, john=None, extended=False) ], ), Prototype( @@ -821,7 +903,8 @@ class HashInfo: Prototype( regex=re.compile(r"^(\$snefru\$)?[a-f0-9]{64}$", re.IGNORECASE), modes=[ - HashInfo(name="Snefru-256", hashcat=None, john="snefru-256", extended=False) + HashInfo(name="Snefru-256", hashcat=None, + john="snefru-256", extended=False) ], ), Prototype( @@ -855,19 +938,26 @@ class HashInfo: john="dynamic_300", extended=False, ), - HashInfo(name="GOST R 34.11-94", hashcat=6900, john="gost", extended=False), + HashInfo(name="GOST R 34.11-94", hashcat=6900, + john="gost", extended=False), HashInfo( name="GOST CryptoPro S-Box", hashcat=None, john=None, extended=False ), - HashInfo(name="Blake2b-256", hashcat=None, john=None, extended=False), + HashInfo(name="Blake2b-256", hashcat=None, + john=None, extended=False), HashInfo( name="SHA3-256", hashcat=17400, john="dynamic_380", extended=False ), - HashInfo(name="PANAMA", hashcat=None, john="dynamic_320", extended=False), - HashInfo(name="BLAKE2-256", hashcat=None, john=None, extended=False), - HashInfo(name="BLAKE2-384", hashcat=None, john=None, extended=False), - HashInfo(name="Skein-256", hashcat=None, john="skein-256", extended=False), - HashInfo(name="Skein-512(256)", hashcat=None, john=None, extended=False), + HashInfo(name="PANAMA", hashcat=None, + john="dynamic_320", extended=False), + HashInfo(name="BLAKE2-256", hashcat=None, + john=None, extended=False), + HashInfo(name="BLAKE2-384", hashcat=None, + john=None, extended=False), + HashInfo(name="Skein-256", hashcat=None, + john="skein-256", extended=False), + HashInfo(name="Skein-512(256)", hashcat=None, + john=None, extended=False), HashInfo(name="Ventrilo", hashcat=None, john=None, extended=True), HashInfo( name="sha256($pass.$salt)", @@ -946,7 +1036,8 @@ class HashInfo: Prototype( regex=re.compile(r"^[a-f0-9]{32}:[a-z0-9]{32}$", re.IGNORECASE), modes=[ - HashInfo(name="Joomla < v2.5.18", hashcat=11, john=None, extended=False) + HashInfo(name="Joomla < v2.5.18", hashcat=11, + john=None, extended=False) ], ), Prototype( @@ -962,7 +1053,8 @@ class HashInfo: r"^(\$chap\$0\*)?[a-f0-9]{32}[\*:][a-f0-9]{32}(:[0-9]{2})?$", re.IGNORECASE ), modes=[ - HashInfo(name="MD5(Chap)", hashcat=4800, john="chap", extended=False), + HashInfo(name="MD5(Chap)", hashcat=4800, + john="chap", extended=False), HashInfo( name="iSCSI CHAP Authentication", hashcat=4800, @@ -982,7 +1074,8 @@ class HashInfo: ], ), Prototype( - regex=re.compile(r"^{ssha256}[0-9]{2}\$[a-z0-9$\/.]{60}$", re.IGNORECASE), + regex=re.compile( + r"^{ssha256}[0-9]{2}\$[a-z0-9$\/.]{60}$", re.IGNORECASE), modes=[ HashInfo( name="AIX(ssha256)", hashcat=6400, john="aix-ssha256", extended=False @@ -1012,15 +1105,20 @@ class HashInfo: ), Prototype( regex=re.compile(r"^0x0100[a-f0-9]{88}$", re.IGNORECASE), - modes=[HashInfo(name="MSSQL(2000)", hashcat=131, john="mssql", extended=False)], + modes=[HashInfo(name="MSSQL(2000)", hashcat=131, + john="mssql", extended=False)], ), Prototype( regex=re.compile(r"^[a-f0-9]{96}$", re.IGNORECASE), modes=[ - HashInfo(name="SHA-384", hashcat=10800, john="raw-sha384", extended=False), - HashInfo(name="SHA3-384", hashcat=None, john="dynamic_390", extended=False), - HashInfo(name="Skein-512(384)", hashcat=None, john=None, extended=False), - HashInfo(name="Skein-1024(384)", hashcat=None, john=None, extended=False), + HashInfo(name="SHA-384", hashcat=10800, + john="raw-sha384", extended=False), + HashInfo(name="SHA3-384", hashcat=None, + john="dynamic_390", extended=False), + HashInfo(name="Skein-512(384)", hashcat=None, + john=None, extended=False), + HashInfo(name="Skein-1024(384)", hashcat=None, + john=None, extended=False), HashInfo( name="sha384($salt.$pass)", hashcat=None, @@ -1069,7 +1167,8 @@ class HashInfo: john="dynamic_78", extended=True, ), - HashInfo(name="Skein-384", hashcat=None, john="dynamic_350", extended=True), + HashInfo(name="Skein-384", hashcat=None, + john="dynamic_350", extended=True), ], ), Prototype( @@ -1103,8 +1202,10 @@ class HashInfo: extended=False, description="Used in Bitcoin Blockchain and Shadow Files.", ), - HashInfo(name="Keccak-512", hashcat=1800, john=None, extended=False), - HashInfo(name="Whirlpool", hashcat=6100, john="whirlpool", extended=False), + HashInfo(name="Keccak-512", hashcat=1800, + john=None, extended=False), + HashInfo(name="Whirlpool", hashcat=6100, + john="whirlpool", extended=False), HashInfo( name="Salsa10", hashcat=None, @@ -1126,9 +1227,12 @@ class HashInfo: extended=False, description="Used in Wireguard, Zcash, IPFS and more.[link = https://en.wikipedia.org/wiki/BLAKE_(hash_function)#Users_of_BLAKE2]See more[/link]", ), - HashInfo(name="SHA3-512", hashcat=17600, john="raw-sha3", extended=False), - HashInfo(name="Skein-512", hashcat=None, john="skein-512", extended=False), - HashInfo(name="Skein-1024(512)", hashcat=None, john=None, extended=False), + HashInfo(name="SHA3-512", hashcat=17600, + john="raw-sha3", extended=False), + HashInfo(name="Skein-512", hashcat=None, + john="skein-512", extended=False), + HashInfo(name="Skein-1024(512)", hashcat=None, + john=None, extended=False), HashInfo( name="sha512($pass.$salt)", hashcat=1710, john=None, extended=True ), @@ -1153,7 +1257,8 @@ class HashInfo: john="hmac-sha512", extended=True, ), - HashInfo(name="BLAKE2-224", hashcat=None, john=None, extended=False), + HashInfo(name="BLAKE2-224", hashcat=None, + john=None, extended=False), HashInfo( name="HMAC-SHA512 (key = $salt)", hashcat=1760, @@ -1187,18 +1292,22 @@ class HashInfo: Prototype( regex=re.compile(r"^[a-f0-9]{136}$", re.IGNORECASE), modes=[ - HashInfo(name="OSX v10.7", hashcat=1722, john="xsha512", extended=False) + HashInfo(name="OSX v10.7", hashcat=1722, + john="xsha512", extended=False) ], ), Prototype( regex=re.compile(r"^0x0200[a-f0-9]{136}$", re.IGNORECASE), modes=[ - HashInfo(name="MSSQL(2012)", hashcat=1731, john="mssql12", extended=False), - HashInfo(name="MSSQL(2014)", hashcat=1731, john="mssql12", extended=False), + HashInfo(name="MSSQL(2012)", hashcat=1731, + john="mssql12", extended=False), + HashInfo(name="MSSQL(2014)", hashcat=1731, + john="mssql12", extended=False), ], ), Prototype( - regex=re.compile(r"^\$ml\$[0-9]+\$[a-f0-9]{64}\$[a-f0-9]{128}$", re.IGNORECASE), + regex=re.compile( + r"^\$ml\$[0-9]+\$[a-f0-9]{64}\$[a-f0-9]{128}$", re.IGNORECASE), modes=[ HashInfo( name="OSX v10.8", @@ -1216,18 +1325,21 @@ class HashInfo: ), Prototype( regex=re.compile(r"^[a-f0-9]{256}$", re.IGNORECASE), - modes=[HashInfo(name="Skein-1024", hashcat=None, john=None, extended=False)], + modes=[HashInfo(name="Skein-1024", hashcat=None, + john=None, extended=False)], ), Prototype( regex=re.compile( r"^grub\.pbkdf2\.sha512\.[0-9]+\.([a-f0-9]{128,2048}\.|[0-9]+\.)?[a-f0-9]{128}$", re.IGNORECASE, ), - modes=[HashInfo(name="GRUB 2", hashcat=7200, john=None, extended=False)], + modes=[HashInfo(name="GRUB 2", hashcat=7200, + john=None, extended=False)], ), Prototype( regex=re.compile(r"^sha1\$[a-z0-9]+\$[a-f0-9]{40}$", re.IGNORECASE), - modes=[HashInfo(name="Django(SHA-1)", hashcat=124, john=None, extended=False)], + modes=[HashInfo(name="Django(SHA-1)", hashcat=124, + john=None, extended=False)], ), Prototype( regex=re.compile(r"^[a-f0-9]{49}$", re.IGNORECASE), @@ -1243,7 +1355,8 @@ class HashInfo: Prototype( regex=re.compile(r"^\$S\$[a-z0-9\/.]{52}$", re.IGNORECASE), modes=[ - HashInfo(name="Drupal > v7.x", hashcat=7900, john="drupal7", extended=False) + HashInfo(name="Drupal > v7.x", hashcat=7900, + john="drupal7", extended=False) ], ), Prototype( @@ -1258,9 +1371,11 @@ class HashInfo: ], ), Prototype( - regex=re.compile(r"^0x[a-f0-9]{4}[a-f0-9]{16}[a-f0-9]{64}$", re.IGNORECASE), + regex=re.compile( + r"^0x[a-f0-9]{4}[a-f0-9]{16}[a-f0-9]{64}$", re.IGNORECASE), modes=[ - HashInfo(name="Sybase ASE", hashcat=8000, john="sybasease", extended=False) + HashInfo(name="Sybase ASE", hashcat=8000, + john="sybasease", extended=False) ], ), Prototype( @@ -1291,17 +1406,20 @@ class HashInfo: Prototype( regex=re.compile(r"^sha256\$[a-z0-9]+\$[a-f0-9]{64}$", re.IGNORECASE), modes=[ - HashInfo(name="Django(SHA-256)", hashcat=None, john=None, extended=False) + HashInfo(name="Django(SHA-256)", hashcat=None, + john=None, extended=False) ], ), Prototype( regex=re.compile(r"^sha384\$[a-z0-9]+\$[a-f0-9]{96}$", re.IGNORECASE), modes=[ - HashInfo(name="Django(SHA-384)", hashcat=None, john=None, extended=False) + HashInfo(name="Django(SHA-384)", hashcat=None, + john=None, extended=False) ], ), Prototype( - regex=re.compile(r"^crypt1:[a-z0-9+=]{12}:[a-z0-9+=]{12}$", re.IGNORECASE), + regex=re.compile( + r"^crypt1:[a-z0-9+=]{12}:[a-z0-9+=]{12}$", re.IGNORECASE), modes=[ HashInfo( name="Clavister Secure Gateway", hashcat=None, john=None, extended=False @@ -1350,7 +1468,8 @@ class HashInfo: re.IGNORECASE, ), modes=[ - HashInfo(name="NetNTLMv2", hashcat=5600, john="netntlmv2", extended=False) + HashInfo(name="NetNTLMv2", hashcat=5600, + john="netntlmv2", extended=False) ], ), Prototype( @@ -1371,7 +1490,8 @@ class HashInfo: r"^\$scram\$[0-9]+\$[a-z0-9\/.]{16}\$sha-1=[a-z0-9\/.]{27},sha-256=[a-z0-9\/.]{43},sha-512=[a-z0-9\/.]{86}$", re.IGNORECASE, ), - modes=[HashInfo(name="SCRAM Hash", hashcat=None, john=None, extended=False)], + modes=[HashInfo(name="SCRAM Hash", hashcat=None, + john=None, extended=False)], ), Prototype( regex=re.compile(r"^[a-f0-9]{40}:[a-f0-9]{0,32}$", re.IGNORECASE), @@ -1428,7 +1548,8 @@ class HashInfo: ), Prototype( regex=re.compile(r"^[a-f0-9]{40}:[^*]{1,25}$", re.IGNORECASE), - modes=[HashInfo(name=u"SMF ≥ v1.1", hashcat=121, john=None, extended=False)], + modes=[HashInfo(name=u"SMF ≥ v1.1", hashcat=121, + john=None, extended=False)], ), Prototype( regex=re.compile( @@ -1456,7 +1577,8 @@ class HashInfo: r"^[a-f0-9]{32}:[0-9]+:[a-z0-9_.+-]+@[a-z0-9-]+\.[a-z0-9-.]+$", re.IGNORECASE, ), - modes=[HashInfo(name="Lastpass", hashcat=6800, john=None, extended=False)], + modes=[HashInfo(name="Lastpass", hashcat=6800, + john=None, extended=False)], ), Prototype( regex=re.compile(r"^[a-z0-9\/.]{16}([:$].{1,})?$", re.IGNORECASE), @@ -1467,7 +1589,8 @@ class HashInfo: ], ), Prototype( - regex=re.compile(r"^\$vnc\$\*[a-f0-9]{32}\*[a-f0-9]{32}$", re.IGNORECASE), + regex=re.compile( + r"^\$vnc\$\*[a-f0-9]{32}\*[a-f0-9]{32}$", re.IGNORECASE), modes=[HashInfo(name="VNC", hashcat=None, john="vnc", extended=False)], ), Prototype( @@ -1475,11 +1598,14 @@ class HashInfo: r"^[a-z0-9]{32}(:([a-z0-9-]+\.)?[a-z0-9-.]+\.[a-z]{2,7}:.+:[0-9]+)?$", re.IGNORECASE, ), - modes=[HashInfo(name="DNSSEC(NSEC3)", hashcat=8300, john=None, extended=False)], + modes=[HashInfo(name="DNSSEC(NSEC3)", hashcat=8300, + john=None, extended=False)], ), Prototype( - regex=re.compile(r"^(user-.+:)?\$racf\$\*.+\*[a-f0-9]{16}$", re.IGNORECASE), - modes=[HashInfo(name="RACF", hashcat=8500, john="racf", extended=False)], + regex=re.compile( + r"^(user-.+:)?\$racf\$\*.+\*[a-f0-9]{16}$", re.IGNORECASE), + modes=[HashInfo(name="RACF", hashcat=8500, + john="racf", extended=False)], ), Prototype( regex=re.compile(r"^\$3\$\$[a-f0-9]{32}$", re.IGNORECASE), @@ -1494,7 +1620,8 @@ class HashInfo: r"^\$sha1\$[0-9]+\$[a-z0-9\/.]{0,64}\$[a-z0-9\/.]{28}$", re.IGNORECASE ), modes=[ - HashInfo(name="SHA-1 Crypt", hashcat=15100, john="sha1crypt", extended=False) + HashInfo(name="SHA-1 Crypt", hashcat=15100, + john="sha1crypt", extended=False) ], ), Prototype( @@ -1510,13 +1637,15 @@ class HashInfo: r"^[:\$][AB][:\$]([a-f0-9]{1,8}[:\$])?[a-f0-9]{32}$", re.IGNORECASE ), modes=[ - HashInfo(name="MediaWiki", hashcat=3711, john="mediawiki", extended=False) + HashInfo(name="MediaWiki", hashcat=3711, + john="mediawiki", extended=False) ], ), Prototype( regex=re.compile(r"^[a-f0-9]{140}$", re.IGNORECASE), modes=[ - HashInfo(name="Minecraft(xAuth)", hashcat=None, john=None, extended=False) + HashInfo(name="Minecraft(xAuth)", hashcat=None, + john=None, extended=False) ], ), Prototype( @@ -1576,7 +1705,8 @@ class HashInfo: ], ), Prototype( - regex=re.compile(r"^{FSHP[0123]\|[0-9]+\|[0-9]+}[a-z0-9\/+=]+$", re.IGNORECASE), + regex=re.compile( + r"^{FSHP[0123]\|[0-9]+\|[0-9]+}[a-z0-9\/+=]+$", re.IGNORECASE), modes=[ HashInfo( name="Fairly Secure Hashed Password", @@ -1588,10 +1718,12 @@ class HashInfo: ), Prototype( regex=re.compile(r"^\$PHPS\$.+\$[a-f0-9]{32}$", re.IGNORECASE), - modes=[HashInfo(name="PHPS", hashcat=2612, john="phps", extended=False)], + modes=[HashInfo(name="PHPS", hashcat=2612, + john="phps", extended=False)], ), Prototype( - regex=re.compile(r"^[0-9]{4}:[a-f0-9]{16}:[a-f0-9]{2080}$", re.IGNORECASE), + regex=re.compile( + r"^[0-9]{4}:[a-f0-9]{16}:[a-f0-9]{2080}$", re.IGNORECASE), modes=[ HashInfo( name="1Password(Agile Keychain)", @@ -1619,21 +1751,25 @@ class HashInfo: r"^[a-f0-9]{256}:[a-f0-9]{256}:[a-f0-9]{16}:[a-f0-9]{16}:[a-f0-9]{320}:[a-f0-9]{16}:[a-f0-9]{40}:[a-f0-9]{40}:[a-f0-9]{32}$", re.IGNORECASE, ), - modes=[HashInfo(name="IKE-PSK MD5", hashcat=5300, john=None, extended=False)], + modes=[HashInfo(name="IKE-PSK MD5", hashcat=5300, + john=None, extended=False)], ), Prototype( regex=re.compile( r"^[a-f0-9]{256}:[a-f0-9]{256}:[a-f0-9]{16}:[a-f0-9]{16}:[a-f0-9]{320}:[a-f0-9]{16}:[a-f0-9]{40}:[a-f0-9]{40}:[a-f0-9]{40}$", re.IGNORECASE, ), - modes=[HashInfo(name="IKE-PSK SHA1", hashcat=5400, john=None, extended=False)], + modes=[HashInfo(name="IKE-PSK SHA1", hashcat=5400, + john=None, extended=False)], ), Prototype( regex=re.compile(r"^[a-z0-9\/+]{27}=$", re.IGNORECASE), - modes=[HashInfo(name="PeopleSoft", hashcat=133, john=None, extended=False)], + modes=[HashInfo(name="PeopleSoft", hashcat=133, + john=None, extended=False)], ), Prototype( - regex=re.compile(r"^crypt\$[a-f0-9]{5}\$[a-z0-9\/.]{13}$", re.IGNORECASE), + regex=re.compile( + r"^crypt\$[a-f0-9]{5}\$[a-z0-9\/.]{13}$", re.IGNORECASE), modes=[ HashInfo( name="Django(DES Crypt Wrapper)", @@ -1672,23 +1808,27 @@ class HashInfo: r"^bcrypt(\$2[axy]|\$2)\$[0-9]{2}\$[a-z0-9\/.]{53}$", re.IGNORECASE ), modes=[ - HashInfo(name="Django(bcrypt)", hashcat=None, john=None, extended=False) + HashInfo(name="Django(bcrypt)", hashcat=None, + john=None, extended=False) ], ), Prototype( regex=re.compile(r"^md5\$[a-f0-9]+\$[a-f0-9]{32}$", re.IGNORECASE), - modes=[HashInfo(name="Django(MD5)", hashcat=None, john=None, extended=False)], + modes=[HashInfo(name="Django(MD5)", hashcat=None, + john=None, extended=False)], ), Prototype( regex=re.compile(r"^\{PKCS5S2\}[a-z0-9\/+]{64}$", re.IGNORECASE), modes=[ - HashInfo(name="PBKDF2(Atlassian)", hashcat=None, john=None, extended=False) + HashInfo(name="PBKDF2(Atlassian)", hashcat=None, + john=None, extended=False) ], ), Prototype( regex=re.compile(r"^md5[a-f0-9]{32}$", re.IGNORECASE), modes=[ - HashInfo(name="PostgreSQL MD5", hashcat=None, john=None, extended=False) + HashInfo(name="PostgreSQL MD5", hashcat=None, + john=None, extended=False) ], ), Prototype( @@ -1714,15 +1854,19 @@ class HashInfo: ], ), Prototype( - regex=re.compile(r"^\$8\$[a-z0-9\/.]{14}\$[a-z0-9\/.]{43}$", re.IGNORECASE), + regex=re.compile( + r"^\$8\$[a-z0-9\/.]{14}\$[a-z0-9\/.]{43}$", re.IGNORECASE), modes=[ - HashInfo(name="Cisco Type 8", hashcat=9200, john="cisco8", extended=False) + HashInfo(name="Cisco Type 8", hashcat=9200, + john="cisco8", extended=False) ], ), Prototype( - regex=re.compile(r"^\$9\$[a-z0-9\/.]{14}\$[a-z0-9\/.]{43}$", re.IGNORECASE), + regex=re.compile( + r"^\$9\$[a-z0-9\/.]{14}\$[a-z0-9\/.]{43}$", re.IGNORECASE), modes=[ - HashInfo(name="Cisco Type 9", hashcat=9300, john="cisco9", extended=False) + HashInfo(name="Cisco Type 9", hashcat=9300, + john="cisco9", extended=False) ], ), Prototype( @@ -1864,11 +2008,13 @@ class HashInfo: Prototype( regex=re.compile(r"^(\$radmin2\$)?[a-f0-9]{32}$", re.IGNORECASE), modes=[ - HashInfo(name="RAdmin v2.x", hashcat=9900, john="radmin", extended=False) + HashInfo(name="RAdmin v2.x", hashcat=9900, + john="radmin", extended=False) ], ), Prototype( - regex=re.compile(r"^{x-issha,\s[0-9]{4}}[a-z0-9\/+=]+$", re.IGNORECASE), + regex=re.compile( + r"^{x-issha,\s[0-9]{4}}[a-z0-9\/+=]+$", re.IGNORECASE), modes=[ HashInfo( name="SAP CODVN H (PWDSALTEDHASH) iSSHA-1", @@ -1882,24 +2028,29 @@ class HashInfo: regex=re.compile( r"^\$cram_md5\$[a-z0-9\/+=-]+\$[a-z0-9\/+=-]{52}$", re.IGNORECASE ), - modes=[HashInfo(name="CRAM-MD5", hashcat=10200, john=None, extended=False)], + modes=[HashInfo(name="CRAM-MD5", hashcat=10200, + john=None, extended=False)], ), Prototype( regex=re.compile(r"^[a-f0-9]{16}:2:4:[a-f0-9]{32}$", re.IGNORECASE), - modes=[HashInfo(name="SipHash", hashcat=10100, john=None, extended=False)], + modes=[HashInfo(name="SipHash", hashcat=10100, + john=None, extended=False)], ), Prototype( regex=re.compile(r"^[a-f0-9]{4,}$", re.IGNORECASE), - modes=[HashInfo(name="Cisco Type 7", hashcat=None, john=None, extended=True)], + modes=[HashInfo(name="Cisco Type 7", hashcat=None, + john=None, extended=True)], ), Prototype( regex=re.compile(r"^[a-z0-9\/.]{13,}$", re.IGNORECASE), - modes=[HashInfo(name="BigCrypt", hashcat=None, john="bigcrypt", extended=True)], + modes=[HashInfo(name="BigCrypt", hashcat=None, + john="bigcrypt", extended=True)], ), Prototype( regex=re.compile(r"^(\$cisco4\$)?[a-z0-9\/.]{43}$", re.IGNORECASE), modes=[ - HashInfo(name="Cisco Type 4", hashcat=None, john="cisco4", extended=False) + HashInfo(name="Cisco Type 4", hashcat=None, + john="cisco4", extended=False) ], ), Prototype( @@ -1930,7 +2081,8 @@ class HashInfo: r"^\$siemens-s7\$[0-9]{1}\$[a-f0-9]{40}\$[a-f0-9]{40}$", re.IGNORECASE ), modes=[ - HashInfo(name="Siemens-S7", hashcat=None, john="siemens-s7", extended=False) + HashInfo(name="Siemens-S7", hashcat=None, + john="siemens-s7", extended=False) ], ), Prototype( @@ -1956,10 +2108,12 @@ class HashInfo: ), Prototype( regex=re.compile(r"^(\$dahua\$)?[a-z0-9]{8}$", re.IGNORECASE), - modes=[HashInfo(name="Dahua", hashcat=None, john="dahua", extended=False)], + modes=[HashInfo(name="Dahua", hashcat=None, + john="dahua", extended=False)], ), Prototype( - regex=re.compile(r"^\$mysqlna\$[a-f0-9]{40}[:*][a-f0-9]{40}$", re.IGNORECASE), + regex=re.compile( + r"^\$mysqlna\$[a-f0-9]{40}[:*][a-f0-9]{40}$", re.IGNORECASE), modes=[ HashInfo( name="MySQL Challenge-Response Authentication (SHA1)", @@ -2333,7 +2487,8 @@ class HashInfo: ], ), Prototype( - regex=re.compile(r"\$oldoffice\$[a-f0-9*]{100}:[a-f0-9]{10}", re.IGNORECASE), + regex=re.compile( + r"\$oldoffice\$[a-f0-9*]{100}:[a-f0-9]{10}", re.IGNORECASE), modes=[ HashInfo( name="MS Office ⇐ 2003 $0/$1, MD5 + RC4, collider #2", @@ -2414,7 +2569,8 @@ class HashInfo: ], ), Prototype( - regex=re.compile(r"^\$pkzip2?\$(1)\*[0-9]{1}\*[0-9]{1}\*[0-9a-f]{1,3}\*[0-9a-f]{1,8}\*[0-9a-f]{1,4}\*[0-9a-f]{1,8}\*[0-9a-f]{1,8}\*[0-9a-f]{1,8}\*(8)\*[0-9a-f]{1,8}(\*[0-9a-f]{1,8})?\*[0-9a-f]{1,8}\*[a-f0-9]+\*\$\/pkzip2?\$$", re.IGNORECASE), + regex=re.compile( + r"^\$pkzip2?\$(1)\*[0-9]{1}\*[0-9]{1}\*[0-9a-f]{1,3}\*[0-9a-f]{1,8}\*[0-9a-f]{1,4}\*[0-9a-f]{1,8}\*[0-9a-f]{1,8}\*[0-9a-f]{1,8}\*(8)\*[0-9a-f]{1,8}(\*[0-9a-f]{1,8})?\*[0-9a-f]{1,8}\*[a-f0-9]+\*\$\/pkzip2?\$$", re.IGNORECASE), modes=[ HashInfo( name="PKZIP (Compressed)", @@ -2425,7 +2581,8 @@ class HashInfo: ], ), Prototype( - regex=re.compile(r"^\$pkzip2?\$(1)\*[0-9]{1}\*[0-9]{1}\*[0-9a-f]{1,8}\*[0-9a-f]{1,8}\*[0-9a-f]{1,8}\*[0-9a-f]{1,8}\*[0-9a-f]{1,8}\*[0-9a-f]{1,8}\*(0)\*[0-9a-f]{1,8}(\*[0-9a-f]{1,8})?\*[0-9a-f]{1,8}\*[a-f0-9]+\*\$\/pkzip2?\$$", re.IGNORECASE), + regex=re.compile( + r"^\$pkzip2?\$(1)\*[0-9]{1}\*[0-9]{1}\*[0-9a-f]{1,8}\*[0-9a-f]{1,8}\*[0-9a-f]{1,8}\*[0-9a-f]{1,8}\*[0-9a-f]{1,8}\*[0-9a-f]{1,8}\*(0)\*[0-9a-f]{1,8}(\*[0-9a-f]{1,8})?\*[0-9a-f]{1,8}\*[a-f0-9]+\*\$\/pkzip2?\$$", re.IGNORECASE), modes=[ HashInfo( name="PKZIP (Uncompressed)", @@ -2436,7 +2593,8 @@ class HashInfo: ], ), Prototype( - regex=re.compile(r"^\$pkzip2?\$([2-8])\*[0-9]{1}(\*[0-9]{1}\*[0-9a-f]{1,3}\*([^0*][0-9a-f]{0,2})\*[0-9a-f]{1,8}(\*[0-9a-f]{1,8})?\*[0-9a-f]{1,8}\*[0-9a-f]+)+\*(8)\*[0-9a-f]{1,8}(\*[0-9a-f]{1,8})?\*[0-9a-f]{1,8}\*[a-f0-9]+\*\$\/pkzip2?\$$", re.IGNORECASE), + regex=re.compile( + r"^\$pkzip2?\$([2-8])\*[0-9]{1}(\*[0-9]{1}\*[0-9a-f]{1,3}\*([^0*][0-9a-f]{0,2})\*[0-9a-f]{1,8}(\*[0-9a-f]{1,8})?\*[0-9a-f]{1,8}\*[0-9a-f]+)+\*(8)\*[0-9a-f]{1,8}(\*[0-9a-f]{1,8})?\*[0-9a-f]{1,8}\*[a-f0-9]+\*\$\/pkzip2?\$$", re.IGNORECASE), modes=[ HashInfo( name="PKZIP (Compressed Multi-File)", @@ -2447,7 +2605,8 @@ class HashInfo: ], ), Prototype( - regex=re.compile(r"^\$pkzip2?\$([2-8])\*[0-9]{1}(\*[0-9]{1}\*[0-9a-f]{1,8}\*([0-9a-f]{1,8})\*[0-9a-f]{1,8}(\*[0-9a-f]{1,8})?\*[0-9a-f]{1,8}\*[0-9a-f]+)+\*([08])\*[0-9a-f]{1,8}(\*[0-9a-f]{1,8})?\*[0-9a-f]{1,8}\*[a-f0-9]+\*\$\/pkzip2?\$$", re.IGNORECASE), + regex=re.compile( + r"^\$pkzip2?\$([2-8])\*[0-9]{1}(\*[0-9]{1}\*[0-9a-f]{1,8}\*([0-9a-f]{1,8})\*[0-9a-f]{1,8}(\*[0-9a-f]{1,8})?\*[0-9a-f]{1,8}\*[0-9a-f]+)+\*([08])\*[0-9a-f]{1,8}(\*[0-9a-f]{1,8})?\*[0-9a-f]{1,8}\*[a-f0-9]+\*\$\/pkzip2?\$$", re.IGNORECASE), modes=[ HashInfo( name="PKZIP (Mixed Multi-File)", @@ -2458,7 +2617,8 @@ class HashInfo: ], ), Prototype( - regex=re.compile(r"^\$pkzip2?\$([2-8])\*[0-9]{1}(\*[0-9]{1}\*[0-9a-f]{1,3}\*[0-9a-f]{1,8}\*[0-9a-f]{1,8}(\*[0-9a-f]{1,8})?\*[0-9a-f]{1,8}\*[0-9a-f]+)+\*\$\/pkzip2?\$$", re.IGNORECASE), + regex=re.compile( + r"^\$pkzip2?\$([2-8])\*[0-9]{1}(\*[0-9]{1}\*[0-9a-f]{1,3}\*[0-9a-f]{1,8}\*[0-9a-f]{1,8}(\*[0-9a-f]{1,8})?\*[0-9a-f]{1,8}\*[0-9a-f]+)+\*\$\/pkzip2?\$$", re.IGNORECASE), modes=[ HashInfo( name="PKZIP (Mixed Multi-File Checksum-Only)", @@ -2469,7 +2629,8 @@ class HashInfo: ], ), Prototype( - regex=re.compile(r"^\$argon2i\$v=19\$m=[0-9]{1,6},t=[0-9]{1,2},p=[0-9]{1,2}\$[^$]+\$[^\s]{6,134}$", re.IGNORECASE), + regex=re.compile( + r"^\$argon2i\$v=19\$m=[0-9]{1,6},t=[0-9]{1,2},p=[0-9]{1,2}\$[^$]+\$[^\s]{6,134}$", re.IGNORECASE), modes=[ HashInfo( name="Argon2i", @@ -2480,7 +2641,8 @@ class HashInfo: ], ), Prototype( - regex=re.compile(r"^\$argon2id\$v=19\$m=[0-9]{1,6},t=[0-9]{1,2},p=[0-9]{1,2}\$[^$]+\$[^\s]{6,134}$", re.IGNORECASE), + regex=re.compile( + r"^\$argon2id\$v=19\$m=[0-9]{1,6},t=[0-9]{1,2},p=[0-9]{1,2}\$[^$]+\$[^\s]{6,134}$", re.IGNORECASE), modes=[ HashInfo( name="Argon2id", @@ -2491,7 +2653,8 @@ class HashInfo: ], ), Prototype( - regex=re.compile(r"^\$argon2d\$v=19\$m=[0-9]{1,6},t=[0-9]{1,2},p=[0-9]{1,2}\$[^$]+\$[^\s]{6,134}$", re.IGNORECASE), + regex=re.compile( + r"^\$argon2d\$v=19\$m=[0-9]{1,6},t=[0-9]{1,2},p=[0-9]{1,2}\$[^$]+\$[^\s]{6,134}$", re.IGNORECASE), modes=[ HashInfo( name="Argon2d", @@ -2502,7 +2665,8 @@ class HashInfo: ], ), Prototype( - regex=re.compile(r"\$bitlocker\$[0-9]\$[0-9]{2}\$[a-f0-9]{32}\$[a-f0-9]{7}\$[a-f0-9]{2}\$[a-f0-9]{24}\$[a-f0-9]{2}\$[a-f0-9]{120}", re.IGNORECASE), + regex=re.compile( + r"\$bitlocker\$[0-9]\$[0-9]{2}\$[a-f0-9]{32}\$[a-f0-9]{7}\$[a-f0-9]{2}\$[a-f0-9]{24}\$[a-f0-9]{2}\$[a-f0-9]{120}", re.IGNORECASE), modes=[ HashInfo( name="BitLocker", @@ -2524,18 +2688,68 @@ class HashInfo: ] ), Prototype( - regex=re.compile(r"^\$sshng\$4\$16\$[0-9]{32}\$1232\$[a-f0-9]{2464}$", re.IGNORECASE), + regex=re.compile( + r"^\$sshng\$0\$\d\$[a-f0-9]{16}\$\d{1,8}\$[a-f0-9]{64,65536}$", re.IGNORECASE), + modes=[ + HashInfo( + name="RSA/DSA/EC/OpenSSH Private Keys ($0$)", + hashcat=22911, + john="ssh", + extended=False + ), + ] + ), + Prototype( + regex=re.compile( + r"^\$sshng\$6\$\d\d?\$([a-f0-9]{16}|[a-f0-9]{32})\$\d{1,8}\$[a-f0-9]{64,65536}(\$\d{1,4}\$\d{1,6})?$", re.IGNORECASE), + modes=[ + HashInfo( + name="RSA/DSA/EC/OpenSSH Private Keys ($6$)", + hashcat=22921, + john="ssh", + extended=False + ), + ] + ), + Prototype( + regex=re.compile( + r"^\$sshng\$[13]\$\d{2}\$[a-f0-9]{32}\$\d{1,8}\$[a-f0-9]{64,65536}$", re.IGNORECASE), + modes=[ + HashInfo( + name="RSA/DSA/EC/OpenSSH Private Keys ($1$, $3$)", + hashcat=22931, + john="ssh", + extended=False + ), + ] + ), + Prototype( + regex=re.compile( + r"^\$sshng\$4\$\d{2}\$[a-f0-9]{32}\$\d{1,8}\$[a-f0-9]{64,65536}$", re.IGNORECASE), modes=[ HashInfo( name="RSA/DSA/EC/OpenSSH Private Keys ($4$)", hashcat=22941, - john=None, + john="ssh", + extended=False + ), + ] + ), + Prototype( + regex=re.compile( + r"^\$sshng\$5\$\d{2}\$[a-f0-9]{32}\$\d{1,8}\$[a-f0-9]{64,65536}$", re.IGNORECASE), + modes=[ + HashInfo( + name="RSA/DSA/EC/OpenSSH Private Keys ($5$)", + hashcat=22951, + john="ssh", extended=False ), ] ), Prototype( - regex=re.compile(r"^\$RAR3\$\*(1)\*[0-9a-f]{1,16}\*[0-9a-f]{1,8}\*[0-9a-f]{1,16}\*[0-9a-f]{1,16}\*[01]\*([0-9a-f]+|[^*]{1,64}\*[0-9a-f]{1,16})\*30$", re.IGNORECASE), + regex=re.compile( + r"^\$RAR3\$\*(1)\*[0-9a-f]{1,16}\*[0-9a-f]{1,8}\*[0-9a-f]{1,16}\*[0-9a-f]{1,16}\*[01]\*([0-9a-f]+|[^*]{1,64}\*[0-9a-f]{1,16})\*30$", re.IGNORECASE), modes=[ HashInfo( name="RAR3-p (Uncompressed)", @@ -2546,7 +2760,8 @@ class HashInfo: ] ), Prototype( - regex=re.compile(r"^\$RAR3\$\*(1)\*[0-9a-f]{1,16}\*[0-9a-f]{1,8}\*[0-9a-f]{1,16}\*[0-9a-f]{1,16}\*[01]\*([0-9a-f]+|[^*]{1,64}\*[0-9a-f]{1,16})\*(31|32|33|34|35)$", re.IGNORECASE), + regex=re.compile( + r"^\$RAR3\$\*(1)\*[0-9a-f]{1,16}\*[0-9a-f]{1,8}\*[0-9a-f]{1,16}\*[0-9a-f]{1,16}\*[01]\*([0-9a-f]+|[^*]{1,64}\*[0-9a-f]{1,16})\*(31|32|33|34|35)$", re.IGNORECASE), modes=[ HashInfo( name="RAR3-p (Compressed)", @@ -2557,7 +2772,8 @@ class HashInfo: ] ), Prototype( - regex=re.compile(r"^\$RAR3\$\*0\*[0-9a-f]{1,16}\*[0-9a-f]+$", re.IGNORECASE), + regex=re.compile( + r"^\$RAR3\$\*0\*[0-9a-f]{1,16}\*[0-9a-f]+$", re.IGNORECASE), modes=[ HashInfo( name="RAR3-hp", @@ -2568,7 +2784,8 @@ class HashInfo: ] ), Prototype( - regex=re.compile(r"^\$rar5\$[0-9a-f]{1,2}\$[0-9a-f]{1,32}\$[0-9a-f]{1,2}\$[0-9a-f]{1,32}\$[0-9a-f]{1,2}\$[0-9a-f]{1,16}$", re.IGNORECASE), + regex=re.compile( + r"^\$rar5\$[0-9a-f]{1,2}\$[0-9a-f]{1,32}\$[0-9a-f]{1,2}\$[0-9a-f]{1,32}\$[0-9a-f]{1,2}\$[0-9a-f]{1,16}$", re.IGNORECASE), modes=[ HashInfo( name="RAR5", @@ -2579,7 +2796,8 @@ class HashInfo: ] ), Prototype( - regex=re.compile(r"^\$keepass\$\*1\*\d+\*\d\*[0-9a-f]{32}\*[0-9a-f]{64}\*[0-9a-f]{32}\*[0-9a-f]{64}\*\d\*[^*]*(\*[0-9a-f]+)?$", re.IGNORECASE), + regex=re.compile( + r"^\$keepass\$\*1\*\d+\*\d\*[0-9a-f]{32}\*[0-9a-f]{64}\*[0-9a-f]{32}\*[0-9a-f]{64}\*\d\*[^*]*(\*[0-9a-f]+)?$", re.IGNORECASE), modes=[ HashInfo( name="KeePass 1 AES (without keyfile)", @@ -2590,7 +2808,8 @@ class HashInfo: ] ), Prototype( - regex=re.compile(r"^\$keepass\$\*1\*\d+\*\d\*[0-9a-f]{32}\*[0-9a-f]{64}\*[0-9a-f]{32}\*[0-9a-f]{64}\*\d\*[^*]*(\*[0-9a-f]+)?\*\d+\*\d+\*[0-9a-f]{64}$", re.IGNORECASE), + regex=re.compile( + r"^\$keepass\$\*1\*\d+\*\d\*[0-9a-f]{32}\*[0-9a-f]{64}\*[0-9a-f]{32}\*[0-9a-f]{64}\*\d\*[^*]*(\*[0-9a-f]+)?\*\d+\*\d+\*[0-9a-f]{64}$", re.IGNORECASE), modes=[ HashInfo( name="KeePass 1 TwoFish (with keyfile)", @@ -2601,7 +2820,8 @@ class HashInfo: ] ), Prototype( - regex=re.compile(r"^\$keepass\$\*2\*\d+\*\d+\*[0-9a-f]+\*[0-9a-f]+\*[0-9a-f]+\*[0-9a-f]+\*[0-9a-f]+$", re.IGNORECASE), + regex=re.compile( + r"^\$keepass\$\*2\*\d+\*\d+\*[0-9a-f]+\*[0-9a-f]+\*[0-9a-f]+\*[0-9a-f]+\*[0-9a-f]+$", re.IGNORECASE), modes=[ HashInfo( name="KeePass 2 AES (without keyfile)", @@ -2612,7 +2832,8 @@ class HashInfo: ] ), Prototype( - regex=re.compile(r"^\$keepass\$\*2\*\d+\*\d+\*[0-9a-f]+\*[0-9a-f]+\*[0-9a-f]+\*[0-9a-f]+\*[0-9a-f]+\*\d+\*\d+\*[0-9a-f]+$", re.IGNORECASE), + regex=re.compile( + r"^\$keepass\$\*2\*\d+\*\d+\*[0-9a-f]+\*[0-9a-f]+\*[0-9a-f]+\*[0-9a-f]+\*[0-9a-f]+\*\d+\*\d+\*[0-9a-f]+$", re.IGNORECASE), modes=[ HashInfo( name="KeePass 2 AES (with keyfile)", @@ -2623,7 +2844,8 @@ class HashInfo: ] ), Prototype( - regex=re.compile(r"^\$odf\$\*1\*1\*100000\*32\*[a-f0-9]{64}\*16\*[a-f0-9]{32}\*16\*[a-f0-9]{32}\*0\*[a-f0-9]{2048}$", re.IGNORECASE), + regex=re.compile( + r"^\$odf\$\*1\*1\*100000\*32\*[a-f0-9]{64}\*16\*[a-f0-9]{32}\*16\*[a-f0-9]{32}\*0\*[a-f0-9]{2048}$", re.IGNORECASE), modes=[ HashInfo( name="Open Document Format (ODF) 1.2 (SHA-256, AES)", @@ -2634,7 +2856,8 @@ class HashInfo: ] ), Prototype( - regex=re.compile(r"^[A-Za-z0-9-_]*\.[A-Za-z0-9-_]*\.[A-Za-z0-9-_]*$", re.IGNORECASE), + regex=re.compile( + r"^[A-Za-z0-9-_]*\.[A-Za-z0-9-_]*\.[A-Za-z0-9-_]*$", re.IGNORECASE), modes=[ HashInfo( name="JWT (JSON Web Token)", diff --git a/tests/test_hashcat.py b/tests/test_hashcat.py index 9af0239..5d1f6b1 100644 --- a/tests/test_hashcat.py +++ b/tests/test_hashcat.py @@ -1102,6 +1102,27 @@ def test_hashcat_21800(): x = runner.api_return_hashes_as_json(hashes) assert '"hashcat": 21800,' in x +def test_hashcat_22911(): + hashes = [ + "$sshng$0$8$7532262427635482$1224$e1b1690703b83fd0ab6677c89a00dfce57fc2f345ebd2b2993bf0d8bb267449d08839213dc234dd23c7a181077e00080ced2700a161c4352ce5574b9758926f09106157715b6d756cf6dd844e473c6bb3c2b591cdbf684394a49935f7d62bcc324c1392aee499e3d6235db0556d27adc6e35ef4654ee5fc72e60dff605484e75c6fd6ae29cb476f8a658dbcce9f9591a9dad023f6d9aa223c3d56261e056c5cafa93438937e0762b989cd10e6280a09488be07423c549514ff9686338e72dbe6bdc5015944739a9f183cacf04c1c141dc8c8d8aa8636c85a6c0578a5983ed33d5ff5ee6a66a54d86defd1c4f9d6a59446861bf4cc7bd667bc92b9d328c154f442d1d03d4d370dcc065a1d5420c5b71e4c35a457e11a0c9f489636559a2ac53bb4cfee2b0058f8a9d1ccc38a844ee0d1ff5d6938427bf24d6e4c69f10e6ebce9187d51e867ac3b362b9c6149712e8378a9ac91d1aab1a7a5f088ddbdead0cc754c30961b7a71284b5c6658f7219632de6007d5145a1ae062f807234230ff73a3436ce28ae3bfa0f880d1e49ec8a288da18db14905bc7a7b061a51c429876db81ad528efb469ba2bf46c7344aadc7d082efc83ede3894bf6b1738151e642f6f60a41069ad862d2f4f8d55733bd6d85086d1d9bb1913a9d4680ea0b49f712c590a3c18b91ef745b9bdf461af67879d94f9672de4abe0b7d2e4efba1f8bb6ffbb4a095742d5cff0e225b1b5e166854bb9821e4283d97f80855c81efea1eb3e7881a6049186650bfbf68f30302c069883668e373c12ce9a39de8d7c1be22a717d9c74410c45093aae03c5de8cc0ec662fe3bb81bf952e17b854001bcad9b36cab2f473a609878a419b735c66f3732bd5540fb1cba9fe081f87cecf63a6243cd2049dfa25a763ef2e0633bfb13a411207d8ca1c8f3c0c30b8a7583436cad7bd8c28ba625b9c53dc280b314671b0a55d75a28d3b21de250e3c554b86ca5d32821ab912c6607687c4dc5b3214216a7409621ce6fb89bd5309a7dd8ec9ae4b751bdfb6b5d12d733a89d87722dbdb1b15df5463241f0f56c401e095ea5dee07c0ded1f11ffbd7c93a41add0cfd8c57b44f255fdfd1929cd7d068d6cf951ba8ab0d718996fec10aaa26a4314d4c1272f744adf3c7e4d710ae171c072a7c61c2b020a445cf32be3083d3bc62083f2385bbae4fadddf8714258b996abd574638891bb918e877fdef3a4856b910999a6dc9dbd13c0e938825cd895c96d39cb86bb283a53fac7090c71a9320c6a34af309d2218af64c895f5eff8eee28cf94e7a7437a0922d83bfa39f08bb40e354d9ace07aa586a446dc217ede98b6ca9637545cc11ef56732fc9cd3dc06e459d868137b75d39a87e6721a95f2b84e57c94ef703486a2857821e497b990c95080015d825b6dc63d666f66cfa35912e607c3b650d81dc98c0c53322796ff9249cdfe7a375e1d01607816a85bb43f3969767a9aaed07161344e714d7e875b40f3524f95e476e605dbd2ac51e36075701fa93b66f36470796ebf5d35690a297e19729f9ac59d98622e3ad3e45a2914bdd2b807446c8b430e54c1a607fd25a69bf469a61d2e3bc3697b786c047bc60dbeabe6372d71e9b7c9787bb2559c663a011f864ecf32793e65f4bdd76370d99f602ddcbc7e5aa7d2749f36e8d0f209a378782882bc06ee5b5014c2a6248469f0fe0fc5369383db0bc898c0760b8c40fe20342fa5b" + ] + x = runner.api_return_hashes_as_json(hashes) + assert '"hashcat": 22911,' in x + +def test_hashcat_22921(): + hashes = [ + "$sshng$6$8$7620048997557487$1224$13517a1204dc69528c474ef5cbb02d548698771f2a607c04ea54eb92f13dedba0f2185d2884b4db0c95ce6432856108ea2db858be443e0f8004ffcd60857e4ff1e42b17f056998ec5f96806a06e39cc6e6d7ef4ce8ae62b57b2ec0d0236c35cf4bc00dd6fda45e4788dcca0f0e44dddae1dad2d6e7b705d076f2f8fc5837eec4a002d9633bcad1f395ca8e85e78459abe293451567494d440c3f087bb7fe4d6588018f92ca327dda514a99d7b4b32434da0e3b1bf9344afb2fe29f8d8315a385fe8b81fd4c202c7d82cd9f0bb1600e59762ab6ea1b42e4e299f0a59ce510767e1e1138453d362d0a1aa6680e86b5aa0bd5c62165f4fe7c2867f9533578085adc36739d6c9cf7b36899aac39dcabac8b39194433423e8e18ba28496bbe14dd01231eb5b091ae9de0f7f9ea714c22edac394077fb758fe496e1880571ade399ac229457ddd98577f8a01a036ad3bc8b03a9fb02e26b4b76f6cb676eabe82d1606fca0c5fca62cd1d82c3df1ed58ab4acd4611b2827ebde722bc05e471a427225818aa36dabf5bf1203ccb0ebc8dec097e49f7f948bfe7b939e6d0ff1125b863c033768f588964f8b77ca1e2425751f873f80e5d6a0671f7860cf4a46533585094726c3afe5f7203fa4a01650fa9839772c713a033139cfc6a6e6f7dc62e5844d4c57ef4fc3321bc85d597a54bd6fe37e9e696cf3b5ec66f55232e0964dc5cf880d8a41a9891150618bd9c088fd9824af0d86f817f2c79429c3d56cd6eb41eb6120f9accc10a863f23a2bb6c57d4bd6193f2283ae0215e2e87e672a8438e2550c044fa9556bdb4afc40d8c2752ffbc6c95571756a3c230bb2fa95f519f8da238ef0857ecf860247a8b26e28269f9bad564e7d8bfba2eac9760b52449251cb35e183f5b309a09071535154c6f1013b58f305b544f3589c9eb0e9ac4267a84374a3eab49c53aa9bedbf97f8f19ebc212d8db74ee03554a3514140667fa4ce8e06aad3f32d1b00015be0e8979fe66736018589beee06d6f318851dbe8d9689e70202185d71fc5e5a3d2996ddb8ae1d7718c49855c6f8c43301e0915f324f30d0d9c6a8504a91ad5a7179aafb87ede58598394949910874850994abe815817359152ff6a7c8cc6f19524dfc5e50ddfd038a2275bf809e3c8f05ed3e3137ebd62d91cd3578533787c3847e3c5e07e5a891480e5ceabcf6c344e7bec8b640ab9a03e90b846b35d2f46ba150accef32d2597b064810b15fd54fca6d2b146feabcd05c0b51617ae95e36f6817a62c3ff42c5c2f6f1d20a8a1fd334d3b7d3f83bba057b79d9b5508bb0cb706ba00acb0ab797401fdcfac80b5b6e38e51aec0b38f33ff4690425ca28d88a2e876591521230150b4e20a4a82e50061cee9c0705100bfe5fdbd8ef27aec20387cf32455ef305bce2a91ae6da91fc41376b97149e9b41c901b24811df9272ff09718923b8d94e8e459a164a22b0eca47653f3efcbf08188c5da78cd9fb9eda1761094f9d8bc3d479e9f40c7d79ebaaba2a5c632329f20a9962040ff8f512b42c5f32a8460d87b8e93c6f980a1562c436eea1c8994fbf671dda3c4ccd3c142acfcdde2ab61227289ad408213ac8e22d9ef487f36925f5ba3b8e7e913d25c4a8592c861d13f03b615bc2760aabc61d68db80d35296a3312fdf4b56c0fbee5ab3fea1cf9caf3960a564046939e8002d2dd909db446d85aeae9dd42a33fe28684f722172e6" + ] + x = runner.api_return_hashes_as_json(hashes) + assert '"hashcat": 22921,' in x + +def test_hashcat_22931(): + hashes = [ + "$sshng$1$16$14987802644369864387956120434709$1232$ffa56007ed83e49fdc439c776a9dec9656521385073bf71931a2c6503c93917e560cc98940c8cdcf2c709265e9ba20783a3bacc63423a98e40ea8999182613e1f5a80084719ca0e5c390299de1ea947df41f2ff1489bddfe13c6128612c5c82b7fc1ef5105ea28adda7b415729c66fb6cbc4b6b51ef518f74e1971f88e0cfabd69e8c4270678e360149ce15716fef4736df296a20d2607ef269a3c69896fc423683d6057e00064f84e04caf4d4663b51b307cfb1d1dbd6b3bf67764a08847c7b83fa5544e6a1e950f16acda8c8bac30675bc3cea9c7e06790ddc7cd1e4177b93bdd0d9edf9cdceb4a4444b437d967acdb92274a7b10d9cd1073ab4e9b5dd468aabe1f40a02b2e51f19840798c2311b625037eba5f0a0256638b42577385f4d4c730a9cedf4e244ce74656a21bf16756857866433dbb1feff9c4323d234d4235b72ed5a3adc3a6c9bae373472d64b7882d1762911326f330cb42d8ab7931f1ad2de56c4e6e8a6e838108cf9a2728ffa356796f63d94723b1d0aad5b4fcea16ab0730e7553804ad9ffb6ecdbdd925fca05ca1c076ed09a30df8a5add44a43c36b92248dc8dd4605bc2ee557e6e4438abf9ea7d047f764c55a5ba46a41719b9c55e54ad5fbfce6a89b9283c163d8464ecdda5aaf113d038b659950b8c79e87abad019eb77535cc8e63f760a4c87ca344a563475361766df718519b1b7e4b3ab511952fcc9b011f1d8971f9261509139b739afcc2c9acd006ee714dffc8c9a4df0d54770d70c8c28c27cdf9ee7301fd64530ef0ec3eb044fb891b193a7aaa9158625ed9f5a842c86ed09e5377d90a69aea4c5fd321bc3ac9b2a0d34509a5de0b72ac3f81304895c4381e01136b1e8654cec20c220c0ac6a1300f031ffc68ddeab554279024c122589b91556feef394a1663b42fb8460af5fe881cb1cd4984b84be75125411b1d3fc236dd81f99b872aad511d28944e91d2f8853f11be85b6930a15b4d0b3d215d76416970ade5726979c1d737980fb68ecb03d1196a69f4013dd2e296a75a4c69664b0162cb8b22af18c536a8ce51f39b1282f2fe07e6b034627f075cfb20dffee62817aabeea60befea1ac93ba608d957e4030e41be7bc55275bc4037300f6ba736370eb7c9240629853c95f9304b7ffd26a10d55ae735fa943e29aa9ed437b61955fc16cde9ea7a3658d831bdbc38befa45cec80da9ccb6d21da83ff666e32d7c5c0ca0ade2cd685407ee701c1c707fc5c80b22f3af42ac1353fcdc09a459086434db7c78792decdc91572363478a14d1256346a9ac6336b8183ed6252106aa546dd092c0bbb464cdb44ae165d67d1be135877587de3bbbd02b5ef6473f125366f6dae0536ebbe18ab8de8ce2ef3d26d6dd400319e7d07ae276b081e94446e9a72877cf23e9ba52406b1842e3a0dcf7bbdc63a1336b894be475613cc917eb47724f64e621bfc3053d7423e3e2fb141a3368dc8881fa20e040e9a6bc2e7348e923e4c20e506566b8663bf7d557e792cbe4adffcf9c520d58565d77f6bf1c9ed5fa3209f8047765d01b9c264e97a3ef9ff90766ad69a4f508041e168bf0f7419e54ec88bdc4c858231cdba60774a27cc459cd65b46e26a620a43033788c6e2ee8916670568d6e6c700515f2cbca3eef62028ce75245cf8f99cd6e0ba7839a7b335c797a06ff80571950ebec2fccebb89265025b3250e4a5c9c3a62f471324556fc4db044cebe97f62c86913" + ] + x = runner.api_return_hashes_as_json(hashes) + assert '"hashcat": 22931,' in x + def test_hashcat_22941(): hashes = [ "$sshng$4$16$01684556100059289727957814500256$1232$b04d45fdfdf02a9ca91cbc9c53f9e59956822c72c718929aca9251cffd9ac48e48c490b7b6b6043df3a70cf5fbcc2f358b0e8b70d39155c93032b0fd79ec68f6cb8b7de8422ec95cb027a9eaacc453b0b99b5d3f8d6771d6b95b0242a1d8664de8598e8d6b6d6ee360fda5ae0106061a79e88ef2eef98a000b638f8fdc367155ec2d1120b366f74f0933efe5d174e7107db29dc8fb592b22b9837114415d78036c116b2d31b2080c7159442f2d1a61900f5ae4913548c8e7fc716dd4f812bc7e57b2dd5d3f56c6ae0e91c3bc2897d9341cb282d86b915d43cf20ad16fbd2056104529576142354a430281f5e458923ef8014ff9950351798bfcbbcb66cb98bb2cccea48c134b0e05e978d4308c82617869b207f0ed7b227893f2cdde2d6b6a98246de8a2494d5e018a84724780fbe8d1fa91c922908d18ccffbbbbc81e6578fe8bb5c8596a8cf689f3f12b810dee95887e12439e487313229a37913e3cd12bddba3bac94fab03aad8607f6034fa87f7a7a2ac74d0c0a6e6bc905f569221861e1e388cf379cda799d7b56eac58440d17fe97fa68a537d34317376c00dfa9a99e04725a0d2fcf27ee50463e725813c96fe2eed16de59e8a6944d903e11f7923d57ae6d4a1f8085ce19f4d180f13027806f3965fdf875ea092f103f28a5f42f356254958fa7eb0bca2389a6ad4e305640cc64501e6b16330b063037b1cf6fe64131f308e50d9d1dc687ffa487681941084ff21cb54c1b5903b7a78d9913595fa0124f1dde49b1bee2ea83837efe34e2cd6051a4a7a1437eaa84ad332ffd9946b952ed634948789d9541820a0f9c6f44ab6d3cad645743c76c54e79bfdc4fb8e43a0fd7d871baea98e78131bc530b6d736fa1ec5ac70438609497ab2ff8d516146b4b1b3488791cb84dccc0096b570e2ffb3a93cccefec0af7ce616a64466d2d4196941ba9e051dc00ed05e963a7b4a286973ee0b5df4fd92dfb0b229b10730d454832d945c6a596862212d109ce78ac14ffb5d775548b2f3e2ae4be059a24465cc10b7c810f8cc3db7cb327619cc104ebea575ac097d20701dc623f7aa893b785cc20851f3972390e00ab3355655f7d5bea323832c17d8e078e917843ef7fcaca349366092b6743bf7511d5fceb2d992fbd18574be532365be41ad80a114704a64a7aefdf98c907aa10e4d5c547dd8d21647ea9d5c975fe1b24525d94c3eb03e071742fd5f09f22da669b649fac9f87d8cf16c475d006421f69a9b2d5c4037ccc9bf9f0aa0e7df8ac5fcb0d88a528833f9640799026d2fe8694fa1a0307c5f24002172464b290bedd85667800edbff2f1de7119e5b65730a24922e42d53ef28b0a59817a298426dc72e29a85e59e3d777b19eb934bcd620a903aff72927cdbe7253f77694ab0ef970378b4347f6166ca2a40b23cc31970f0cbefd08d2d72bf2c3961d67c73a5a24f75a65e540dc5735520b0d81250af8980ddca3e22a9b25773afd27c76e564ff437d4208df14d802f1d0848390f45924cdd6ced3c9ffb726bb358b334ea0e0481acdd103f2db05f508f62588621d0b8fa274a69eba0d418d85086d9139391f7e28dc54fe9bab801f1fea854f27ad2e5907ae6f9a4b4527d16a8af3c8cbe2c6d82209dc6c7da060da58294eb00380598330c4c19d45581d09e04c0153a8559700b3a8ceab9b8124f84d397356cd9e38e3916afc1f63a3e1dfbc7df8dd0a7d0704e38a0ea523dfc2b9defd5" @@ -1109,6 +1130,13 @@ def test_hashcat_22941(): x = runner.api_return_hashes_as_json(hashes) assert '"hashcat": 22941,' in x +def test_hashcat_22951(): + hashes = [ + "$sshng$5$16$52935050547964524511665675049973$1232$febee392e88cea0086b3cdefd3efec8aedb6011ca4ca9884ef9776d09559109c328fd4daef62ea4094a588d90d4617bc0348cc1205ae140e5bdca4e81bf7a8ff4fcc9954d3548ba9a0d143a504750d04d41c455d6100b33dacc5f9a10036ae75be69a81471e945554a52ca12b95640a08f607eab70c4a750dc48917f3c9ee23c537e9b4a49728a9773a999dfd842cf9a38155029ea5d42f617dbec630889d078ffadaf3ff28eed65389a73528f3d0863fffd9a740edd59ca223595e330bca37ac5a003ac556d2b6232f9900fc8654586e73e7b2d83327d61b2fc561a78aacc8aff473bb3d18ddccae87d84de143a8a98550d955d01d4e6074ac62aa0af0bca58a0c53d0d7cf1a26345c1bd3eca7a0c0e711f5c7f942d50bc872be971d0c17dbc5a88f043a937ff5d28c5ef8d8d291e511d070b14a0cc696ee5088a944b113bc7e697cdc793e931c3f0f3a892b44aad1468e6c45becdcaa89febda17fcd5fe6ff430695e04b5b6271e032e3529315367e56337777a5b342c19d3ebc7441ac0f79b93749ad4526b8be0a5cf5756363aac93da6dc19dbfff15bacbbf2dae7a549afdab8e0589321ac0a612576bbfe06fde086075d1244450a3667f793ccc81fd5ccc5b1d08e6f447e3e0cd89b901049bedb1e65b23ede0d8f00ff1c984743b50342c50408e9060ed6a809a7b068972c9542cd91de0767c02a73d192ea600008bf4a6ef339c7f2db767346cc479e61abedb4ba4a67f72e91ac49a2e92bb4bacd97aed0b044c258e2004fa0fb8da3678a57d37187c1246c90a107540161462145fa7307a6d4db34694fb1b090f07bedb9ca0e71aefd3ce5601b87778fd6b66391c3c61d528a5965f91370f52a72f0622620329f96c5dd68561e0f6576f3a2bc5c21a95aed569edc4ed979746b32909178e550907c5f41d7b24480e81a874b931c23f13517ab5f9331f11819d982bf9e5b8a03034b47c8785f8902611eac26716976bccd51d19864f10ee1fbd62f8b0149c22ab06205a20f9f9fcb0a5279552a8923c3ace2e134f6b190653f430c1a4b82f762283028d9c0c8d1a3428731f4f405f40f947f297a43aa3ba2267bbc749a5677da92a63d51d24aa5ca3e9e1d35a8143d7b4bac481f0c56754e980a60cf2d330797fc81f6c6f405760f1257103ac6edf10976c9005f4a261f7aad055400c4f18dc445eb3a403740ad6c58afa4e8edb30fad907488baf0ede2eb3d3687d1e8724dd69c7bd14b90d4f113fc9f84a2c01ab00917f53cd879a4031b1c91a4d4d7d9e712a584959137001d331f6725dca81ea6cc55fac7fc0e8b578dec0983ca98c3789cdf83507e4c3ba056fdcbea26693a313077290d7c6695f4cc6de4848532f0149cc06dbf4c76d02944178520585923b636196ea2cbcacc43950b308fc7929e85de076a2ab65c9bd8ebb0c04c041281178a48d8d2165d315b3e74abf0a38505b71ae5b2a6e7f87861e174cff873a1f61980b53ef3acdd2ea6a25425b162e5dc0bc1aa2992585d2da1625a6593cc2d4fe8c86eeb4df0e27cda54685f7245e5c48063d489e8d93bd5303bebe633139dcdd04afa005d03d1185a64e8711c0b09d9d0b38b35d6ef1b1e35353a7a4396863650a3843c687a00396dd3db53e8d28baf29101abb9f628ba896b091618f24187f6eeb814e4b64130768fb37e89b9b3230e50a7e5aba852a983525c8f193deb1fe27b334cdc3bdfa4c301d04907ee29a848393" + ] + x = runner.api_return_hashes_as_json(hashes) + assert '"hashcat": 22951,' in x + def test_hashcat_23700(): hashes = [ "$RAR3$*1*e54a73729887cb53*49b0a846*16*14*1*34620bcca8176642a210b1051901921e*30"