Guest User

Untitled

a guest
Oct 1st, 2016
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. [int] $CERT_STORE_PROV_SYSTEM = 10
  2. [int] $CERT_STORE_PROV_SYSTEM_REGISTRY_W = 13
  3. [int] $CERT_SYSTEM_STORE_LOCAL_MACHINE = 0x20000
  4. [int] $CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY = 0x80000
  5. [int] $CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE = 0x90000
  6.  
  7. [int] $CERT_STORE_OPEN_EXISTING_FLAG = 0x00004000
  8. [int] $CERT_STORE_READONLY_FLAG = 0x00008000
  9. # find above consts at https://github.com/Microsoft/referencesource/blob/master/System/security/system/security/cryptography/cryptoapi.cs
  10.  
  11.  
  12.  
  13.  
  14. $flags = $CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE + $CERT_STORE_READONLY_FLAG + $CERT_STORE_OPEN_EXISTING_FLAG
  15.  
  16.  
  17.  
  18. $signature = @'
  19. [DllImport("CRYPT32.DLL", EntryPoint="CertEnumCertificatesInStore", CharSet=CharSet.Auto, SetLastError=true)]
  20. public static extern IntPtr CertEnumCertificatesInStore(
  21.     IntPtr storeProvider,
  22.     IntPtr prevCertContext);
  23.    
  24. [DllImport("CRYPT32.DLL", EntryPoint="CertOpenStore", CharSet=CharSet.Auto, SetLastError=true)]
  25. public static extern IntPtr CertOpenStoreStringPara(
  26.     int storeProvider,
  27.     int encodingType,
  28.     IntPtr hcryptProv,
  29.     int flags,
  30.     String pvPara);
  31.    
  32. [DllImport("CRYPT32.DLL", EntryPoint="CertCloseStore", CharSet=CharSet.Auto, SetLastError=true)]
  33. [return : MarshalAs(UnmanagedType.Bool)]
  34. public static extern bool CertCloseStore(
  35.     IntPtr storeProvider,
  36.     int flags);
  37. '@
  38. $type = Add-Type -MemberDefinition $signature `
  39.         -Name Win32Utils -Namespace CertStore `
  40.         -PassThru
  41.        
  42. $certs = @()
  43.  
  44. $store = $type::CertOpenStoreStringPara($CERT_STORE_PROV_SYSTEM_REGISTRY_W, 0, 0, $flags, "ROOT")
  45. $certID = ($type::CertEnumCertificatesInStore($store,0))
  46. While ($certID -ne 0) {
  47.     $certs += ([System.Security.Cryptography.X509Certificates.X509Certificate2]($certID))
  48.     $certID = ($type::CertEnumCertificatesInStore($store,$certID))
  49. }
  50. $type::CertCloseStore($store,$null)
  51.  
  52. #Just for testing
  53. foreach ($cert in $certs) {
  54.     $cert.Subject
  55. }
Advertisement
Add Comment
Please, Sign In to add comment