|
|
Message-ID: <535979F4.90205@gmail.com>
Date: Thu, 24 Apr 2014 22:54:12 +0200
From: Nicolas RUFF <nicolas.ruff@...il.com>
To: john-users@...ts.openwall.com
Subject: Re: BMC Patrol password representations
Acta Est Fabula
I downloaded the tool from:
ftp://ftp.bmc.com/pub/patrol/COMMON_INSTALL7.5.62/Windows/
Both CTLTOOL.EXE and BMCPWK.DLL files were present in archive.
The key is hardcoded indeed.
The following Python script will successfully decrypt all provided
hashes - please let me know if it does not work for you.
If you wonder where 'key' and 'iv' come from, they were generated by
OpenSSL 0.9.7c EVP_BytesToKey() routine called as such:
cipher = EVP_get_cipherbyname("des-cbc");
dgst=EVP_get_digestbyname("md5");
EVP_BytesToKey(cipher, dgst, salt,
(unsigned char *) password,
strlen(password), 1, key, iv);
... where password is 'Acta Est Fabula'.
@ Nicolas Collignon: you wasted 15 minutes of my holiday time. Luckily
for you, I accept compensations both in bitcoins and beers :)
Regards,
- Nicolas RUFF
-----8<----------8<----------8<----------8<----------8<----------8<-----
#!/usr/bin/env python
from Crypto.Cipher import DES
h_list = [ "qRvQlJa8fP2coTEKUS3GMpP+JgOI++Vu", # password
"mXO2dM2nG8ycoTEKUS3GMpP+JgOI++Vu", # password
"yqPtMPfb2O+coTEKUS3GMpP+JgOI++Vu", # password
"Jx/+e9ELvnacoTEKUS3GMpP+JgOI++Vu", # password
"MNCeVG86eAGcoTEKUS3GMjOl7fkSjnT55U4ERhrW2PQ=", # passwordpassword
"uPef75JsmPScoTEKUS3GMjOl7fkSjnT55U4ERhrW2PQ=", # passwordpassword
"9DlFoY5JCzycoTEKUS3GMjOl7fkSjnT5IEoCjMbsWAL25GCJKOLe0A==", #
passwordpasswordpassword
"MFy1FKeQXWycoTEKUS3GMjOl7fkSjnT5IEoCjMbsWAL25GCJKOLe0A==" #
passwordpasswordpassword
]
def my_decrypt(data):
keybin = "9927cf23060444d9".decode("hex")
iv ="f7f7b3785607488a".decode("hex")
c = DES.new(keybin, DES.MODE_CBC, iv)
return c.decrypt(data)
# also removes the padding
def check_padding(data):
last = ord(data[-1])
if ((last < 1) and (last > 8)):
raise PaddingError
else:
for i in range(last):
if (ord(data[-(i+1)]) != last):
raise PaddingError
return data[:-(last)]
def full_decrypt(data):
step0 = data.decode('base64')
step1 = my_decrypt( step0[8:] )
step2 = check_padding(step1)
print data, " = ", step2
return
for h in h_list:
full_decrypt(h)
-----8<----------8<----------8<----------8<----------8<----------8<-----
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.