From 36415c742b6a5bdf9d633eb0622b20fc3bb31f4c Mon Sep 17 00:00:00 2001 From: Martin Date: Tue, 25 Apr 2017 15:57:17 +0200 Subject: [PATCH 1/2] initial --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 1ad3d66..e3f53fe 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # Keychain Dumper +Added feature to display protection classes. + ## Usage All that should be needed to use keychain_dumper is the binary that is checked in to the Keychain-Dumper Git repository. This binary has been signed with a self-signed certificate with a "wildcard" entitlement that should grant keychain_dumper access to all Keychain items that would have been granted had the tool been signed with each individual entitlement. If you either don't trust this binary or are having trouble dumping Keychain items using the below steps, you may can build the tool from source and manually sign the appropriate entitlments into your build of the keychain_dumper binary. From 0bab3032e998ed61e758aba0d5b1cbd1d2e279bb Mon Sep 17 00:00:00 2001 From: Martin Date: Tue, 25 Apr 2017 16:01:01 +0200 Subject: [PATCH 2/2] Actual implementation --- keychain_dumper | Bin 211584 -> 212240 bytes main.m | 98 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 98 insertions(+) diff --git a/keychain_dumper b/keychain_dumper index 73c75d746f364f0b17c5cf18238a034d7f3d7b17..e697fb065a24eeb5943677104762397ed385d4f1 100755 GIT binary patch literal 212240 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 diff --git a/main.m b/main.m index a991dc4..f33d99e 100644 --- a/main.m +++ b/main.m @@ -195,6 +195,29 @@ void printGenericPassword(NSDictionary *passwordItem) { printToStdOut(@"Account: %@\n", [passwordItem objectForKey:(id)kSecAttrAccount]); printToStdOut(@"Entitlement Group: %@\n", [passwordItem objectForKey:(id)kSecAttrAccessGroup]); printToStdOut(@"Label: %@\n", [passwordItem objectForKey:(id)kSecAttrLabel]); + + if ([[passwordItem objectForKey:(id)kSecAttrAccessible] isEqualToString:@"ck"]) { + printToStdOut(@"Keychain protection class: kSecAttrAccessibleAfterFirstUnlock\n"); + } + else if ([[passwordItem objectForKey:(id)kSecAttrAccessible] isEqualToString:@"ak"]) { + printToStdOut(@"Keychain protection class: kSecAttrAccessibleWhenUnlocked\n"); + } + else if ([[passwordItem objectForKey:(id)kSecAttrAccessible] isEqualToString:@"dk"]) { + printToStdOut(@"Keychain protection class: kSecAttrAccessibleAlways\n"); + } + else if ([[passwordItem objectForKey:(id)kSecAttrAccessible] isEqualToString:@"aku"]) { + printToStdOut(@"Keychain protection class: kSecAttrAccessibleWhenUnlockedThisDeviceOnly\n"); + } + else if ([[passwordItem objectForKey:(id)kSecAttrAccessible] isEqualToString:@"cku"]) { + printToStdOut(@"Keychain protection class: kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly\n"); + } + else if ([[passwordItem objectForKey:(id)kSecAttrAccessible] isEqualToString:@"dku"]) { + printToStdOut(@"Keychain protection class: kSecAttrAccessibleAlwaysThisDeviceOnly\n"); + } + else if ([[passwordItem objectForKey:(id)kSecAttrAccessible] isEqualToString:@"akpu"]) { + printToStdOut(@"Keychain protection class: kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly\n"); + } + printToStdOut(@"Generic Field: %@\n", [[passwordItem objectForKey:(id)kSecAttrGeneric] description]); NSData* passwordData = [passwordItem objectForKey:(id)kSecValueData]; printToStdOut(@"Keychain Data: %@\n\n", [[NSString alloc] initWithData:passwordData encoding:NSUTF8StringEncoding]); @@ -207,6 +230,31 @@ void printInternetPassword(NSDictionary *passwordItem) { printToStdOut(@"Account: %@\n", [passwordItem objectForKey:(id)kSecAttrAccount]); printToStdOut(@"Entitlement Group: %@\n", [passwordItem objectForKey:(id)kSecAttrAccessGroup]); printToStdOut(@"Label: %@\n", [passwordItem objectForKey:(id)kSecAttrLabel]); + + + if ([[passwordItem objectForKey:(id)kSecAttrAccessible] isEqualToString:@"ck"]) { + printToStdOut(@"Keychain protection class: kSecAttrAccessibleAfterFirstUnlock\n"); + } + else if ([[passwordItem objectForKey:(id)kSecAttrAccessible] isEqualToString:@"ak"]) { + printToStdOut(@"Keychain protection class: kSecAttrAccessibleWhenUnlocked\n"); + } + else if ([[passwordItem objectForKey:(id)kSecAttrAccessible] isEqualToString:@"dk"]) { + printToStdOut(@"Keychain protection class: kSecAttrAccessibleAlways\n"); + } + else if ([[passwordItem objectForKey:(id)kSecAttrAccessible] isEqualToString:@"aku"]) { + printToStdOut(@"Keychain protection class: kSecAttrAccessibleWhenUnlockedThisDeviceOnly\n"); + } + else if ([[passwordItem objectForKey:(id)kSecAttrAccessible] isEqualToString:@"cku"]) { + printToStdOut(@"Keychain protection class: kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly\n"); + } + else if ([[passwordItem objectForKey:(id)kSecAttrAccessible] isEqualToString:@"dku"]) { + printToStdOut(@"Keychain protection class: kSecAttrAccessibleAlwaysThisDeviceOnly\n"); + } + else if ([[passwordItem objectForKey:(id)kSecAttrAccessible] isEqualToString:@"akpu"]) { + printToStdOut(@"Keychain protection class: kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly\n"); + } + + NSData* passwordData = [passwordItem objectForKey:(id)kSecValueData]; printToStdOut(@"Keychain Data: %@\n\n", [[NSString alloc] initWithData:passwordData encoding:NSUTF8StringEncoding]); } @@ -223,6 +271,31 @@ void printCertificate(NSDictionary *certificateItem) { CFRelease(summary); printToStdOut(@"Entitlement Group: %@\n", [certificateItem objectForKey:(id)kSecAttrAccessGroup]); printToStdOut(@"Label: %@\n", [certificateItem objectForKey:(id)kSecAttrLabel]); + + + if ([[certificateItem objectForKey:(id)kSecAttrAccessible] isEqualToString:@"ck"]) { + printToStdOut(@"Keychain protection class: kSecAttrAccessibleAfterFirstUnlock\n"); + } + else if ([[certificateItem objectForKey:(id)kSecAttrAccessible] isEqualToString:@"ak"]) { + printToStdOut(@"Keychain protection class: kSecAttrAccessibleWhenUnlocked\n"); + } + else if ([[certificateItem objectForKey:(id)kSecAttrAccessible] isEqualToString:@"dk"]) { + printToStdOut(@"Keychain protection class: kSecAttrAccessibleAlways\n"); + } + else if ([[certificateItem objectForKey:(id)kSecAttrAccessible] isEqualToString:@"aku"]) { + printToStdOut(@"Keychain protection class: kSecAttrAccessibleWhenUnlockedThisDeviceOnly\n"); + } + else if ([[certificateItem objectForKey:(id)kSecAttrAccessible] isEqualToString:@"cku"]) { + printToStdOut(@"Keychain protection class: kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly\n"); + } + else if ([[certificateItem objectForKey:(id)kSecAttrAccessible] isEqualToString:@"dku"]) { + printToStdOut(@"Keychain protection class: kSecAttrAccessibleAlwaysThisDeviceOnly\n"); + } + else if ([[certificateItem objectForKey:(id)kSecAttrAccessible] isEqualToString:@"akpu"]) { + printToStdOut(@"Keychain protection class: kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly\n"); + } + + printToStdOut(@"Serial Number: %@\n", [certificateItem objectForKey:(id)kSecAttrSerialNumber]); printToStdOut(@"Subject Key ID: %@\n", [certificateItem objectForKey:(id)kSecAttrSubjectKeyID]); printToStdOut(@"Subject Key Hash: %@\n\n", [certificateItem objectForKey:(id)kSecAttrPublicKeyHash]); @@ -247,6 +320,31 @@ void printKey(NSDictionary *keyItem) { printToStdOut(@"---\n"); printToStdOut(@"Entitlement Group: %@\n", [keyItem objectForKey:(id)kSecAttrAccessGroup]); printToStdOut(@"Label: %@\n", [keyItem objectForKey:(id)kSecAttrLabel]); + + + if ([[keyItem objectForKey:(id)kSecAttrAccessible] isEqualToString:@"ck"]) { + printToStdOut(@"Keychain protection class: kSecAttrAccessibleAfterFirstUnlock\n"); + } + else if ([[keyItem objectForKey:(id)kSecAttrAccessible] isEqualToString:@"ak"]) { + printToStdOut(@"Keychain protection class: kSecAttrAccessibleWhenUnlocked\n"); + } + else if ([[keyItem objectForKey:(id)kSecAttrAccessible] isEqualToString:@"dk"]) { + printToStdOut(@"Keychain protection class: kSecAttrAccessibleAlways\n"); + } + else if ([[keyItem objectForKey:(id)kSecAttrAccessible] isEqualToString:@"aku"]) { + printToStdOut(@"Keychain protection class: kSecAttrAccessibleWhenUnlockedThisDeviceOnly\n"); + } + else if ([[keyItem objectForKey:(id)kSecAttrAccessible] isEqualToString:@"cku"]) { + printToStdOut(@"Keychain protection class: kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly\n"); + } + else if ([[keyItem objectForKey:(id)kSecAttrAccessible] isEqualToString:@"dku"]) { + printToStdOut(@"Keychain protection class: kSecAttrAccessibleAlwaysThisDeviceOnly\n"); + } + else if ([[keyItem objectForKey:(id)kSecAttrAccessible] isEqualToString:@"akpu"]) { + printToStdOut(@"Keychain protection class: kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly\n"); + } + + printToStdOut(@"Application Label: %@\n", [keyItem objectForKey:(id)kSecAttrApplicationLabel]); printToStdOut(@"Key Class: %@\n", keyClass); printToStdOut(@"Permanent Key: %@\n", CFBooleanGetValue((CFBooleanRef)[keyItem objectForKey:(id)kSecAttrIsPermanent]) == true ? @"True" : @"False");