Guest User

Untitled

a guest
Sep 13th, 2016
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.52 KB | None | 0 0
  1. """
  2. Access windows credentials
  3. """
  4.  
  5. import ctypes as CT
  6. import ctypes.wintypes as WT
  7.  
  8. CRED_TYPE_GENERIC = 0x01
  9.  
  10. LPBYTE = CT.POINTER(WT.BYTE)
  11. LPTSTR = WT.LPSTR
  12. LPCTSTR = WT.LPSTR
  13. class CREDENTIAL_ATTRIBUTE(CT.Structure):
  14. _fields_ = [
  15. ('Keyword', LPTSTR),
  16. ('Flags', WT.DWORD),
  17. ('ValueSize', WT.DWORD),
  18. ('Value', LPBYTE)]
  19. PCREDENTIAL_ATTRIBUTE = CT.POINTER(CREDENTIAL_ATTRIBUTE)
  20. class CREDENTIAL(CT.Structure):
  21. _fields_ = [
  22. ('Flags', WT.DWORD),
  23. ('Type', WT.DWORD),
  24. ('TargetName', LPTSTR),
  25. ('Comment', LPTSTR),
  26. ('LastWritten', WT.FILETIME),
  27. ('CredentialBlobSize', WT.DWORD),
  28. ('CredentialBlob', LPBYTE),
  29. ('Persist', WT.DWORD),
  30. ('AttributeCount', WT.DWORD),
  31. ('Attributes', PCREDENTIAL_ATTRIBUTE),
  32. ('TargetAlias', LPTSTR),
  33. ('UserName', LPTSTR)]
  34. PCREDENTIAL = CT.POINTER(CREDENTIAL)
  35.  
  36. advapi32 = CT.WinDLL('Advapi32.dll')
  37. advapi32.CredReadA.restype = WT.BOOL
  38. advapi32.CredReadA.argtypes = [LPCTSTR, WT.DWORD, WT.DWORD, CT.POINTER(PCREDENTIAL)]
  39.  
  40.  
  41. def GetPassword(url):
  42. credPtr = PCREDENTIAL()
  43. if advapi32.CredReadA(url, CRED_TYPE_GENERIC, 0, CT.byref(credPtr)):
  44. username = credPtr.contents.UserName
  45. passwordSize = credPtr.contents.CredentialBlobSize
  46. unicodePassword = credPtr.contents.CredentialBlob[:passwordSize:2]
  47. password = ''.join(map(chr, unicodePassword))
  48. advapi32.CredFree(credPtr)
  49. return username, password
  50. else:
  51. raise IOError("Failure reading credential")
Add Comment
Please, Sign In to add comment