Created
June 6, 2018 15:25
-
-
Save iddoeldor/e9578caef8151c79688af7cb0af326cd to your computer and use it in GitHub Desktop.
dump keychain to json
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#import <UIKit/UIKit.h> | |
#import <Security/Security.h> | |
#import "sqlite3.h" | |
NSArray * getKeychainObjectsForSecClass(CFTypeRef kSecClassType) { | |
NSMutableDictionary *genericQuery = [[NSMutableDictionary alloc] init]; | |
[genericQuery setObject:(id)kSecClassType forKey:(id)kSecClass]; | |
[genericQuery setObject:(id)kSecMatchLimitAll forKey:(id)kSecMatchLimit]; | |
[genericQuery setObject:(id)kCFBooleanTrue forKey:(id)kSecReturnAttributes]; | |
[genericQuery setObject:(id)kCFBooleanTrue forKey:(id)kSecReturnRef]; | |
[genericQuery setObject:(id)kCFBooleanTrue forKey:(id)kSecReturnData]; | |
NSArray *keychainItems = nil; | |
if (SecItemCopyMatching((CFDictionaryRef)genericQuery, (CFTypeRef *)&keychainItems) != noErr) { | |
keychainItems = nil; | |
} | |
[genericQuery release]; | |
return keychainItems; | |
} | |
NSMutableString * printGenericPassword(NSDictionary *passwordItem) { | |
NSMutableString *str = [[NSMutableString alloc] init]; | |
[str appendString:@"{"]; | |
NSString *outFormat = @"\"%@\":\"%@\","; | |
for (NSString *aKey in passwordItem.allKeys) { | |
[str appendFormat:outFormat, aKey, [passwordItem valueForKey:aKey]]; | |
} | |
[str deleteCharactersInRange:NSMakeRange([str length] - 1, 1)]; // remove last comma | |
[str appendString:@"},"]; | |
return str; | |
} | |
void printResultsForSecClass(NSArray *keychainItems, CFTypeRef kSecClassType) { | |
NSMutableString *str = [[NSMutableString alloc] init]; | |
NSDictionary *keychainItem; | |
for (keychainItem in keychainItems) { | |
if (kSecClassType == kSecClassGenericPassword) { | |
[str appendString: printGenericPassword(keychainItem) ]; | |
} | |
} | |
[str deleteCharactersInRange:NSMakeRange([str length] - 1, 1)]; | |
[[NSFileHandle fileHandleWithStandardOutput] writeData: [str dataUsingEncoding: NSNEXTSTEPStringEncoding]]; | |
return; | |
} | |
int main(int argc, char **argv) | |
{ | |
id pool = [NSAutoreleasePool new]; | |
NSMutableArray *arguments = [[NSMutableArray alloc] init]; | |
[arguments addObject:(id)kSecClassGenericPassword]; | |
[[NSFileHandle fileHandleWithStandardOutput] writeData: [@"[\n" dataUsingEncoding: NSNEXTSTEPStringEncoding]]; | |
for (id kSecClassType in (NSArray *) arguments) { | |
NSArray *keychainItems = getKeychainObjectsForSecClass((CFTypeRef)kSecClassType); | |
printResultsForSecClass(keychainItems, (CFTypeRef)kSecClassType); | |
[keychainItems release]; | |
} | |
[[NSFileHandle fileHandleWithStandardOutput] writeData: [@"]" dataUsingEncoding: NSNEXTSTEPStringEncoding]]; | |
[pool drain]; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
GCC_BIN=`xcrun --sdk iphoneos --find gcc` | |
SDK=`xcrun --sdk iphoneos --show-sdk-path` | |
#support iPhone 3GS and above, delete armv6 to avoid SDK error | |
ARCH_FLAGS=-arch armv7 -arch armv7s -arch arm64 | |
LDFLAGS =\ | |
-F$(SDK)/System/Library/Frameworks/\ | |
-F$(SDK)/System/Library/PrivateFrameworks/\ | |
-framework UIKit\ | |
-framework CoreFoundation\ | |
-framework Foundation\ | |
-framework CoreGraphics\ | |
-framework Security\ | |
-framework CoreTelephony\ | |
-lobjc\ | |
-lsqlite3\ | |
-bind_at_load | |
GCC_ARM = $(GCC_BIN) -Os -Wimplicit -isysroot $(SDK) $(ARCH_FLAGS) | |
default: main.o list | |
@$(GCC_ARM) $(LDFLAGS) main.o -o keychain_dumper | |
main.o: main.m | |
$(GCC_ARM) -c main.m | |
clean: | |
rm -f keychain_dumper *.o | |
list: | |
security find-identity -pcodesigning | |
@printf '\nTo codesign, please run: \n\tCER="<40 character hex string for certificate>" make codesign\n' | |
codesign: | |
codesign -fs "$(CER)" --entitlements entitlements.xml keychain_dumper |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment