+#define INSTALLD "/usr/libexec/installd"
+
+static void *(*$memmem)(const void *, size_t, const void *, size_t);
+
+static bool PatchInstall() {
+ int fd(open(INSTALLD, O_RDWR));
+ if (fd == -1)
+ return false;
+
+ struct stat stat;
+ if (fstat(fd, &stat) == -1) {
+ close(fd);
+ return false;
+ }
+
+ size_t size(stat.st_size);
+ void *data(mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0));
+ close(fd);
+ if (data == MAP_FAILED)
+ return false;
+
+ bool changed(false);
+ for (;;) {
+ void *name($memmem(data, size, "__restrict", 10));
+ if (name == NULL)
+ break;
+ else {
+ memcpy(name, "__uicache_", 10);
+ changed = true;
+ }
+ }
+
+ munmap(data, size);
+
+ if (changed) {
+ system("ldid -s "INSTALLD"");
+ system("cp -af "INSTALLD" "INSTALLD"_");
+ system("mv -f "INSTALLD"_ "INSTALLD"");
+ }
+
+ return true;
+}
+
+#define SubstrateLaunchDaemons_ "/Library/LaunchDaemons"
+#define SubstrateVariable_ "DYLD_INSERT_LIBRARIES"
+#define SubstrateLibrary_ "/usr/lib/libuicache.dylib"
+
+static bool HookInstall() {
+ NSString *file([NSString stringWithFormat:@"%@/%s.plist", @ SubstrateLaunchDaemons_, "com.apple.mobile.installd"]);
+ if (file == nil)
+ return false;
+
+ NSMutableDictionary *root([NSMutableDictionary dictionaryWithContentsOfFile:file]);
+ if (root == nil)
+ return false;
+
+ NSMutableDictionary *environment([root objectForKey:@"EnvironmentVariables"]);
+ if (environment == nil) {
+ environment = [NSMutableDictionary dictionaryWithCapacity:1];
+ if (environment == nil)
+ return false;
+
+ [root setObject:environment forKey:@"EnvironmentVariables"];
+ }
+
+ NSString *variable([environment objectForKey:@ SubstrateVariable_]);
+ if (variable == nil || [variable length] == 0)
+ [environment setObject:@ SubstrateLibrary_ forKey:@ SubstrateVariable_];
+ else {
+ NSArray *dylibs([variable componentsSeparatedByString:@":"]);
+ if (dylibs == nil)
+ return false;
+
+ NSUInteger index([dylibs indexOfObject:@ SubstrateLibrary_]);
+ if (index != NSNotFound)
+ return false;
+
+ [environment setObject:[NSString stringWithFormat:@"%@:%@", variable, @ SubstrateLibrary_] forKey:@ SubstrateVariable_];
+ }
+
+ NSString *error;
+ NSData *data([NSPropertyListSerialization dataFromPropertyList:root format:NSPropertyListBinaryFormat_v1_0 errorDescription:&error]);
+ if (data == nil)
+ return false;
+
+ if (![data writeToFile:file atomically:YES])
+ return false;
+
+ system("launchctl unload /Library/LaunchDaemons/com.apple.mobile.installd.plist");
+ system("launchctl load /Library/LaunchDaemons/com.apple.mobile.installd.plist");
+ return true;
+}
+