import sys, getopt from wincrypto import CryptCreateHash, CryptHashData, CryptDeriveKey, CryptDecrypt from wincrypto.definitions import CALG_SHA1, CALG_AES_256 def usage(): print 'VKBot password decryptor' print 'Usage: ' + sys.argv[0] + ' -p password [option]' def main(argv): try: opts, args = getopt.getopt(argv, 'hp:d', ['help', 'password=']) if not opts: usage() except getopt.GetoptError: usage() sys.exit(2) password = None for opt, arg in opts: if opt in ('-h', '--help'): usage() sys.exit() elif opt == '-d': global _debug _debug = 1 elif opt in ('-p', '--password'): password = arg if password: print 'Password: ' + decrypt(password) def decrypt(password_hex): encryption_key = 'v[,+E{,gl.XJvV7fdY/jA=0),l|{8&=|' sha1_hasher = CryptCreateHash(CALG_SHA1) CryptHashData(sha1_hasher, encryption_key) aes_key = CryptDeriveKey(sha1_hasher, CALG_AES_256) password = ''.join(chr(int(password_hex[i:i+2], 16)) for i in range(0, len(password_hex), 2)) return CryptDecrypt(aes_key, password) if __name__ == "__main__": main(sys.argv[1:])