Guest User

Untitled

a guest
Jul 16th, 2022
16
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. xpc_object_t getProcessExtensions(xpc_connection_t sourceConnection, const char* profileName)
  2. {
  3.     audit_token_t auditToken;
  4.     xpc_connection_get_audit_token(sourceConnection, &auditToken);
  5.     struct __SecTask* secTask = SecTaskCreateWithAuditToken(NULL, auditToken);
  6.  
  7.     NSString* sourceIdentifier = (__bridge_transfer NSString*)SecTaskCopySigningIdentifier(secTask, NULL);
  8.     NSString* nsProfileName = [NSString stringWithUTF8String:profileName];
  9.  
  10.     __block xpc_object_t extensionArray = xpc_array_create_empty();
  11.     NSString* profileRootPath = rootifyPath(@"/Library/libSandy/");
  12.     NSString* profilePath = [profileRootPath stringByAppendingPathComponent:[nsProfileName stringByAppendingPathExtension:@"plist"]];
  13.     if(![[NSFileManager defaultManager] fileExistsAtPath:profilePath]) return extensionArray;
  14.  
  15.     NSURL* profileURL = [NSURL fileURLWithPath:profilePath isDirectory:NO];
  16.     NSDictionary* profileDict;
  17.  
  18.     if(@available(iOS 11, *))
  19.     {
  20.         profileDict = [NSDictionary dictionaryWithContentsOfURL:profileURL error:nil];
  21.     }
  22.     else
  23.     {
  24.         profileDict = [NSDictionary dictionaryWithContentsOfURL:profileURL];
  25.     }
  26.  
  27.     if(!profileDict) return extensionArray;
  28.  
  29.     // Verify if allowed
  30.     NSArray* allowedProcesses = profileDict[@"allowedProcesses"];
  31.     if(![allowedProcesses isKindOfClass:NSArray.class]) return extensionArray;
  32.     BOOL allowed = [allowedProcesses containsObject:sourceIdentifier] || [allowedProcesses containsObject:@"*"];
  33.     if(!allowed) return extensionArray;
  34.    
  35.     // Load extensions
  36.     NSArray* containedExtensions = profileDict[@"extensions"];
  37.     if(![containedExtensions isKindOfClass:NSArray.class]) return extensionArray;
  38.     if(!containedExtensions || containedExtensions.count == 0) return extensionArray;
  39.  
  40.     __block int extensionArrayI = 0;
  41.  
  42.     [containedExtensions enumerateObjectsUsingBlock:^(NSDictionary* extensionDict, NSUInteger idx, BOOL *stop)
  43.     {
  44.         if(![extensionDict isKindOfClass:NSDictionary.class]) return;
  45.         NSString* extensionToken = issueExtension(extensionDict, auditToken);
  46.         if(!extensionToken) return;
  47.         xpc_array_set_string(extensionArray, extensionArrayI++, extensionToken.UTF8String);
  48.     }];
  49.  
  50.     return extensionArray;
  51. }
Advertisement
Add Comment
Please, Sign In to add comment