From b35dd8a62554f08bc2d3c1f60815f81cddaf64bf Mon Sep 17 00:00:00 2001 From: Patrick Wardle Date: Sun, 4 Dec 2016 22:13:40 -1000 Subject: [PATCH] UI fixed/changes for macOS Sierra filter background processing support for filtering when enter is hit after trying full #keyword 'not found' binary attribute/#keyword error alert when opening file in Finder fails skipper dylib/file/network enumeration for kernel task (pid 0x0) --- AppDelegate.h | 18 +- AppDelegate.m | 283 +++++++++++++++--- CustomTextField.h | 6 +- CustomTextField.m | 15 +- Filter.h | 3 + Filter.m | 238 ++++++++++----- FlaggedItemWindowController.m | 20 +- ItemView.m | 63 +++- Items/Binary.h | 3 + Items/Binary.m | 6 +- NSApplicationKeyEvents.m | 11 +- TaskEnumerator.m | 21 ++ TaskExplorer.xcodeproj/project.pbxproj | 18 +- .../xcshareddata/TaskExplorer.xcscmblueprint | 4 +- .../UserInterfaceState.xcuserstate | Bin 139717 -> 52165 bytes .../xcschemes/TaskExplorer.xcscheme | 3 +- .../xcschemes/remoteTaskService.xcscheme | 2 +- TaskTableController.m | 17 +- UI/FileInfoWindow.xib | 4 +- UI/FlaggedItems.xib | 55 ++-- UI/FlatView.xib | 215 ++++++++----- UI/SearchWindow.xib | 144 +++++---- UI/TreeView.xib | 88 +++--- en.lproj/MainMenu.xib | 151 ++++++---- 24 files changed, 980 insertions(+), 408 deletions(-) diff --git a/AppDelegate.h b/AppDelegate.h index 203a0e2..492715c 100755 --- a/AppDelegate.h +++ b/AppDelegate.h @@ -85,9 +85,6 @@ //spinner @property (weak) IBOutlet NSProgressIndicator *progressIndicator; -//status msg -@property (weak) IBOutlet NSTextField *statusText; - //non-UI thread that performs actual scan @property(nonatomic, strong)NSThread *scannerThread; @@ -166,6 +163,15 @@ //custom search field for items @property(nonatomic, retain)CustomTextField* customItemsFilter; +//overlay view for filter +@property (weak) IBOutlet NSView *filteringOverlay; + +//activity indicator for filtering +@property (weak) IBOutlet NSProgressIndicator *filteringIndicator; + +//message for filtering +@property (weak) IBOutlet NSTextField *filteringMessage; + /* METHODS */ //complete a few inits @@ -236,6 +242,12 @@ // ->handle auto-complete filterings -(void)filterAutoComplete:(NSTextView*)textField; +//show the filter overlay, etc +-(void)prepUIForFiltering:(NSUInteger)pane; + +//hide overlay, etc +-(void)unprepUIForFiltering; + //code to complete filtering/search // ->reload table/scroll to top etc -(void)finalizeFiltration:(NSUInteger)pane; diff --git a/AppDelegate.m b/AppDelegate.m index 275feb1..a89a93a 100755 --- a/AppDelegate.m +++ b/AppDelegate.m @@ -41,9 +41,12 @@ @synthesize taskViewFormat; @synthesize commandHandling; @synthesize completePosting; +@synthesize filteringMessage; +@synthesize filteringOverlay; @synthesize customItemsFilter; @synthesize customTasksFilter; @synthesize progressIndicator; +@synthesize filteringIndicator; @synthesize taskTableController; @synthesize bottomViewController; @synthesize aboutWindowController; @@ -76,6 +79,9 @@ // ->install exception handlers! installExceptionHandlers(); + //for autolayout + [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"NSConstraintBasedLayoutVisualizeMutuallyExclusiveConstraints"]; + //init virus total object virusTotalObj = [[VirusTotal alloc] init]; @@ -690,6 +696,9 @@ bail: //stop progress indicator [self.bottomPaneSpinner stopAnimation:nil]; + //hide + self.bottomPaneSpinner.hidden = YES; + //invoke refresh [(id)self.bottomViewController reloadTable]; @@ -698,7 +707,6 @@ bail: { //how self.noItemsLabel.hidden = NO; - } //got items? else @@ -1439,6 +1447,9 @@ bail: //reload to clear [(id)self.bottomViewController reloadTable]; + //show spinner + self.bottomPaneSpinner.hidden = NO; + //start progress indicator [self.bottomPaneSpinner startAnimation:nil]; @@ -1451,6 +1462,9 @@ bail: //reload to clear [(id)self.bottomViewController reloadTable]; + //start spinner + self.bottomPaneSpinner.hidden = NO; + //start progress indicator [self.bottomPaneSpinner startAnimation:nil]; } @@ -1467,6 +1481,13 @@ bail: //remove all task's dylibs [self.currentTask.dylibs removeAllObjects]; + //skip kernel + if(0 == self.currentTask.pid.intValue) + { + //skip + break; + } + //(re)enumerate dylibs via XPC // ->triggers table reload when done [self.currentTask enumerateDylibs:self.taskEnumerator.dylibs]; @@ -1482,6 +1503,13 @@ bail: //remove all task's dylibs [self.currentTask.files removeAllObjects]; + //skip kernel + if(0 == self.currentTask.pid.intValue) + { + //skip + break; + } + //(re)enumerate files via XPC // ->triggers table reload when done [self.currentTask enumerateFiles]; @@ -1494,6 +1522,13 @@ bail: //init placeholder text for network filterPlaceholder = @"Filter Connections"; + //skip kernel + if(0 == self.currentTask.pid.intValue) + { + //skip + break; + } + //(re)enumerate network connections via XPC // ->triggers table reload when done [self.currentTask enumerateNetworking]; @@ -1514,6 +1549,15 @@ bail: //set placeholder [[self.filterItemsBox cell] setPlaceholderString:filterPlaceholder]; + + //kernel + // ->didn't enum so reload + if(0 == self.currentTask.pid.intValue) + { + //reload + [self reloadBottomPane:self.currentTask itemView:segmentTag]; + } + }); } //in main thread already @@ -1522,12 +1566,18 @@ bail: { //set placeholder [[self.filterItemsBox cell] setPlaceholderString:filterPlaceholder]; + + //kernel + // ->didn't enum so reload + if(0 == self.currentTask.pid.intValue) + { + //reload + [self reloadBottomPane:self.currentTask itemView:segmentTag]; + } } - //bail bail: - return; } @@ -1680,10 +1730,129 @@ bail: return; } +//config/show the filter overlay +// ->also disable all inputs/buttons +-(void)prepUIForFiltering:(NSUInteger)pane +{ + //pre-req + [self.filteringOverlay setWantsLayer:YES]; + + //rounded corners + self.filteringOverlay.layer.cornerRadius = 20.0; + + //maks + self.filteringOverlay.layer.masksToBounds = YES; + + //set overlay's view color to black + self.filteringOverlay.layer.backgroundColor = [NSColor grayColor].CGColor; + + //make it semi-transparent + self.filteringOverlay.alphaValue = 0.95; + + //show overlay + self.filteringOverlay.hidden = NO; + + //set text + // top pane + if(PANE_TOP == pane) + { + //set text + self.filteringMessage.stringValue = [NSString stringWithFormat:@"filtering tasks (%@)", self.filterTasksBox.stringValue]; + } + //set text + // bottom pane + else + { + //set text + self.filteringMessage.stringValue = [NSString stringWithFormat:@"filtering dylibs (%@)", self.filterItemsBox.stringValue]; + } + + //start spinner + [self.filteringIndicator startAnimation:nil]; + + //disable view switcher + self.viewSelector.enabled = NO; + + //disable filter box + self.filterTasksBox.enabled = NO; + + //disable bottom pane switcher + self.bottomPaneBtn.enabled = NO; + + //disable bottom filter item box + self.filterItemsBox.enabled = NO; + + //disable refresh + self.refreshButton.enabled = NO; + + //disable search + self.searchButton.enabled = NO; + + //disable save + self.saveButton.enabled = NO; + + //disable flagged + self.flaggedButton.enabled = NO; + + //disable task table + self.taskTableController.itemView.enabled = NO; + + //disable item table + self.bottomViewController.itemView.enabled = NO; + + return; +} + +//roll back changes to UI due to filtering +// ->hide overlay and enable all inputs/buttons +-(void)unprepUIForFiltering +{ + //always (attempt to) hide filter overlay + self.filteringOverlay.hidden = YES; + + //stop spinner + [self.filteringIndicator stopAnimation:nil]; + + //enable view switcher + self.viewSelector.enabled = YES; + + //enable filter box + self.filterTasksBox.enabled = YES; + + //enable bottom pane switcher + self.bottomPaneBtn.enabled = YES; + + //enable bottom filter item box + self.filterItemsBox.enabled = YES; + + //enable refresh + self.refreshButton.enabled = YES; + + //enable search + self.searchButton.enabled = YES; + + //enable save + self.saveButton.enabled = YES; + + //enable flagged + self.flaggedButton.enabled = YES; + + //enable task table + self.taskTableController.itemView.enabled = YES; + + //enable item table + self.bottomViewController.itemView.enabled = YES; + + return; +} + //code to complete filtering/search // ->reload table/scroll to top etc -(void)finalizeFiltration:(NSUInteger)pane { + //hide overlay, etc + [self unprepUIForFiltering]; + //top pane (task) if(PANE_TOP == pane) { @@ -1982,32 +2151,48 @@ bail: //set iVar flag self.commandHandling = YES; - //init invocation - textViewInvocationForSelector = [NSInvocation invocationWithMethodSignature:[textView methodSignatureForSelector:commandSelector]]; - - //set target - [textViewInvocationForSelector setTarget:textView]; - - //set selector - [textViewInvocationForSelector setSelector:commandSelector]; - - //invoke selector - [textViewInvocationForSelector invoke]; - - //unset iVar - self.commandHandling = NO; - - //indicate that selector was performed - didPerformRequestedSelectorOnTextView = YES; - + //handle 'enter' + // ->but only for #'s + if( (commandSelector == @selector(insertNewline:)) && + (YES == [filterObj isKeyword:textView.string]) ) + { + //filter + [self filterAutoComplete:textView]; + + //unset iVar + self.commandHandling = NO; + + //set flag + didPerformRequestedSelectorOnTextView = YES; + } + //just invoke system handler for rest... + else + { + //init invocation + textViewInvocationForSelector = [NSInvocation invocationWithMethodSignature:[textView methodSignatureForSelector:commandSelector]]; + + //set target + [textViewInvocationForSelector setTarget:textView]; + + //set selector + [textViewInvocationForSelector setSelector:commandSelector]; + + //invoke selector + [textViewInvocationForSelector invoke]; + + //unset iVar + self.commandHandling = NO; + + //indicate that selector was performed + didPerformRequestedSelectorOnTextView = YES; + } //bail bail: return didPerformRequestedSelectorOnTextView; } - - + //callback for custom search fields // ->handle auto-complete filterings -(void)filterAutoComplete:(NSTextView*)textView @@ -2021,32 +2206,56 @@ bail: //handle top pane (tasks) if(textView == self.customTasksFilter) { + //set flag + self.taskTableController.isFiltered = YES; + //sync @synchronized(self.taskTableController.filteredItems) { + //remove all filtered tasks + [self.taskTableController.filteredItems removeAllObjects]; + + //update ui + [self finalizeFiltration:PANE_TOP]; + //filter [self.filterObj filterTasks:filterString items:self.taskEnumerator.tasks results:self.taskTableController.filteredItems]; } - //set flag - self.taskTableController.isFiltered = YES; - - //finalize filtering - [self finalizeFiltration:PANE_TOP]; - + //refresh/update UI when not a keyword search + // ->keyword search are done in background, and will call this directly when pau + if(YES != [filterString hasPrefix:@"#"]) + { + //finalize filtering + [self finalizeFiltration:PANE_TOP]; + } } //handle bottom pane // ->just dylibs else if(textView == self.customItemsFilter) { - //filter - [self.filterObj filterFiles:filterString items:self.currentTask.dylibs results:self.bottomViewController.filteredItems]; - //set flag self.bottomViewController.isFiltered = YES; - //finalize filtering - [self finalizeFiltration:PANE_BOTTOM]; + @synchronized (self.bottomViewController.filteredItems) + { + //remove all filtered tasks + [self.bottomViewController.filteredItems removeAllObjects]; + + //update ui + [self finalizeFiltration:PANE_BOTTOM]; + + //filter + [self.filterObj filterFiles:filterString items:self.currentTask.dylibs results:self.bottomViewController.filteredItems]; + } + + //refresh/update UI when not a keyword search + // ->keyword search are done in background, and will call this directly when pau + if(YES != [filterString hasPrefix:@"#"]) + { + //finalize filtering + [self finalizeFiltration:PANE_BOTTOM]; + } } //bail @@ -2081,14 +2290,10 @@ bail: //assign for return fieldEditor = self.customItemsFilter; } - - + //bail bail: return fieldEditor; } - - - @end diff --git a/CustomTextField.h b/CustomTextField.h index 9c45e60..558ada3 100644 --- a/CustomTextField.h +++ b/CustomTextField.h @@ -17,6 +17,10 @@ } //'owner' -@property (nonatomic, retain)id owner; +@property(nonatomic, retain)id owner; + +//last movement +// ->helps avoid 2x 'Enter' +@property NSInteger lastMovement; @end diff --git a/CustomTextField.m b/CustomTextField.m index 6b0ccab..8a936d0 100644 --- a/CustomTextField.m +++ b/CustomTextField.m @@ -12,6 +12,7 @@ @implementation CustomTextField @synthesize owner; +@synthesize lastMovement; //subclass override // ->see: http://stackoverflow.com/questions/5163646/how-to-make-nssearchfield-send-action-upon-autocompletion/5360535#5360535 @@ -24,6 +25,17 @@ goto bail; } + //ignore if 2x 'enter' + if( (movement == NSReturnTextMovement) && + (self.lastMovement == NSReturnTextMovement) ) + { + //bail + goto bail; + } + + //update + self.lastMovement = movement; + //show full replacements if(0 != charRange.location) { @@ -44,7 +56,6 @@ { //call up into owner to process [owner filterAutoComplete:self]; - //[((AppDelegate*)[[NSApplication sharedApplication] delegate]) filterAutoComplete:self]; } //bail @@ -53,4 +64,4 @@ bail: return; } -@end \ No newline at end of file +@end diff --git a/Filter.h b/Filter.h index e94412a..167483b 100644 --- a/Filter.h +++ b/Filter.h @@ -43,6 +43,9 @@ // ->determine if binary is packed -(BOOL)isPacked:(Binary*)item; +//keyword filter '#notfound' +-(BOOL)notFound:(Binary*)item; + //filter tasks -(void)filterTasks:(NSString*)filterText items:(NSMutableDictionary*)items results:(NSMutableArray*)results; diff --git a/Filter.m b/Filter.m index 10924e2..3a2ab04 100644 --- a/Filter.m +++ b/Filter.m @@ -5,15 +5,17 @@ // Created by Patrick Wardle on 2/21/15. // Copyright (c) 2015 Objective-See. All rights reserved. // + +#import "Task.h" #import "Consts.h" #import "Filter.h" -#import "Utilities.h" -#import "Task.h" #import "ItemBase.h" +#import "Utilities.h" #import "Connection.h" +#import "AppDelegate.h" //binary filter keywords -NSString * const BINARY_KEYWORDS[] = {@"#apple", @"#nonapple", @"#signed", @"#unsigned", @"#flagged", @"#encrypted", @"#packed"}; +NSString * const BINARY_KEYWORDS[] = {@"#apple", @"#nonapple", @"#signed", @"#unsigned", @"#flagged", @"#encrypted", @"#packed", @"#notfound"}; @implementation Filter @@ -49,32 +51,8 @@ NSString * const BINARY_KEYWORDS[] = {@"#apple", @"#nonapple", @"#signed", @"#un { //for now just check in binary keywords return [self.binaryFilters containsObject:searchString]; - - /* - //flag - BOOL isKeyword = NO; - - //iterate over all keywords - // ->check for match - for(NSUInteger i=0; i < sizeof(KEYWORDS)/sizeof(KEYWORDS[0]); i++) - { - //check - if(YES == [KEYWORDS[i] isEqualToString:searchString]) - { - //match - isKeyword = YES; - - //bail - break; - } - } - - return isKeyword; - */ - } - //filter tasks // ->name, path, pid -(void)filterTasks:(NSString*)filterText items:(NSMutableDictionary*)items results:(NSMutableArray*)results @@ -82,38 +60,44 @@ NSString * const BINARY_KEYWORDS[] = {@"#apple", @"#nonapple", @"#signed", @"#un //task Task* task = nil; - //flag for keyword filter - BOOL isKeyword = NO; - - //first reset filter'd items + //first reset any previous filter'd items [results removeAllObjects]; - //set keyword flag + //process #keyword filtering // ->note: already checked its a full/matching keyword - isKeyword = [filterText hasPrefix:@"#"]; - - //sync - @synchronized(items) + if(YES == [filterText hasPrefix:@"#"]) { - - //iterate over all tasks - for(NSNumber* taskKey in items) - { - //extract task - task = items[taskKey]; + //prep UI for filtering + // ->config/show overlay, etc + [((AppDelegate*)[[NSApplication sharedApplication] delegate]) prepUIForFiltering:PANE_TOP]; - //handle keyword filtering - if( (YES == isKeyword) && - (YES == [self binaryFulfillsKeyword:filterText binary:task.binary]) ) + //in background filter by keyword + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + + //nap a 1/2second to let message show up + [NSThread sleepForTimeInterval:0.5]; + + //filter + // ->calls back in UI to refresh when done! + [self filterByKeyword:(NSString*)filterText items:items.allValues results:(NSMutableArray*)results]; + + }); + } + + //not keyword + // ->do normal search here... + else + { + //sync + @synchronized(items) { - //add - [results addObject:task]; - }//keywords - - //no keyword search - else + //iterate over all tasks + for(NSNumber* taskKey in items) { + //extract task + task = items[taskKey]; + //check path first // ->mostly likely to match if( (nil != task.binary.path) && @@ -146,12 +130,81 @@ NSString * const BINARY_KEYWORDS[] = {@"#apple", @"#nonapple", @"#signed", @"#un //next continue; } - } - }//all tasks - - }//sync + }//all tasks + }//sync + + }//normal filtering + + return; +} + +//filter tasks +// ->name, path, pid +-(void)filterByKeyword:(NSString*)filterText items:(NSArray*)items results:(NSMutableArray*)results +{ + //pane + NSUInteger pane = PANE_TOP; + + //sync + @synchronized(items) + { + //sanity check + if(0 == items.count) + { + //bail + goto bail; + } + + //handle tasks + if(YES == [items.firstObject isKindOfClass:[Task class]]) + { + //set pane + pane = PANE_TOP; + + //iterate over all items + for(id item in items) + { + //check if task's binary matches filter + if(YES == [self binaryFulfillsKeyword:filterText binary:((Task*)item).binary]) + { + //add + [results addObject:item]; + } + } + } + //handle dylibs + else if(YES == [items.firstObject isKindOfClass:[Binary class]]) + { + //set pane + pane = PANE_BOTTOM; + + //iterate over all items + for(id item in items) + { + //check if dylib's binary matches filter + if(YES == [self binaryFulfillsKeyword:filterText binary:((Binary*)item)]) + { + //add + [results addObject:item]; + } + } + } + + } //sync + + //tell the UI we are done + dispatch_async(dispatch_get_main_queue(), ^{ + + //finalize UI + [((AppDelegate*)[[NSApplication sharedApplication] delegate]) finalizeFiltration:pane]; + + }); + +//bail +bail: + return; } @@ -159,36 +212,41 @@ NSString * const BINARY_KEYWORDS[] = {@"#apple", @"#nonapple", @"#signed", @"#un // ->name and path -(void)filterFiles:(NSString*)filterText items:(NSMutableArray*)items results:(NSMutableArray*)results { - //flag for keyword filter - BOOL isKeyword = NO; - //first reset filter'd items [results removeAllObjects]; - //set keyword flag + //process #keyword filtering for dylibs // ->note: already checked its a full/matching keyword - isKeyword = [filterText hasPrefix:@"#"]; - - //sync - @synchronized(items) + if( (YES == [filterText hasPrefix:@"#"]) && + (YES == [items.firstObject isKindOfClass:[Binary class]]) ) { - - //iterate over all tasks - for(ItemBase* item in items) + //prep UI for filtering + // ->config/show overlay, etc + [((AppDelegate*)[[NSApplication sharedApplication] delegate]) prepUIForFiltering:PANE_BOTTOM]; + + //in background filter by keyword + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + + //nap a 1/2second to let message show up + [NSThread sleepForTimeInterval:0.5]; + + //filter + // ->calls back in UI to refresh when done! + [self filterByKeyword:(NSString*)filterText items:items results:(NSMutableArray*)results]; + + }); + } + + //not keyword + // ->do normal search here... + else { - //handle keyword filtering - // ->for now, only for dylibs (binaries) - if( (YES == [item isKindOfClass:[Binary class]]) && - (YES == isKeyword) && - (YES == [self binaryFulfillsKeyword:filterText binary:(Binary*)item]) ) + //sync + @synchronized(items) { - //add - [results addObject:item]; - }//keywords - - //no keyword search - else + //iterate over all items + for(ItemBase* item in items) { //check path first // ->most likely to match @@ -212,12 +270,12 @@ NSString * const BINARY_KEYWORDS[] = {@"#apple", @"#nonapple", @"#signed", @"#un //next continue; } - } + + }//all items + + }//sync - }//all items - - //sync - } + }//normal filtering return; } @@ -417,6 +475,16 @@ NSString * const BINARY_KEYWORDS[] = {@"#apple", @"#nonapple", @"#signed", @"#un goto bail; } + //handle '#notfound' + else if( (YES == [keyword isEqualToString:@"#notfound"]) && + (YES == [self notFound:binary]) ) + { + //happy + fulfills = YES; + + //bail + goto bail; + } //bail bail: @@ -533,4 +601,10 @@ bail: return item.isPacked; } +//keyword filter '#notfound' +-(BOOL)notFound:(Binary *)item +{ + return item.notFound; +} + @end diff --git a/FlaggedItemWindowController.m b/FlaggedItemWindowController.m index 7165be4..feed9c7 100644 --- a/FlaggedItemWindowController.m +++ b/FlaggedItemWindowController.m @@ -312,6 +312,9 @@ bail: //row NSInteger itemRow = 0; + //file open error alert + NSAlert* errorAlert = nil; + //grab sender's row itemRow = [self.flaggedItemTable rowForView:sender]; @@ -349,11 +352,18 @@ bail: goto bail; } - //open Finder - // ->will reveal binary - [[NSWorkspace sharedWorkspace] selectFile:path inFileViewerRootedAtPath:@""]; - - //bail + //open item in Finder + // ->error alert shown if file open fails + if(YES != [[NSWorkspace sharedWorkspace] selectFile:path inFileViewerRootedAtPath:@""]) + { + //alloc/init alert + errorAlert = [NSAlert alertWithMessageText:[NSString stringWithFormat:@"ERROR:\nfailed to open %@", path] defaultButton:@"OK" alternateButton:nil otherButton:nil informativeTextWithFormat:@"errno value: %d", errno]; + + //show it + [errorAlert runModal]; + } + +//bail bail: return; diff --git a/ItemView.m b/ItemView.m index 6881c3e..bd4e2fd 100644 --- a/ItemView.m +++ b/ItemView.m @@ -337,7 +337,7 @@ NSAttributedString* initBinaryString(id item, BOOL isSearchWindow) [taskString appendAttributedString:[[NSMutableAttributedString alloc] initWithString:@", " attributes:attributes]]; } //dylibs - // ->open parents + // ->open'(' else { //open @@ -362,6 +362,65 @@ NSAttributedString* initBinaryString(id item, BOOL isSearchWindow) [taskString appendAttributedString:[[NSAttributedString alloc] initWithString:@"packed" attributes:attributes]]; } + //dylib, need to close string here unless binary not found, then going to add that + // ->normally it doesn't have anything after... + if( (YES != [item isKindOfClass:[Task class]]) && + (YES != binary.notFound)) + { + //init color for closing + attributes = [NSDictionary dictionaryWithObject:[NSColor lightGrayColor] forKey:NSForegroundColorAttributeName]; + + //close string + [taskString appendAttributedString:[[NSMutableAttributedString alloc] initWithString:@")" attributes:attributes]]; + } + + }//encrypted or packed + + //add 'not found' + if(YES == binary.notFound) + { + //add ',' + if( (YES == binary.isEncrypted) || + (YES == binary.isPacked) ) + { + //init color for comma, + // ->light gray + attributes = [NSDictionary dictionaryWithObject:[NSColor lightGrayColor] forKey:NSForegroundColorAttributeName]; + + //add + [taskString appendAttributedString:[[NSAttributedString alloc] initWithString:@", " attributes:attributes]]; + } + //open string + else + { + //init color for comma, etc + // ->light gray + attributes = [NSDictionary dictionaryWithObject:[NSColor lightGrayColor] forKey:NSForegroundColorAttributeName]; + + //tasks + //add comma string + if(YES == [item isKindOfClass:[Task class]]) + { + //close + [taskString appendAttributedString:[[NSMutableAttributedString alloc] initWithString:@", " attributes:attributes]]; + } + //dylibs + // ->open'(' + else + { + //open + [taskString appendAttributedString:[[NSMutableAttributedString alloc] initWithString:@" (" attributes:attributes]]; + } + + } + + //init color + // ->red + attributes = [NSDictionary dictionaryWithObject:[NSColor redColor] forKey:NSForegroundColorAttributeName]; + + //add + [taskString appendAttributedString:[[NSAttributedString alloc] initWithString:@"not found" attributes:attributes]]; + //dylib, need to close string here // ->normally it doesn't have anything after... if(YES != [item isKindOfClass:[Task class]]) @@ -373,7 +432,7 @@ NSAttributedString* initBinaryString(id item, BOOL isSearchWindow) [taskString appendAttributedString:[[NSMutableAttributedString alloc] initWithString:@")" attributes:attributes]]; } - }//encrypted or packed + }//not found } //task diff --git a/Items/Binary.h b/Items/Binary.h index f8b57db..525442d 100644 --- a/Items/Binary.h +++ b/Items/Binary.h @@ -46,6 +46,9 @@ //packed flag @property BOOL isPacked; +//not found +@property BOOL notFound; + /* VIRUS TOTAL INFO */ //dictionary returned by VT diff --git a/Items/Binary.m b/Items/Binary.m index d94d7ae..9fbab4f 100644 --- a/Items/Binary.m +++ b/Items/Binary.m @@ -21,6 +21,7 @@ @synthesize parser; @synthesize vtInfo; @synthesize isPacked; +@synthesize notFound; @synthesize isEncrypted; @synthesize signingInfo; @synthesize isTaskBinary; @@ -47,6 +48,9 @@ // ->either from bundle or just use system icon self.icon = [self getIcon]; + //determine if its on disk + self.notFound = ![[NSFileManager defaultManager] fileExistsAtPath:self.path]; + //grab attributes //self.attributes = [[NSFileManager defaultManager] attributesOfItemAtPath:self.path error:nil]; } @@ -73,7 +77,7 @@ bail: parser = [[MachO alloc] init]; //parse - if(YES != [self.parser parse:self.path]) + if(YES != [self.parser parse:self.path classify:YES]) { //unset parser self.parser = nil; diff --git a/NSApplicationKeyEvents.m b/NSApplicationKeyEvents.m index 5a1e2a1..d224d25 100644 --- a/NSApplicationKeyEvents.m +++ b/NSApplicationKeyEvents.m @@ -27,21 +27,12 @@ if ([self sendAction:@selector(paste:) to:nil from:self]) return; } - else if ([[event charactersIgnoringModifiers] isEqualToString:@"z"]) { - if ([self sendAction:@selector(undo:) to:nil from:self]) - return; - } else if ([[event charactersIgnoringModifiers] isEqualToString:@"a"]) { if ([self sendAction:@selector(selectAll:) to:nil from:self]) return; } } - else if (([event modifierFlags] & NSDeviceIndependentModifierFlagsMask) == (NSCommandKeyMask | NSShiftKeyMask)) { - if ([[event charactersIgnoringModifiers] isEqualToString:@"Z"]) { - if ([self sendAction:@selector(redo:) to:nil from:self]) - return; - } - } + } [super sendEvent:event]; } diff --git a/TaskEnumerator.m b/TaskEnumerator.m index 231c06f..c9c3832 100644 --- a/TaskEnumerator.m +++ b/TaskEnumerator.m @@ -195,6 +195,13 @@ //get task newTask = newTasks[key]; + //skip kernel + if(0 == newTask.pid.intValue) + { + //skip + continue; + } + //enumerate [newTask enumerateDylibs:self.dylibs]; @@ -210,6 +217,13 @@ //get task newTask = newTasks[key]; + //skip kernel + if(0 == newTask.pid.intValue) + { + //skip + continue; + } + //enumerate [newTask enumerateFiles]; @@ -225,6 +239,13 @@ //get task newTask = newTasks[key]; + //skip kernel + if(0 == newTask.pid.intValue) + { + //skip + continue; + } + //enumerate [newTask enumerateNetworking]; diff --git a/TaskExplorer.xcodeproj/project.pbxproj b/TaskExplorer.xcodeproj/project.pbxproj index 19be8dc..96b3ffc 100755 --- a/TaskExplorer.xcodeproj/project.pbxproj +++ b/TaskExplorer.xcodeproj/project.pbxproj @@ -670,7 +670,7 @@ 1D21BC43172AF43D009D1CFD /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0700; + LastUpgradeCheck = 0800; ORGANIZATIONNAME = "Lucas Derraugh"; TargetAttributes = { 1D21BC4A172AF43D009D1CFD = { @@ -886,17 +886,23 @@ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "Developer ID Application: Objective-See, LLC (VBG97UB4TA)"; COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", @@ -906,7 +912,9 @@ GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.8; ONLY_ACTIVE_ARCH = YES; @@ -921,20 +929,28 @@ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "Developer ID Application: Objective-See, LLC (VBG97UB4TA)"; COPY_PHASE_STRIP = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.8; ONLY_ACTIVE_ARCH = YES; diff --git a/TaskExplorer.xcodeproj/project.xcworkspace/xcshareddata/TaskExplorer.xcscmblueprint b/TaskExplorer.xcodeproj/project.xcworkspace/xcshareddata/TaskExplorer.xcscmblueprint index b0bb6fb..9a4b8b4 100644 --- a/TaskExplorer.xcodeproj/project.xcworkspace/xcshareddata/TaskExplorer.xcscmblueprint +++ b/TaskExplorer.xcodeproj/project.xcworkspace/xcshareddata/TaskExplorer.xcscmblueprint @@ -9,8 +9,8 @@ }, "DVTSourceControlWorkspaceBlueprintIdentifierKey" : "FE4103FE-6F26-4639-8C9F-D8D32C76D6A9", "DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : { - "61F07AFB33748EF0C810BEEF6126283DAC63A899" : "TaskExplorer", - "7564E3FECD3AE625755C217749E31B3EE2B69E20" : "machO\/" + "61F07AFB33748EF0C810BEEF6126283DAC63A899" : "TaskExplorer\/", + "7564E3FECD3AE625755C217749E31B3EE2B69E20" : "MachO\/" }, "DVTSourceControlWorkspaceBlueprintNameKey" : "TaskExplorer", "DVTSourceControlWorkspaceBlueprintVersion" : 204, diff --git a/TaskExplorer.xcodeproj/project.xcworkspace/xcuserdata/patrickw.xcuserdatad/UserInterfaceState.xcuserstate b/TaskExplorer.xcodeproj/project.xcworkspace/xcuserdata/patrickw.xcuserdatad/UserInterfaceState.xcuserstate index fba96b5d16e1dc38753934069f87c12318b971f1..ce4eb5843ec6692b34e012635dd39b88068d5c88 100644 GIT binary patch literal 52165 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 literal 139717 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 diff --git a/TaskExplorer.xcodeproj/xcuserdata/patrickw.xcuserdatad/xcschemes/TaskExplorer.xcscheme b/TaskExplorer.xcodeproj/xcuserdata/patrickw.xcuserdatad/xcschemes/TaskExplorer.xcscheme index 30281bd..db1c013 100644 --- a/TaskExplorer.xcodeproj/xcuserdata/patrickw.xcuserdatad/xcschemes/TaskExplorer.xcscheme +++ b/TaskExplorer.xcodeproj/xcuserdata/patrickw.xcuserdatad/xcschemes/TaskExplorer.xcscheme @@ -1,6 +1,6 @@ get task if(YES != self.isBottomPane) @@ -549,9 +552,17 @@ bail: goto bail; } - //open Finder - // ->will reveal binary - [[NSWorkspace sharedWorkspace] selectFile:path inFileViewerRootedAtPath:@""]; + //open item in Finder + // ->error alert shown if file open fails + if(YES != [[NSWorkspace sharedWorkspace] selectFile:path inFileViewerRootedAtPath:@""]) + { + //alloc/init alert + errorAlert = [NSAlert alertWithMessageText:[NSString stringWithFormat:@"ERROR:\nfailed to open %@", path] defaultButton:@"OK" alternateButton:nil otherButton:nil informativeTextWithFormat:@"errno value: %d", errno]; + + //show it + [errorAlert runModal]; + } + //bail bail: diff --git a/UI/FileInfoWindow.xib b/UI/FileInfoWindow.xib index 397aaef..ec4a444 100644 --- a/UI/FileInfoWindow.xib +++ b/UI/FileInfoWindow.xib @@ -1,8 +1,8 @@ - + - + diff --git a/UI/FlaggedItems.xib b/UI/FlaggedItems.xib index 6631e4b..bdd1ace 100644 --- a/UI/FlaggedItems.xib +++ b/UI/FlaggedItems.xib @@ -1,8 +1,8 @@ - - + + - + @@ -17,7 +17,7 @@ - + @@ -26,11 +26,11 @@ - + - + @@ -53,7 +53,7 @@ - + @@ -61,7 +61,7 @@ - + @@ -69,7 +69,7 @@ - + @@ -77,7 +77,7 @@ - - + @@ -103,26 +103,29 @@ - + + + + - - + @@ -134,7 +137,7 @@ - - + @@ -162,18 +165,28 @@ + + + - - + + + - + + + + - + + + + diff --git a/UI/FlatView.xib b/UI/FlatView.xib index 311662e..71f9556 100755 --- a/UI/FlatView.xib +++ b/UI/FlatView.xib @@ -1,9 +1,10 @@ - - + + - - + + + @@ -15,23 +16,23 @@ - + - + - + - + - + @@ -45,10 +46,10 @@ - + - + @@ -56,7 +57,7 @@ - + @@ -64,16 +65,19 @@ - + + + + - - - + + @@ -98,27 +102,30 @@ - - + + + + + - - - + + @@ -129,8 +136,8 @@ - - - + + @@ -157,18 +164,28 @@ - - + + + + - - + + + + + + + + - + + + @@ -176,10 +193,10 @@ - + - + @@ -189,19 +206,20 @@ + - - - + + @@ -221,18 +239,21 @@ - - + + + + + - - - + + @@ -252,8 +273,8 @@ - - - + + @@ -281,32 +302,44 @@ + + + + + + + + + - + - + + + + - - - + + @@ -332,16 +365,19 @@ - - + + + + + - - - + + @@ -368,10 +404,17 @@ + + + + + + + @@ -380,35 +423,41 @@ - + - + - - + + - - + + + + + - + + + + - - - + + @@ -435,11 +484,17 @@ + + - + + + - - + + + + @@ -457,8 +512,8 @@ - diff --git a/UI/SearchWindow.xib b/UI/SearchWindow.xib index 853e85d..b661ad8 100644 --- a/UI/SearchWindow.xib +++ b/UI/SearchWindow.xib @@ -1,8 +1,10 @@ - - + + - + + + @@ -21,14 +23,14 @@ - + - + - + @@ -55,10 +57,10 @@ - + - + @@ -66,7 +68,7 @@ - + @@ -74,7 +76,7 @@ - + @@ -82,7 +84,7 @@ - - + @@ -108,7 +110,7 @@ - + @@ -116,10 +118,10 @@ - - + @@ -139,7 +141,7 @@ - - + @@ -167,18 +169,31 @@ + + + + + + - + - + - - + + + + + + + + + @@ -186,10 +201,10 @@ - + - + @@ -197,7 +212,7 @@ - + @@ -205,7 +220,7 @@ - - + @@ -231,15 +246,15 @@ - - + + - - + @@ -267,16 +282,24 @@ - + + + + - - - + + + + + + + + @@ -284,18 +307,18 @@ - + - + - - + + - + @@ -303,7 +326,7 @@ - + @@ -311,7 +334,7 @@ - - + @@ -339,13 +362,20 @@ - + + + - - - + + + + + + + + @@ -372,7 +402,7 @@ - + @@ -383,14 +413,14 @@ - + - + - - + + - + + - + + + diff --git a/UI/TreeView.xib b/UI/TreeView.xib index 50630cc..7be5b7c 100755 --- a/UI/TreeView.xib +++ b/UI/TreeView.xib @@ -1,9 +1,8 @@ - - + + - - + @@ -15,23 +14,23 @@ - + - + - + - + - + @@ -45,10 +44,10 @@ - + - + @@ -56,7 +55,7 @@ - + @@ -64,16 +63,16 @@ - - + + - - - + + @@ -98,27 +97,30 @@ - - + + + + + - - - + + @@ -129,8 +131,8 @@ - - - + + @@ -157,18 +159,29 @@ - - + + + - + + + + + + + + + - + + + - - + + @@ -184,10 +197,9 @@ - -