mem safe & format
This commit is contained in:
1 parent
2cc8e1d788
commit
8f92e64ffd
13 files changed
+813
-656
No files matched your search
+50
-32
@@ -9,51 +9,69 @@ from collectionparser.parser import Processor
|
||||
|
||||
|
||||
class CrackTest(unittest.TestCase):
|
||||
|
||||
def test_hash_saved_by_processor(self):
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
src = Path(tmp) / 'in.txt'
|
||||
src.write_text('[email protected]:5f4dcc3b5aa765d61d8327deb882cf99\n[email protected]:plainpw\n',
|
||||
encoding='utf8')
|
||||
processor = Processor(str(Path(tmp) / 's.txt'), str(Path(tmp) / 'f.txt'),
|
||||
str(Path(tmp) / 'h.txt'))
|
||||
src = Path(tmp) / "in.txt"
|
||||
src.write_text(
|
||||
"[email protected]:5f4dcc3b5aa765d61d8327deb882cf99\n[email protected]:plainpw\n",
|
||||
encoding="utf8",
|
||||
)
|
||||
processor = Processor(
|
||||
str(Path(tmp) / "s.txt"),
|
||||
str(Path(tmp) / "f.txt"),
|
||||
str(Path(tmp) / "h.txt"),
|
||||
)
|
||||
processor.process(src)
|
||||
hashes = ''.join(Path(p).read_text(encoding='utf8')
|
||||
for p in glob(str(Path(tmp) / 'h.txt.part.*')))
|
||||
success = ''.join(Path(p).read_text(encoding='utf8')
|
||||
for p in glob(str(Path(tmp) / 's.txt.part.*')))
|
||||
self.assertEqual('[email protected]:5f4dcc3b5aa765d61d8327deb882cf99\n', hashes)
|
||||
self.assertEqual('[email protected]:plainpw\n', success)
|
||||
hashes = "".join(
|
||||
Path(p).read_text(encoding="utf8")
|
||||
for p in glob(str(Path(tmp) / "h.txt.part.*"))
|
||||
)
|
||||
success = "".join(
|
||||
Path(p).read_text(encoding="utf8")
|
||||
for p in glob(str(Path(tmp) / "s.txt.part.*"))
|
||||
)
|
||||
self.assertEqual("[email protected]:5f4dcc3b5aa765d61d8327deb882cf99\n", hashes)
|
||||
self.assertEqual("[email protected]:plainpw\n", success)
|
||||
|
||||
def test_crack_md5_and_sha1(self):
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
hashes = Path(tmp) / 'hashes.txt'
|
||||
hashes = Path(tmp) / "hashes.txt"
|
||||
hashes.write_bytes(
|
||||
b'[email protected]:' + hashlib.md5(b'hunter2').hexdigest().encode() + b'\n'
|
||||
b'[email protected]:' + hashlib.sha1(b'secret').hexdigest().encode() + b'\n'
|
||||
b'[email protected]:not-a-hash\n')
|
||||
wordlist = Path(tmp) / 'words.txt'
|
||||
wordlist.write_bytes(b'foo\nhunter2\nbar\nsecret\n')
|
||||
out = Path(tmp) / 'cracked.txt'
|
||||
b"[email protected]:" + hashlib.md5(b"hunter2").hexdigest().encode() + b"\n"
|
||||
b"[email protected]:" + hashlib.sha1(b"secret").hexdigest().encode() + b"\n"
|
||||
b"[email protected]:not-a-hash\n"
|
||||
)
|
||||
wordlist = Path(tmp) / "words.txt"
|
||||
wordlist.write_bytes(b"foo\nhunter2\nbar\nsecret\n")
|
||||
out = Path(tmp) / "cracked.txt"
|
||||
total = crack(str(hashes), str(out), wordlists=[str(wordlist)], workers=2)
|
||||
self.assertEqual(2, total)
|
||||
self.assertEqual({b'[email protected]:hunter2', b'[email protected]:secret'},
|
||||
set(out.read_bytes().splitlines()))
|
||||
self.assertEqual(
|
||||
{b"[email protected]:hunter2", b"[email protected]:secret"},
|
||||
set(out.read_bytes().splitlines()),
|
||||
)
|
||||
|
||||
def test_crack_from_plaintext_passwords(self):
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
hashes = Path(tmp) / 'hashes.txt'
|
||||
hashes.write_bytes(b'[email protected]:' + hashlib.md5(b'reused').hexdigest().encode() + b'\n')
|
||||
empty = Path(tmp) / 'empty.txt'
|
||||
empty.write_bytes(b'')
|
||||
plaintext = Path(tmp) / 'plain.txt'
|
||||
plaintext.write_bytes(b'[email protected]:reused\n')
|
||||
out = Path(tmp) / 'cracked.txt'
|
||||
total = crack(str(hashes), str(out), wordlists=[str(empty)],
|
||||
passwords_from=[str(plaintext)], workers=1)
|
||||
hashes = Path(tmp) / "hashes.txt"
|
||||
hashes.write_bytes(
|
||||
b"[email protected]:" + hashlib.md5(b"reused").hexdigest().encode() + b"\n"
|
||||
)
|
||||
empty = Path(tmp) / "empty.txt"
|
||||
empty.write_bytes(b"")
|
||||
plaintext = Path(tmp) / "plain.txt"
|
||||
plaintext.write_bytes(b"[email protected]:reused\n")
|
||||
out = Path(tmp) / "cracked.txt"
|
||||
total = crack(
|
||||
str(hashes),
|
||||
str(out),
|
||||
wordlists=[str(empty)],
|
||||
passwords_from=[str(plaintext)],
|
||||
workers=1,
|
||||
)
|
||||
self.assertEqual(1, total)
|
||||
self.assertEqual([b'[email protected]:reused'], out.read_bytes().splitlines())
|
||||
self.assertEqual([b"[email protected]:reused"], out.read_bytes().splitlines())
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
+109
-90
@@ -6,114 +6,133 @@ from collectionparser.utils import PasswordType
|
||||
|
||||
|
||||
class ParserTest(unittest.TestCase):
|
||||
|
||||
def test_parse_1(self):
|
||||
self.assertIsNotNone(p('[email protected]:123'))
|
||||
self.assertIsNotNone(p('hello@@gmail.com:123'))
|
||||
self.assertIsNotNone(p('hello @ gmail.com:123'))
|
||||
self.assertIsNotNone(p('hello @@ gmail.com:123'))
|
||||
self.assertIsNotNone(p('hello @@ gmail.com:123:'))
|
||||
self.assertIsNone(p('[email protected]:'))
|
||||
self.assertIsNotNone(p('[email protected] 2296'))
|
||||
self.assertIsNotNone(p('hello @@ gmail.com,123'))
|
||||
self.assertIsNotNone(p('123,hello @@ gmail.com'))
|
||||
self.assertIsNone(p('[email protected]'))
|
||||
self.assertIsNone(p('[email protected]:?????? ??? ?????'))
|
||||
self.assertIsNone(p('[email protected]:85.242.201.81,felix'))
|
||||
self.assertIsNone(p('[email protected]:125.26.106.158,nopparat'))
|
||||
self.assertIsNone(p('[email protected]:INSERT INTO `users'
|
||||
'`(`id`, `verify`, `username`, `email`, `password'))
|
||||
self.assertIsNotNone(p('[email protected]:Login'))
|
||||
self.assertIsNotNone(p('[email protected] ilovebois3'))
|
||||
self.assertIsNotNone(p('[email protected] atohiyamamot'))
|
||||
self.assertIsNotNone(p('[email protected]@hotmail.com:8765432f'))
|
||||
self.assertIsNotNone(p('neanta,[email protected],jp:123'))
|
||||
self.assertIsNotNone(p('iemongozalu@gmail@com mizo1210'))
|
||||
self.assertIsNotNone(p('[email protected]@hotmail.com:sayonara'))
|
||||
self.assertIsNone(p('iemongozalu@gmail@com:'))
|
||||
self.assertIsNone(p('iemongozalu@gmail@com,'))
|
||||
self.assertIsNotNone(p('[email protected] chi chi 123'))
|
||||
self.assertIsNotNone(p('[email protected]@34589@@@@@@:19820429'))
|
||||
self.assertIsNotNone(p('[email protected]@33584@@@@@@ 03260702'))
|
||||
self.assertIsNotNone(p("[email protected]:123"))
|
||||
self.assertIsNotNone(p("hello@@gmail.com:123"))
|
||||
self.assertIsNotNone(p("hello @ gmail.com:123"))
|
||||
self.assertIsNotNone(p("hello @@ gmail.com:123"))
|
||||
self.assertIsNotNone(p("hello @@ gmail.com:123:"))
|
||||
self.assertIsNone(p("[email protected]:"))
|
||||
self.assertIsNotNone(p("[email protected] 2296"))
|
||||
self.assertIsNotNone(p("hello @@ gmail.com,123"))
|
||||
self.assertIsNotNone(p("123,hello @@ gmail.com"))
|
||||
self.assertIsNone(p("[email protected]"))
|
||||
self.assertIsNone(p("[email protected]:?????? ??? ?????"))
|
||||
self.assertIsNone(
|
||||
p("[email protected]:85.242.201.81,felix")
|
||||
)
|
||||
self.assertIsNone(
|
||||
p("[email protected]:125.26.106.158,nopparat")
|
||||
)
|
||||
self.assertIsNone(
|
||||
p(
|
||||
"[email protected]:INSERT INTO `users"
|
||||
"`(`id`, `verify`, `username`, `email`, `password"
|
||||
)
|
||||
)
|
||||
self.assertIsNotNone(p("[email protected]:Login"))
|
||||
self.assertIsNotNone(p("[email protected] ilovebois3"))
|
||||
self.assertIsNotNone(p("[email protected] atohiyamamot"))
|
||||
self.assertIsNotNone(p("[email protected]@hotmail.com:8765432f"))
|
||||
self.assertIsNotNone(p("neanta,[email protected],jp:123"))
|
||||
self.assertIsNotNone(p("iemongozalu@gmail@com mizo1210"))
|
||||
self.assertIsNotNone(p("[email protected]@hotmail.com:sayonara"))
|
||||
self.assertIsNone(p("iemongozalu@gmail@com:"))
|
||||
self.assertIsNone(p("iemongozalu@gmail@com,"))
|
||||
self.assertIsNotNone(p("[email protected] chi chi 123"))
|
||||
self.assertIsNotNone(p("[email protected]@34589@@@@@@:19820429"))
|
||||
self.assertIsNotNone(p("[email protected]@33584@@@@@@ 03260702"))
|
||||
|
||||
self.assertIsNotNone(p('<[email protected]:sedagirl'))
|
||||
self.assertIsNotNone(p('<[email protected]>:<phoenix>'))
|
||||
self.assertIsNotNone(p('[email protected]< gorillague'))
|
||||
self.assertIsNone(p('</td>@bk.ru:peng7788525'))
|
||||
self.assertIsNone(p('<admin/>@mail.ru:andrew123'))
|
||||
self.assertIsNone(p('<i>test</i>@bk.ru:lippens'))
|
||||
self.assertIsNone(p('ESSENTIALWAY'))
|
||||
self.assertIsNone(p('ESTARRON-ESPINOSA'))
|
||||
self.assertIsNone(p('ERLONMIRANDA:sha98ne'))
|
||||
self.assertIsNotNone(p("<[email protected]:sedagirl"))
|
||||
self.assertIsNotNone(p("<[email protected]>:<phoenix>"))
|
||||
self.assertIsNotNone(p("[email protected]< gorillague"))
|
||||
self.assertIsNone(p("</td>@bk.ru:peng7788525"))
|
||||
self.assertIsNone(p("<admin/>@mail.ru:andrew123"))
|
||||
self.assertIsNone(p("<i>test</i>@bk.ru:lippens"))
|
||||
self.assertIsNone(p("ESSENTIALWAY"))
|
||||
self.assertIsNone(p("ESTARRON-ESPINOSA"))
|
||||
self.assertIsNone(p("ERLONMIRANDA:sha98ne"))
|
||||
# No '@' and no '%40' -> cannot yield a pair, must stay None.
|
||||
self.assertIsNone(p('no at sign at all'))
|
||||
self.assertIsNone(p('plain text line:with:colons'))
|
||||
self.assertIsNotNone(p('user%40domain.com:password')) # %40 still becomes '@'
|
||||
self.assertIsNotNone(p('[email protected]:[email protected]:victory'))
|
||||
self.assertIsNotNone(p('[email protected];;shanmuga6'))
|
||||
self.assertIsNotNone(p('[email protected]::shanmuga6'))
|
||||
self.assertIsNotNone(p('[email protected]::hell@'))
|
||||
self.assertIsNotNone(p('[email protected]::hell@:'))
|
||||
self.assertIsNotNone(p('Aliulfat [email protected]:4849040'))
|
||||
self.assertIsNotNone(p('harry gill@ yaho.com:7087096771'))
|
||||
self.assertIsNotNone(p('shaheen .jafri @gmail.com:destinyuntold'))
|
||||
self.assertIsNotNone(p('mail@ottino snc.it:04921540011'))
|
||||
self.assertIsNone(p('sssssssandhya@gmail.:puleyar1'))
|
||||
self.assertIsNone(p("no at sign at all"))
|
||||
self.assertIsNone(p("plain text line:with:colons"))
|
||||
self.assertIsNotNone(p("user%40domain.com:password")) # %40 still becomes '@'
|
||||
self.assertIsNotNone(
|
||||
p("[email protected]:[email protected]:victory")
|
||||
)
|
||||
self.assertIsNotNone(p("[email protected];;shanmuga6"))
|
||||
self.assertIsNotNone(p("[email protected]::shanmuga6"))
|
||||
self.assertIsNotNone(p("[email protected]::hell@"))
|
||||
self.assertIsNotNone(p("[email protected]::hell@:"))
|
||||
self.assertIsNotNone(p("Aliulfat [email protected]:4849040"))
|
||||
self.assertIsNotNone(p("harry gill@ yaho.com:7087096771"))
|
||||
self.assertIsNotNone(p("shaheen .jafri @gmail.com:destinyuntold"))
|
||||
self.assertIsNotNone(p("mail@ottino snc.it:04921540011"))
|
||||
self.assertIsNone(p("sssssssandhya@gmail.:puleyar1"))
|
||||
|
||||
self.assertIsNotNone(p('cjywzy%40eyou.com:Aebdd797'))
|
||||
self.assertIsNotNone(p('finanza.rapido2013%40yahoo.it:123456'))
|
||||
self.assertIsNotNone(p('habitacasa3%40yahoo.it:cesira89'))
|
||||
self.assertIsNotNone(p('harry gill@ yaho.com:7087096771'))
|
||||
self.assertIsNone(p('uwe kopka <[email protected]>:biochemie'))
|
||||
self.assertIsNotNone(p("cjywzy%40eyou.com:Aebdd797"))
|
||||
self.assertIsNotNone(p("finanza.rapido2013%40yahoo.it:123456"))
|
||||
self.assertIsNotNone(p("habitacasa3%40yahoo.it:cesira89"))
|
||||
self.assertIsNotNone(p("harry gill@ yaho.com:7087096771"))
|
||||
self.assertIsNone(p("uwe kopka <[email protected]>:biochemie"))
|
||||
|
||||
# multi-line.
|
||||
self.assertIsNotNone(p('INLOVE12:::1920-05-02:[email protected]:INLOVE12'))
|
||||
self.assertIsNotNone(p('Nicesweetboobs:1983-10-05:[email protected]:ilovekiss'))
|
||||
self.assertIsNotNone(p('[email protected]:[email protected];97tata1'))
|
||||
self.assertIsNotNone(p("INLOVE12:::1920-05-02:[email protected]:INLOVE12"))
|
||||
self.assertIsNotNone(
|
||||
p("Nicesweetboobs:1983-10-05:[email protected]:ilovekiss")
|
||||
)
|
||||
self.assertIsNotNone(
|
||||
p("[email protected]:[email protected];97tata1")
|
||||
)
|
||||
|
||||
multi_lines = [
|
||||
'[email protected];[email protected]:CAROLINAPIANTA',
|
||||
'Nicesweetboobs:1983-10-05:[email protected]:ilovekiss',
|
||||
'190.40.252.191,XabelciberX,[email protected],gatita9685567',
|
||||
'201.245.164.50,andres vergara,[email protected],barcelona10',
|
||||
'65.94.11.229,stephane,[email protected],ste264',
|
||||
'INLOVE12:::1920-05-02:[email protected]:INLOVE12',
|
||||
'agaliha84:::1969-07-02:[email protected]:agaliha84',
|
||||
'happy8360:::1963-09-12:[email protected]:jdj407',
|
||||
'tinkertailor99:1947-10-12:[email protected]:77880577',
|
||||
'Cash5178:1970-11-06:[email protected]:hulk1234',
|
||||
'Creecher0275:1972-04-22:[email protected]:complete',
|
||||
'[email protected]:[email protected];97tata1',
|
||||
'[email protected]:[email protected];zwezda',
|
||||
'SavvySummer:1973-03-17:[email protected]:sunshine0699',
|
||||
'RaWRrr:1990-12-02:[email protected]:nitsua',
|
||||
'[email protected];[email protected]:CAROLINAPIANTA',
|
||||
'[email protected];[email protected]:RRAHOTEL',
|
||||
'silent4463:1980-10-14:[email protected]:salinas'
|
||||
"[email protected];[email protected]:CAROLINAPIANTA",
|
||||
"Nicesweetboobs:1983-10-05:[email protected]:ilovekiss",
|
||||
"190.40.252.191,XabelciberX,[email protected],gatita9685567",
|
||||
"201.245.164.50,andres vergara,[email protected],barcelona10",
|
||||
"65.94.11.229,stephane,[email protected],ste264",
|
||||
"INLOVE12:::1920-05-02:[email protected]:INLOVE12",
|
||||
"agaliha84:::1969-07-02:[email protected]:agaliha84",
|
||||
"happy8360:::1963-09-12:[email protected]:jdj407",
|
||||
"tinkertailor99:1947-10-12:[email protected]:77880577",
|
||||
"Cash5178:1970-11-06:[email protected]:hulk1234",
|
||||
"Creecher0275:1972-04-22:[email protected]:complete",
|
||||
"[email protected]:[email protected];97tata1",
|
||||
"[email protected]:[email protected];zwezda",
|
||||
"SavvySummer:1973-03-17:[email protected]:sunshine0699",
|
||||
"RaWRrr:1990-12-02:[email protected]:nitsua",
|
||||
"[email protected];[email protected]:CAROLINAPIANTA",
|
||||
"[email protected];[email protected]:RRAHOTEL",
|
||||
"silent4463:1980-10-14:[email protected]:salinas",
|
||||
]
|
||||
|
||||
for multi_line in multi_lines:
|
||||
self.assertIsNotNone(p(multi_line))
|
||||
|
||||
self.assertIsNone(p('300396 matelymaly [email protected] 222.155.173.78 '
|
||||
'3d2c5414a041f518b03b750e62e4ebc3:Nhc'))
|
||||
self.assertIsNone(
|
||||
p(
|
||||
"300396 matelymaly [email protected] 222.155.173.78 "
|
||||
"3d2c5414a041f518b03b750e62e4ebc3:Nhc"
|
||||
)
|
||||
)
|
||||
# 32-char hex is a hash, not junk: kept (typed) so `crack` can attack it.
|
||||
hashed = p('05-02-2012;5721869;[email protected]:f02368945726d5fc2a14eb576f7276c0')
|
||||
hashed = p(
|
||||
"05-02-2012;5721869;[email protected]:f02368945726d5fc2a14eb576f7276c0"
|
||||
)
|
||||
self.assertIsNotNone(hashed)
|
||||
self.assertEqual(PasswordType.MD5, hashed[2])
|
||||
self.assertIsNotNone(p('[email protected]::g1u3ck'))
|
||||
self.assertIsNotNone(p('[email protected]:[email protected]:2904198'))
|
||||
self.assertIsNotNone(p('sanda [email protected]:vasafultv'))
|
||||
self.assertIsNone(p('jsjjd.@Com.:love melon'))
|
||||
self.assertIsNotNone(p("[email protected]::g1u3ck"))
|
||||
self.assertIsNotNone(p("[email protected]:[email protected]:2904198"))
|
||||
self.assertIsNotNone(p("sanda [email protected]:vasafultv"))
|
||||
self.assertIsNone(p("jsjjd.@Com.:love melon"))
|
||||
|
||||
def test_parse_2(self):
|
||||
self.assertEqual('j/o/s', get_output_file('[email protected]'))
|
||||
self.assertEqual('c/e/o', get_output_file('[email protected]'))
|
||||
self.assertEqual('x/symbols', get_output_file('[email protected]'))
|
||||
self.assertEqual('x/a/symbols', get_output_file('[email protected]'))
|
||||
self.assertEqual('x/symbols', get_output_file('[email protected]'))
|
||||
self.assertEqual('k/e/v', get_output_file('[email protected]'))
|
||||
self.assertEqual("j/o/s", get_output_file("[email protected]"))
|
||||
self.assertEqual("c/e/o", get_output_file("[email protected]"))
|
||||
self.assertEqual("x/symbols", get_output_file("[email protected]"))
|
||||
self.assertEqual("x/a/symbols", get_output_file("[email protected]"))
|
||||
self.assertEqual("x/symbols", get_output_file("[email protected]"))
|
||||
self.assertEqual("k/e/v", get_output_file("[email protected]"))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in new issue
Block a user