@@ -7,45 +7,56 @@ def decrypt_password(user, pass_enc):
7
7
8
8
passw = ""
9
9
for i in range (0 , len (pass_enc )):
10
- passw += chr (pass_enc [i ] ^ key [i ])
10
+ passw += chr (pass_enc [i ] ^ key [i % len ( key ) ])
11
11
12
12
return passw .split ("\x00 " )[0 ]
13
13
14
+ def extract_user_pass_from_entry (entry ):
15
+ user_data = entry .split (b"\x01 \x00 \x00 \x21 " )[1 ]
16
+ pass_data = entry .split (b"\x11 \x00 \x00 \x21 " )[1 ]
17
+
18
+ user_len = user_data [0 ]
19
+ pass_len = pass_data [0 ]
20
+
21
+ username = user_data [1 :1 + user_len ]
22
+ password = pass_data [1 :1 + pass_len ]
23
+
24
+ return username , password
14
25
15
26
def get_pair (data ):
16
27
17
28
user_list = []
18
29
19
30
entries = data .split (b"M2" )[1 :]
20
31
for entry in entries :
21
- user_len = entry .split (b"\x01 \x00 \x00 \x21 " )[1 ][0 ]
22
- pass_len = entry .split (b"\x11 \x00 \x00 \x21 " )[1 ][0 ]
23
-
24
- user = entry .split (b"\x01 \x00 \x00 \x21 " )[1 ][1 :1 + user_len ]
25
- pass_enc = entry .split (b"\x11 \x00 \x00 \x21 " )[1 ][1 :1 + pass_len ]
32
+ try :
33
+ user , pass_encrypted = extract_user_pass_from_entry (entry )
34
+ except :
35
+ continue
26
36
27
- passw = decrypt_password (user , pass_enc )
37
+ pass_plain = decrypt_password (user , pass_encrypted )
28
38
user = user .decode ("ascii" )
29
39
30
- user_list .append ((user , passw ))
40
+ user_list .append ((user , pass_plain ))
31
41
32
42
return user_list
33
43
34
- def get_from_network ( pload ):
35
- user_pass = get_pair (pload )
44
+ def dump ( data ):
45
+ user_pass = get_pair (data )
36
46
for u , p in user_pass :
37
47
print ("User:" , u )
38
48
print ("Pass:" , p )
39
49
print ()
40
50
41
51
if __name__ == "__main__" :
42
52
if len (sys .argv ) == 2 :
43
- user_file = open ( sys .argv [1 ], "rb" ). read ()
44
- user_pass = get_pair ( user_file )
45
- for u , p in user_pass :
46
- print ( "User:" , u )
47
- print ( "Pass:" , p )
48
- print ()
53
+ if sys .argv [1 ] == "-" :
54
+ user_file = sys . stdin . buffer . read ( )
55
+ else :
56
+ user_file = open ( sys . argv [ 1 ], "rb" ). read ( )
57
+ dump ( user_file )
58
+
49
59
else :
50
60
print ("Usage:" )
51
- print (sys .argv [0 ], "user.dat" )
61
+ print ("\t From file: \t " , sys .argv [0 ], "user.dat" )
62
+ print ("\t From stdin:\t " , sys .argv [0 ], "-" )
0 commit comments