From da93203af469004181906b27c73404ba628736d3 Mon Sep 17 00:00:00 2001 From: Patrick Wardle Date: Wed, 12 Dec 2018 21:38:58 -1000 Subject: [PATCH] v 1.7.0 (beta?) -dynamic code signing -improved global search -ignore WindowServer -added/removed some @sync to prevent deadlock/mutation issues --- AppDelegate.m | 46 ++- Consts.h | 31 +- Filter.m | 3 +- InfoWindowController.m | 15 +- ItemView.m | 79 +++-- Items/Binary.m | 9 +- SearchWindowController.m | 13 +- Signing.h | 32 ++ Signing.m | 323 ++++++++++++++++++ Task.m | 19 +- TaskEnumerator.m | 63 ++-- TaskExplorer-Info.plist | 6 +- TaskExplorer.xcodeproj/project.pbxproj | 8 +- .../UserInterfaceState.xcuserstate | Bin 56515 -> 66832 bytes .../xcschemes/TaskExplorer.xcscheme | 2 +- TaskTableController.m | 5 +- UI/SearchWindow.xib | 76 +++-- Utilities.h | 9 +- Utilities.m | 6 +- en.lproj/MainMenu.xib | 2 +- patrons.txt | 4 +- remoteTaskService/Info.plist | 6 +- remoteTaskService/remoteTaskService.m | 16 - 23 files changed, 599 insertions(+), 174 deletions(-) create mode 100644 Signing.h create mode 100644 Signing.m diff --git a/AppDelegate.m b/AppDelegate.m index 0fd3e00..5bc16f1 100755 --- a/AppDelegate.m +++ b/AppDelegate.m @@ -93,8 +93,8 @@ //center [self.window center]; - //no need to have a first responder - [self.window makeFirstResponder:nil]; + //first responder: filter tasks + [self.window makeFirstResponder:self.filterTasksBox]; //make main window front [self.window makeKeyAndOrderFront:self]; @@ -115,8 +115,6 @@ //check [self check4Update:nil]; - return; - //register for hotkey presses [self registerKeypressHandler]; @@ -516,7 +514,7 @@ bail: __block NSUInteger row = 0; //run everything on main thread - // ->ensures table view isn't changed out from under us.... + // ensures table view isn't changed out from under us.... dispatch_async(dispatch_get_main_queue(), ^{ //top table (pane) @@ -530,22 +528,30 @@ bail: if(YES != [tableView isKindOfClass:[NSOutlineView class]]) { //no filtering - // ->grab row from all tasks + // grab row from all tasks if(YES != self.taskTableController.isFiltered) { - //get row - row = [self.taskEnumerator.tasks indexOfKey:((Task*)item).pid]; + //sync to get row + @synchronized (self.taskEnumerator.tasks) + { + //get row + row = [self.taskEnumerator.tasks indexOfKey:((Task*)item).pid]; + } } //filtering - // ->grab row from filtered tasks + // grab row from filtered tasks else { - //get row - row = [self.taskTableController.filteredItems indexOfObject:item]; + //sync to get row + @synchronized (self.taskTableController.filteredItems) + { + //get row + row = [self.taskTableController.filteredItems indexOfObject:item]; + } } } //reload item - // ->tree view, so no need to worry about filtering + // tree view, so no need to worry about filtering else { //get row @@ -763,7 +769,9 @@ bail: [(id)self.bottomViewController reloadTable]; //no items? - if(0 == self.bottomViewController.tableItems.count) + // but there is something in top.... + if( (0 == self.bottomViewController.tableItems.count) && + (nil != self.currentTask) ) { //how self.noItemsLabel.hidden = NO; @@ -1476,16 +1484,20 @@ bail: // ->check if its still alive if(nil != self.currentTask) { - //helper method that takes care of all check/handling dead tasks :) + //helper method that takes care of all check/handling dead tasks [self.taskTableController handleRowSelection]; } //when no current task - // ->set to first task in sorted tasks + // set to first task in sorted tasks, unless filtering if(nil == self.currentTask) { - //set to first - self.currentTask = self.taskEnumerator.tasks[[self.taskEnumerator.tasks keyAtIndex:0]]; + if( (YES != self.taskTableController.isFiltered) || + ( (YES == self.taskTableController.isFiltered) && (0 != self.taskTableController.filteredItems.count) ) ) + { + //set to first + self.currentTask = self.taskEnumerator.tasks[[self.taskEnumerator.tasks keyAtIndex:0]]; + } } //get segment tag diff --git a/Consts.h b/Consts.h index f6dfae8..905b315 100644 --- a/Consts.h +++ b/Consts.h @@ -30,10 +30,24 @@ //success #define STATUS_SUCCESS 0 -//keys for signing stuff + +//signers +enum Signer{None, Apple, AppStore, DevID, AdHoc}; + +//signature status #define KEY_SIGNATURE_STATUS @"signatureStatus" -#define KEY_SIGNING_AUTHORITIES @"signingAuthorities" -#define KEY_SIGNING_IS_APPLE @"signedByApple" + +//signer +#define KEY_SIGNATURE_SIGNER @"signatureSigner" + +//signing auths +#define KEY_SIGNATURE_AUTHORITIES @"signatureAuthorities" + +//code signing id +#define KEY_SIGNATURE_IDENTIFIER @"signatureIdentifier" + +//entitlements +#define KEY_SIGNATURE_ENTITLEMENTS @"signatureEntitlements" //OS version x #define OS_MAJOR_VERSION_X 10 @@ -47,6 +61,8 @@ //OS minor version el capitan #define OS_MINOR_VERSION_EL_CAPITAN 11 +//OS minor version mojave +#define OS_MINOR_VERSION_MOJAVE 14 //executable path #define EXECUTABLE_PATH @"@executable_path" @@ -102,6 +118,9 @@ //dyld_ key for applications #define APPLICATION_DYLD_KEY @"LSEnvironment" +//path to window server +#define WINDOW_SERVER @"/System/Library/PrivateFrameworks/SkyLight.framework/Versions/A/Resources/WindowServer" + //menu //tag for prefs menu item @@ -179,9 +198,6 @@ // ->filter apple signed/known items #define KEY_SCANNER_FILTER @"filterItems" -//plugin key -//#define KEY_RESULT_PLUGIN @"plugin" - //XPC Service name #define XPC_SERVICE @"remoteTaskService.xpc" @@ -191,6 +207,8 @@ //location of kernel in Yosemite+ #define KERNEL_YOSEMITE @"/System/Library/Kernels/kernel" +// + //top pane #define PANE_TOP 0x0 @@ -380,6 +398,7 @@ //more info button tag #define BUTTON_MORE_INFO 101 + //patreon url #define PATREON_URL @"https://www.patreon.com/objective_see" diff --git a/Filter.m b/Filter.m index 3048e28..b32af1c 100644 --- a/Filter.m +++ b/Filter.m @@ -617,7 +617,8 @@ bail: //check // ->just look at signing info - if(YES == [item.signingInfo[KEY_SIGNING_IS_APPLE] boolValue]) + if( (noErr == [item.signingInfo[KEY_SIGNATURE_STATUS] integerValue]) && + (Apple == [item.signingInfo[KEY_SIGNATURE_SIGNER] intValue]) ) { //set flag isApple = YES; diff --git a/InfoWindowController.m b/InfoWindowController.m index 447b315..6a5acb2 100644 --- a/InfoWindowController.m +++ b/InfoWindowController.m @@ -9,9 +9,10 @@ #import "Task.h" #import "File.h" #import "Binary.h" -#import "Connection.h" #import "Consts.h" +#import "Signing.h" #import "Utilities.h" +#import "Connection.h" #import "InfoWindowController.h" @interface InfoWindowController () @@ -195,7 +196,15 @@ if(nil == task.binary.signingInfo) { //generate signing info - task.binary.signingInfo = extractSigningInfo(task.binary.path); + task.binary.signingInfo = extractSigningInfo(task.pid.intValue, nil, kSecCSDefaultFlags); + + //failed? + // try extract signing info statically + if(nil == task.binary.signingInfo) + { + //extract signing info statically + task.binary.signingInfo = extractSigningInfo(0, task.binary.path, kSecCSCheckAllArchitectures | kSecCSCheckNestedCode | kSecCSDoNotValidateResources); + } } //set signing info @@ -248,7 +257,7 @@ if(nil == dylib.signingInfo) { //generate signing info - dylib.signingInfo = extractSigningInfo(dylib.path); + dylib.signingInfo = extractSigningInfo(-1, dylib.path, kSecCSCheckAllArchitectures | kSecCSCheckNestedCode | kSecCSDoNotValidateResources); } //set signing info diff --git a/ItemView.m b/ItemView.m index 146f3d1..de84b04 100644 --- a/ItemView.m +++ b/ItemView.m @@ -104,45 +104,54 @@ NSImage* getCodeSigningIcon(Binary* binary) //signature image NSImage* codeSignIcon = nil; - //set signature status icon - if(nil != binary.signingInfo) + //none? + // just set to unknown + if(nil == binary.signingInfo) { - //binary is signed by apple - if(YES == [binary.signingInfo[KEY_SIGNING_IS_APPLE] boolValue]) - { - //set - codeSignIcon = [NSImage imageNamed:@"signedAppleIcon"]; - } - - //binary is signed - else if(STATUS_SUCCESS == [binary.signingInfo[KEY_SIGNATURE_STATUS] integerValue]) - { - //set - codeSignIcon = [NSImage imageNamed:@"signed"]; - } - - //binary not signed - else if(errSecCSUnsigned == [binary.signingInfo[KEY_SIGNATURE_STATUS] integerValue]) - { - //set - codeSignIcon = [NSImage imageNamed:@"unsigned"]; - } - - //unknown - else - { - //set - codeSignIcon = [NSImage imageNamed:@"unknown"]; - } - } - //signing info is nil - // ->just to unknown - else - { - //set + //set icon codeSignIcon = [NSImage imageNamed:@"unknown"]; + + //bail + goto bail; } + //parse signing info + switch([binary.signingInfo[KEY_SIGNATURE_STATUS] intValue]) + { + //happily signed + case noErr: + + //item signed by apple + if(Apple == [binary.signingInfo[KEY_SIGNATURE_SIGNER] intValue]) + { + //set icon + codeSignIcon = [NSImage imageNamed:@"signedAppleIcon"]; + } + //signed by dev id/ad hoc, etc + else + { + //set icon + codeSignIcon = [NSImage imageNamed:@"signed"]; + } + + break; + + //unsigned + case errSecCSUnsigned: + + //set icon + codeSignIcon = [NSImage imageNamed:@"unsigned"]; + + break; + + default: + + //set icon + codeSignIcon = [NSImage imageNamed:@"unknown"]; + } + +bail: + return codeSignIcon; } diff --git a/Items/Binary.m b/Items/Binary.m index c471df2..437686e 100644 --- a/Items/Binary.m +++ b/Items/Binary.m @@ -8,6 +8,7 @@ #import "Binary.h" #import "Consts.h" +#import "Signing.h" #import "Utilities.h" #import "AppDelegate.h" @@ -87,8 +88,8 @@ bail: //unset 'packed' flag for apple signed binaries // ->as apple doesn't pack binaries, but packer algo has some false positives - if( (nil != [self.signingInfo objectForKey:KEY_SIGNING_IS_APPLE]) && - (YES == [self.signingInfo[KEY_SIGNING_IS_APPLE] boolValue]) ) + if( (noErr == [self.signingInfo[KEY_SIGNATURE_STATUS] intValue]) && + (Apple == [self.signingInfo[KEY_SIGNATURE_SIGNER] intValue]) ) { //unset self.parser.binaryInfo[KEY_IS_PACKED] = NO; @@ -201,7 +202,7 @@ bail: -(void)generatedSigningInfo { //set signing info - self.signingInfo = extractSigningInfo(self.path); + self.signingInfo = extractSigningInfo(1, self.path, kSecCSCheckAllArchitectures | kSecCSCheckNestedCode | kSecCSDoNotValidateResources); return; } @@ -268,7 +269,7 @@ bail: prettyPrint = [NSMutableString string];//stringWithString:@"signed by:"]; //add each signing auth - for(NSString* signingAuthority in self.signingInfo[KEY_SIGNING_AUTHORITIES]) + for(NSString* signingAuthority in self.signingInfo[KEY_SIGNATURE_AUTHORITIES]) { //append [prettyPrint appendString:[NSString stringWithFormat:@"%@, ", signingAuthority]]; diff --git a/SearchWindowController.m b/SearchWindowController.m index 5fe5da9..594c6c3 100644 --- a/SearchWindowController.m +++ b/SearchWindowController.m @@ -95,14 +95,13 @@ } //init the UI -// ->each time window is shown, reset, show enumeration status, etc +// each time window is shown, reset, show enumeration status, etc -(void)initUI { //center [self.window center]; - + //table reload - // ->make sure all is reset [self.searchTable reloadData]; //reset search string @@ -139,6 +138,8 @@ //spin up thread to monitor update enumeration state [NSThread detachNewThreadSelector:@selector(updateEnumerationState) toTarget:self withObject:nil]; + + return; } @@ -234,7 +235,7 @@ if(0 == self.searchResults.count) { //set msg - self.searchResultsMessage.stringValue = @"nothing found"; + self.searchResultsMessage.stringValue = @"no items matched"; } //update status mesasge with count @@ -551,11 +552,11 @@ bail: self.searchBox.enabled = NO; //grab all tasks - // ->make copy to avoid threading issues + // make copy to avoid threading issues allTasks = [((AppDelegate*)[[NSApplication sharedApplication] delegate]).taskEnumerator.tasks copy]; //kick off filtering in background - // ->will call back into to refresh UI when done + // will call back into to refresh UI when done dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ //nap to allow message to show diff --git a/Signing.h b/Signing.h new file mode 100644 index 0000000..b4b1c79 --- /dev/null +++ b/Signing.h @@ -0,0 +1,32 @@ +// +// File: Signing.h +// Project: Proc Info +// +// Created by: Patrick Wardle +// Copyright: 2017 Objective-See +// License: Creative Commons Attribution-NonCommercial 4.0 International License +// + +#ifndef Signing_h +#define Signing_h + +#import +#import + +/* FUNCTIONS */ + +//get the signing info of a item +// pid specified: extract dynamic code signing info +// path specified: generate static code signing info +NSMutableDictionary* extractSigningInfo(pid_t pid, NSString* path, SecCSFlags flags); + +//determine who signed item +NSNumber* extractSigner(SecStaticCodeRef code, SecCSFlags flags, BOOL isDynamic); + +//validate a requirement +OSStatus validateRequirement(SecStaticCodeRef code, SecRequirementRef requirement, SecCSFlags flags, BOOL isDynamic); + +//extract (names) of signing auths +NSMutableArray* extractSigningAuths(NSDictionary* signingDetails); + +#endif diff --git a/Signing.m b/Signing.m new file mode 100644 index 0000000..62155a8 --- /dev/null +++ b/Signing.m @@ -0,0 +1,323 @@ +// +// File: Signing.m +// Project: Proc Info +// +// Created by: Patrick Wardle +// Copyright: 2017 Objective-See +// License: Creative Commons Attribution-NonCommercial 4.0 International License +// + +#import "Consts.h" +#import "Signing.h" +#import "Utilities.h" + +#import +#import + +//get the signing info of a item +// pid specified: extract dynamic code signing info +// path specified: generate static code signing info +NSMutableDictionary* extractSigningInfo(pid_t pid, NSString* path, SecCSFlags flags) +{ + //info dictionary + NSMutableDictionary* signingInfo = nil; + + //status + OSStatus status = !errSecSuccess; + + //static code ref + SecStaticCodeRef staticCode = NULL; + + //dynamic code ref + SecCodeRef dynamicCode = NULL; + + //signing details + CFDictionaryRef signingDetails = NULL; + + //signing authorities + NSMutableArray* signingAuths = nil; + + //init signing status + signingInfo = [NSMutableDictionary dictionary]; + + //dynamic code checks + // no path, dynamic check via pid + if(nil == path) + { + //generate dynamic code ref via pid + status = SecCodeCopyGuestWithAttributes(NULL, (__bridge CFDictionaryRef _Nullable)(@{(__bridge NSString *)kSecGuestAttributePid : [NSNumber numberWithInt:pid]}), kSecCSDefaultFlags, &dynamicCode); + if(errSecSuccess != status) + { + //set error + signingInfo[KEY_SIGNATURE_STATUS] = [NSNumber numberWithInt:status]; + + //bail + goto bail; + } + + //validate code + status = SecCodeCheckValidity(dynamicCode, flags, NULL); + if(errSecSuccess != status) + { + //set error + signingInfo[KEY_SIGNATURE_STATUS] = [NSNumber numberWithInt:status]; + + //bail + goto bail; + } + + //happily signed + signingInfo[KEY_SIGNATURE_STATUS] = [NSNumber numberWithInt:errSecSuccess]; + + //determine signer + // apple, app store, dev id, adhoc, etc... + signingInfo[KEY_SIGNATURE_SIGNER] = extractSigner(dynamicCode, flags, YES); + + //extract signing info + status = SecCodeCopySigningInformation(dynamicCode, kSecCSSigningInformation, &signingDetails); + if(errSecSuccess != status) + { + //bail + goto bail; + } + } + + //static code checks + else + { + //create static code ref via path + status = SecStaticCodeCreateWithPath((__bridge CFURLRef)([NSURL fileURLWithPath:path]), kSecCSDefaultFlags, &staticCode); + if(errSecSuccess != status) + { + //set error + signingInfo[KEY_SIGNATURE_STATUS] = [NSNumber numberWithInt:status]; + + //bail + goto bail; + } + + //check signature + status = SecStaticCodeCheckValidity(staticCode, flags, NULL); + if(errSecSuccess != status) + { + //set error + signingInfo[KEY_SIGNATURE_STATUS] = [NSNumber numberWithInt:status]; + + //bail + goto bail; + } + + //happily signed + signingInfo[KEY_SIGNATURE_STATUS] = [NSNumber numberWithInt:errSecSuccess]; + + //determine signer + // apple, app store, dev id, adhoc, etc... + signingInfo[KEY_SIGNATURE_SIGNER] = extractSigner(staticCode, flags, NO); + + //extract signing info + status = SecCodeCopySigningInformation(staticCode, kSecCSSigningInformation, &signingDetails); + if(errSecSuccess != status) + { + //bail + goto bail; + } + } + + //extract code signing id + if(nil != [(__bridge NSDictionary*)signingDetails objectForKey:(__bridge NSString*)kSecCodeInfoIdentifier]) + { + //extract/save + signingInfo[KEY_SIGNATURE_IDENTIFIER] = [(__bridge NSDictionary*)signingDetails objectForKey:(__bridge NSString*)kSecCodeInfoIdentifier]; + } + + //extract entitlements + if(nil != [(__bridge NSDictionary*)signingDetails objectForKey:(__bridge NSString*)kSecCodeInfoEntitlementsDict]) + { + //extract/save + signingInfo[KEY_SIGNATURE_ENTITLEMENTS] = [(__bridge NSDictionary*)signingDetails objectForKey:(__bridge NSString*)kSecCodeInfoEntitlementsDict]; + } + + //extract signing authorities + signingAuths = extractSigningAuths((__bridge NSDictionary *)(signingDetails)); + if(0 != signingAuths.count) + { + //save + signingInfo[KEY_SIGNATURE_AUTHORITIES] = signingAuths; + } + +bail: + + //free signing info + if(NULL != signingDetails) + { + //free + CFRelease(signingDetails); + + //unset + signingDetails = NULL; + } + + //free dynamic code + if(NULL != dynamicCode) + { + //free + CFRelease(dynamicCode); + + //unset + dynamicCode = NULL; + } + + //free static code + if(NULL != staticCode) + { + //free + CFRelease(staticCode); + + //unset + staticCode = NULL; + } + + return signingInfo; +} + +//determine who signed item +NSNumber* extractSigner(SecStaticCodeRef code, SecCSFlags flags, BOOL isDynamic) +{ + //result + NSNumber* signer = nil; + + //"anchor apple" + static SecRequirementRef isApple = nil; + + //"anchor apple generic" + static SecRequirementRef isDevID = nil; + + //"anchor apple generic and certificate leaf [subject.CN] = \"Apple Mac OS Application Signing\"" + static SecRequirementRef isAppStore = nil; + + //token + static dispatch_once_t onceToken = 0; + + //only once + // init requirements + dispatch_once(&onceToken, ^{ + + //init apple signing requirement + SecRequirementCreateWithString(CFSTR("anchor apple"), kSecCSDefaultFlags, &isApple); + + //init dev id signing requirement + SecRequirementCreateWithString(CFSTR("anchor apple generic"), kSecCSDefaultFlags, &isDevID); + + //init app store signing requirement + SecRequirementCreateWithString(CFSTR("anchor apple generic and certificate leaf [subject.CN] = \"Apple Mac OS Application Signing\""), kSecCSDefaultFlags, &isAppStore); + }); + + //check 1: "is apple" (proper) + if(errSecSuccess == validateRequirement(code, isApple, flags, isDynamic)) + { + //set signer to apple + signer = [NSNumber numberWithInt:Apple]; + } + + //check 2: "is app store" + // note: this is more specific than dev id, so do it first + else if(errSecSuccess == validateRequirement(code, isAppStore, flags, isDynamic)) + { + //set signer to app store + signer = [NSNumber numberWithInt:AppStore]; + } + + //check 3: "is dev id" + else if(errSecSuccess == validateRequirement(code, isDevID, flags, isDynamic)) + { + //set signer to dev id + signer = [NSNumber numberWithInt:DevID]; + } + + //otherwise + // has to be adhoc? + else + { + //set signer to ad hoc + signer = [NSNumber numberWithInt:AdHoc]; + } + + return signer; +} + +//validate a requirement +OSStatus validateRequirement(SecStaticCodeRef code, SecRequirementRef requirement, SecCSFlags flags, BOOL isDynamic) +{ + //result + OSStatus result = -1; + + //dynamic check? + if(YES == isDynamic) + { + //validate dynamically + result = SecCodeCheckValidity((SecCodeRef)code, flags, requirement); + } + //static check + else + { + //validate statically + result = SecStaticCodeCheckValidity(code, flags, requirement); + } + + return result; +} + +//extract (names) of signing auths +NSMutableArray* extractSigningAuths(NSDictionary* signingDetails) +{ + //signing auths + NSMutableArray* authorities = nil; + + //cert chain + NSArray* certificateChain = nil; + + //index + NSUInteger index = 0; + + //cert + SecCertificateRef certificate = NULL; + + //common name on chert + CFStringRef commonName = NULL; + + //init array for certificate names + authorities = [NSMutableArray array]; + + //get cert chain + certificateChain = [signingDetails objectForKey:(__bridge NSString*)kSecCodeInfoCertificates]; + if(0 == certificateChain.count) + { + //no certs + goto bail; + } + + //extract/save name of all certs + for(index = 0; index < certificateChain.count; index++) + { + //reset + commonName = NULL; + + //extract cert + certificate = (__bridge SecCertificateRef)([certificateChain objectAtIndex:index]); + + //get common name + if( (errSecSuccess == SecCertificateCopyCommonName(certificate, &commonName)) && + (NULL != commonName) ) + { + //save + [authorities addObject:(__bridge id _Nonnull)(commonName)]; + + //release + CFRelease(commonName); + } + } + +bail: + + return authorities; +} diff --git a/Task.m b/Task.m index f323754..4540617 100644 --- a/Task.m +++ b/Task.m @@ -268,6 +268,23 @@ bail: //alloc array for new dylibs newDylibs = [NSMutableArray array]; + //on mojave + // skip launchd (apple bug) + if( (1 == self.pid.integerValue) && + (getVersion(gestaltSystemVersionMinor) >= OS_MINOR_VERSION_MOJAVE) ) + { + //skip + return; + } + + //skip window server + // hangs the UI otherwise! + if(YES == [self.binary.path isEqualToString:WINDOW_SERVER]) + { + //skip + return; + } + //alloc XPC connection xpcConnection = [[NSXPCConnection alloc] initWithServiceName:@"com.objective-see.remoteTaskService"]; @@ -419,7 +436,7 @@ bail: //wait dispatch_semaphore_wait(waitSema, DISPATCH_TIME_FOREVER); } - + return; } diff --git a/TaskEnumerator.m b/TaskEnumerator.m index ef14dad..836eb93 100644 --- a/TaskEnumerator.m +++ b/TaskEnumerator.m @@ -6,20 +6,19 @@ // // +#import +#import +#import #import #import #import "Task.h" #import "Consts.h" -#import "AppDelegate.h" +#import "Signing.h" #import "Utilities.h" -#import "TaskEnumerator.h" #import "Connection.h" - -#import -#import -#import - +#import "AppDelegate.h" +#import "TaskEnumerator.h" @implementation TaskEnumerator @@ -81,7 +80,7 @@ newTasks = [self getAllTasks]; //build ancestries - // ->do here, and use 'new tasks' since there might be new parents too + // do here, and use 'new tasks' since there might be new parents too [self generateAncestries:newTasks]; //get all tasks that are pau @@ -91,12 +90,16 @@ // ->invoke custom method to handle kids too... for(NSNumber* key in deadTasks) { - //remove - [self removeTask:self.tasks[key]]; + //sync to remove + @synchronized(self.tasks) + { + //sync + [self removeTask:self.tasks[key]]; + } } //add all tasks that are really new to 'tasks' iVar - // ->ensures existing task and their info are reused + // ensures existing task and their info are re-used for(NSNumber* key in newTasks.allKeys) { //get task @@ -143,8 +146,8 @@ }); - //now generate signing info/encryption check/packer check - // ->for (new) tasks + //for new tasks + // now generate signing info/encryption check/packer check for(NSNumber* key in newTasks) { //get task @@ -158,10 +161,14 @@ continue; } - //generate signing info - // ->do this before macho parsing! - [newTask.binary generatedSigningInfo]; - + //generate signing info dynamically + newTask.binary.signingInfo = extractSigningInfo(newTask.pid.intValue, nil, kSecCSDefaultFlags); + if(nil == newTask.binary.signingInfo) + { + //extract signing info statically + newTask.binary.signingInfo = extractSigningInfo(0, newTask.binary.path, kSecCSCheckAllArchitectures | kSecCSCheckNestedCode | kSecCSDoNotValidateResources); + } + //parse if(YES == [newTask.binary parse]) { @@ -183,7 +190,7 @@ /* begin enumeration of dylibs/files/network connections - ->this is for global search, as otherwise, each is re-gen'd per task on each bottom-pane click + ...this is for global search, as otherwise, each is re-gen'd per task on each bottom-pane click */ //set state @@ -764,8 +771,8 @@ bail: if(YES == isDylib) { //sync - @synchronized(task.dylibs) - { + //@synchronized(task.dylibs) + //{ //check if dylib is loaded in task for(Binary* taskDylib in task.dylibs) { @@ -780,7 +787,7 @@ bail: } } - }//sync + //}//sync }//dylibs @@ -788,8 +795,8 @@ bail: else if(YES == isFile) { //sync - @synchronized(task.files) - { + //@synchronized(task.files) + //{ //check if file is loaded in task for(File* taskFile in task.files) { @@ -803,7 +810,7 @@ bail: break; } } - }//sync + //}//sync }//files @@ -811,8 +818,8 @@ bail: else if(YES == isConnection) { //sync - @synchronized(task.connections) - { + //@synchronized(task.connections) + //{ //check if connection is 'in' task for(Connection* taskConnection in task.connections) { @@ -827,9 +834,11 @@ bail: break; } } - }//sync + //}//sync }//connections + + }//all tasks diff --git a/TaskExplorer-Info.plist b/TaskExplorer-Info.plist index 7aa249c..30df5da 100755 --- a/TaskExplorer-Info.plist +++ b/TaskExplorer-Info.plist @@ -17,15 +17,15 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.6.0 + 1.7.0 CFBundleSignature ???? CFBundleVersion - 1.6.0 + 1.7.0 LSMinimumSystemVersion ${MACOSX_DEPLOYMENT_TARGET} NSHumanReadableCopyright - Copyright © 2017 Objective-See, LLC. All rights reserved. + Copyright © 2018 Objective-See, LLC. All rights reserved. NSMainNibFile MainMenu NSPrincipalClass diff --git a/TaskExplorer.xcodeproj/project.pbxproj b/TaskExplorer.xcodeproj/project.pbxproj index b1f2030..b5991b8 100755 --- a/TaskExplorer.xcodeproj/project.pbxproj +++ b/TaskExplorer.xcodeproj/project.pbxproj @@ -32,6 +32,7 @@ CD1508D921BA4B9D0081F1AF /* UpdateWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = CD1508D521BA4B9C0081F1AF /* UpdateWindowController.m */; }; CD1508DA21BA4B9D0081F1AF /* Update.m in Sources */ = {isa = PBXBuildFile; fileRef = CD1508D821BA4B9D0081F1AF /* Update.m */; }; CD1508DC21BA4BAC0081F1AF /* UpdateWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = CD1508DB21BA4BAC0081F1AF /* UpdateWindow.xib */; }; + CD1508DF21BB13990081F1AF /* Signing.m in Sources */ = {isa = PBXBuildFile; fileRef = CD1508DD21BB13980081F1AF /* Signing.m */; }; CD1D14EF21B7A67600FF7F4B /* Sentry.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = CD1D14EB21B7A5DB00FF7F4B /* Sentry.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; CD1D14F121B7A69300FF7F4B /* Sentry.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = CD1D14EB21B7A5DB00FF7F4B /* Sentry.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; CD1D14F321B8F2FC00FF7F4B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = CD1D14F221B8F2FC00FF7F4B /* Assets.xcassets */; }; @@ -217,6 +218,8 @@ CD1508D721BA4B9D0081F1AF /* UpdateWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UpdateWindowController.h; sourceTree = SOURCE_ROOT; }; CD1508D821BA4B9D0081F1AF /* Update.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Update.m; sourceTree = SOURCE_ROOT; }; CD1508DB21BA4BAC0081F1AF /* UpdateWindow.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = UpdateWindow.xib; path = UI/UpdateWindow.xib; sourceTree = ""; }; + CD1508DD21BB13980081F1AF /* Signing.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Signing.m; sourceTree = SOURCE_ROOT; }; + CD1508DE21BB13980081F1AF /* Signing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Signing.h; sourceTree = SOURCE_ROOT; }; CD1D14EB21B7A5DB00FF7F4B /* Sentry.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Sentry.framework; path = Carthage/Build/Mac/Sentry.framework; sourceTree = ""; }; CD1D14F221B8F2FC00FF7F4B /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = SOURCE_ROOT; }; CD3F4CE61AF5CF68002A2647 /* TaskEnumerator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TaskEnumerator.m; sourceTree = SOURCE_ROOT; }; @@ -440,13 +443,15 @@ 1D21BC54172AF43D009D1CFD /* TaskExplorer */ = { isa = PBXGroup; children = ( + CD1508DE21BB13980081F1AF /* Signing.h */, + CD1508DD21BB13980081F1AF /* Signing.m */, CD1D14F221B8F2FC00FF7F4B /* Assets.xcassets */, - CD3F4CE61AF5CF68002A2647 /* TaskEnumerator.m */, CD1508D621BA4B9C0081F1AF /* Update.h */, CD1508D821BA4B9D0081F1AF /* Update.m */, CD1508D721BA4B9D0081F1AF /* UpdateWindowController.h */, CD1508D521BA4B9C0081F1AF /* UpdateWindowController.m */, CD3F4CE71AF5CF68002A2647 /* TaskEnumerator.h */, + CD3F4CE61AF5CF68002A2647 /* TaskEnumerator.m */, CDD248391AF5CC4D00232422 /* Task.h */, CDD2483A1AF5CC4D00232422 /* Task.m */, CDF08CC71AC4C678009B3423 /* PrefsWindowController.h */, @@ -870,6 +875,7 @@ CDA81D531A95B492009790E2 /* Utilities.m in Sources */, CD7B9FAB1AD08FA100DF3C71 /* KKRow.m in Sources */, CD3F4CFD1AF71B58002A2647 /* ItemBase.m in Sources */, + CD1508DF21BB13990081F1AF /* Signing.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/TaskExplorer.xcodeproj/project.xcworkspace/xcuserdata/patrick.xcuserdatad/UserInterfaceState.xcuserstate b/TaskExplorer.xcodeproj/project.xcworkspace/xcuserdata/patrick.xcuserdatad/UserInterfaceState.xcuserstate index 793d3ed71fc8b948d64057b01de1cfad62d58449..7f13ea241648d4781bfec949a5bc2007cb730ac1 100644 GIT binary patch literal 66832 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%0D;#tp_JMmysv;{~IW@rLn^@gH*#a|m-Rb1L&| zWA$3z)^sQf4i46En#?!@R=0&b-CE!+gYi&it3z$?RgjXLhqbVfADU zF|$Un@>ru;<5?3~Q&>}3^H>X6MJxmh&BCz=EE0>&;<5xR5lhOFv$n9ZtShWntZsG> z_NVMV>>=z?>@V5l*b~{4*45w&%- zw%S9rw`+f|y;u9Vw!OBiwwwD2w->h`cK~-VcL;YpcM^9NccGcPgbU`vxP{y*E{cog zR&$A5GFQiSbARIA<^IiW=RV`U;J)Sc;`QP6=MCZw;SJ*r=Z)lj!5ht+#>?l;h9zZB#N<_jPKxS&W-B0vd<0*ZhpUM?1y=;u1UCh@1#g8Dg&+SOd<2r^Lghy!dAV?%aHDXG zaJ#TU*eJ9L1H!N{DohBo!ZzU^;XdK7!c)R)!h6C8!bif#!Y9H`VVCf|uv^qa)Jrr` zR3Z|IHi{ZVO(MIX6Mri1 zD;^*oEFLNzEgmbLAf7CqDxNMb5{ty!#0l|k@jmfE@gebX@pC7(%#N+w9YlFX4Tk$@#INui`ff|6h*)e@qFBB4o)5})K3 z$sdw-$ur4Iv!p}vpR|v(zjTmvi1c&m2x*>llys7Giu60_eCa~z5-C&)mljD&q}5WQ zlq;1<>!fO_PHL2{mada-lx~)8lkSivq?e?xWqGm*vdOZkvgxw#WQ%1W8B|svE0&eY z%4Gx@MMje`Wgq2CnMfv)nPl~{&9X+BO=fn;+%lgmB8$tCvW%=vwp(^d)+HY&2g!@& zW%5cnLQaq~$zU3XL2U%5z$RWg)pWv!C06e%T2jnb%Gu3Vv9rQEKxD(y;#(xnV20cBVjQzn!b zlsA-*luwoB=gODL4&^ SsBFI8_i^Re!45)q~WN)w9)$)JxS6HC$b!MySyr zt2u(2q^76^YLQx^maBv6j5?>@rQWN4VphLZzgKr_dT17C3N^)=QcZ=%tl6U3u4< zY3v$@X1C_B=7{E~=D6mT=9#8T^Ip@f`JnBo?XCS>J59S-3(^*AF*}A#9 zc{;ETrYqDH>&QBqj-g}fI69tArPJv2y0y9uy3M+6x}7?U&ZYC}{JNlSpYEXUknXVV zi0-KFqVBTpn(n6Vj_$7RsqUS=pMJD{tbT%ivVN-mYkj_cmVS=DKwqpc)tBq5^e8=6 zU#+jvlk^uh6#Dp_3 zO?;EcBsD2aI+MY)%w#sLG;J{LY#7@xz9GM1QNz*(NCUi~sG+o>qM@dN+(2z$G_V_L z8+Z+ZhOG_RhFg|CmLZleEE6qLEZ;igMXudKtY-&)J8=4z|RDzz%CDy!CNu$rv())m&()^%2=)ot}! z{nn5*Y>ioy){Hf0-EG}#yNr&GF_`bGEsy`Bd{W$9MAd5-=X~IN zFjd8b9TFWxO%yUx`w;*T%%oMUE|HJ#jX-pr3>l8xCkzii{hfW46gOAMwi>= za|K+0E8@z!+FW~F`&)z&e zx&e2@9e1bPS@$mYkM5t{$K1cVPr1*!&$}PFJ3YfZQ#@D?!^8G)J!XMN?2&qm9+PL8 zr`}`r1U!Hz;)#1wo{Z;^=dkBT&k@f#&qdE=&o$3Y&u!0R&p)1a&r{DkZ$Ixq?`Pg& z-Vxp}ykor6y)(SudS`jR^M3DL;9cY;dX?TS-d68!?*;E2?<4PH?-TEH@4w#n-VeT> zzE6F9ef@ote5Gce$>;U~zKAdGOZg7^PWZ0)?)e`09{C>op7@^o-ub#)dbIRv>C@7$ zWk5@Q3$BIQ!fD~P2wNmA@|M*tww7Q^q9xsuYuVLuvgLHkxt0qpzqMTbcnvwiKh8hV zKgB=IKf|BzU*uov2m7IZx?k*<`Rn{D|1y8Qf3x4b&A-Fn;P?9d{-7W5pYUJwKMo8I zj0wyM%nK|GED3-Eus~s;Bv2lx3ZMemfG{8q$O4LhDxeAI1ExTIU`1e6U~OQ1z#qs2 z&IkSqybcZwP7N*&B7(wTeb5^827N()Fcr)OcLnzb4+MV*-U~hsz6f>%UkBfsgYQH0 zL-LS6lnS+lc8B(ceh3{7{S^8+bUt(`bR~2>bSrcx^eFT+^di&|dL8Nl`T&E0A;2(T zI4}kn3ycRQ0+WH+zye?qumk`Bg+MV-3X}tt01;pSEPw-W0SO=j6o3*?11o_wz&c72IDiz81`taWXxv-MExiPkHv*IRG4-f6wp`bTSf>x!?18cxF}o_MubseOc);~gc;_rBrFdr!$d!)Wj5XVGC%^N46( zbVBs&Xnu57bWU_$bV0N*S{AK{BBIzRK3WqcMFr92(G}6v(Y4VH(M{2V(WBAR(R0y@ z(aX`R(Ff5-(Z|vD=-XJ|SpV3-*x=Zh*tpn)*reF3*wPpz28$KMkg=K=IYx^yV*1$H z*rwRl*p66J%pP;b+_9KBb}4o(_Gj#I>`CldtRwb1_BQrD-X}ghJ|;dkK0ZD%K0W?T z{M-2K_?-BXI5-ZA7sOFT3jK4{YPZT6r2~k3tP$bOCgekEmu`aP8u_>`7u`S_D z_!9m^C=pG>6RAWd@nhoW#I?lD#GS<5#QnsB#FNC!#H+-c#M@-w{?ysTryK)XdcE)SMJ7Rgfx9m8B|E$P_w-OI4@XDRD}c zs!OR;y3~r)>eRZ_hScWN)>JfgKGl&Po*tW?ke;0WDm^p3AiX%fG!03^(gkT$8lNVl zNojhTndYRqX?1#IdP{nHdS}|)n6{?9X&@a*$J42FCVeRVQ~HI)tPmf4VlfE ztr>eJo%tbiEOR1rI&&^_F>^C>JM(+yUgnR?pV?m7iP^#|H7hh{C0Th^nN?@C*-cqn z){%8*ec3=Zluc%H+1=TF*#p^Mv*)rGvX`=#v$wK$vUjuhvk$T_vTw3)v+uLrx!$?H zx&FC - + - - + @@ -11,15 +10,15 @@ - + - + @@ -85,7 +84,7 @@