Kaynağa Gözat

oops was in the wrong folder, heres some more changes

Kevin Bradley 8 yıl önce
ebeveyn
işleme
b5fcf401fd

+ 1 - 0
Meridian/Meridian/helpers/helpers.h

@@ -41,6 +41,7 @@ char* bundled_file(const char *filename);
 char* bundle_path(void);
 char* bundle_path(void);
 int extract_bundle(const char* bundle_name, const char* directory);
 int extract_bundle(const char* bundle_name, const char* directory);
 int extract_bundle_tar(const char *bundle_name);
 int extract_bundle_tar(const char *bundle_name);
+int extract_tar(const char *file_path);
 void touch_file(char *path);
 void touch_file(char *path);
 char* concat(const char *s1, const char *s2);
 char* concat(const char *s1, const char *s2);
 void grant_csflags(pid_t pd);
 void grant_csflags(pid_t pd);

+ 41 - 0
Meridian/Meridian/helpers/helpers.m

@@ -322,6 +322,37 @@ int extract_bundle(const char* bundle_name, const char* directory) {
     return 0;
     return 0;
 }
 }
 
 
+int extract_tar(const char *file_path) {
+    
+    if (file_exists(file_path) != 0) {
+        log_message([NSString stringWithFormat:@"Error,file was not found at path %s!",
+                      file_path]);
+        return -1;
+    }
+
+//    return execprog("/meridian/tar", (const char **)&(const char*[]) {
+//        "/meridian/tar",
+//        "--preserve-permissions",
+//        "-C",
+//        "/",
+//        "-xvf",
+//        file_path,
+//        NULL
+//    });
+    
+    return execprog("/meridian/tar", (const char **)&(const char*[]) {
+        "/meridian/tar",
+        "--preserve-permissions",
+        "--no-overwrite-dir",
+        "-C",
+        "/",
+        "-xvf",
+        file_path,
+        NULL
+    });
+    
+}
+
 int extract_bundle_tar(const char *bundle_name) {
 int extract_bundle_tar(const char *bundle_name) {
     const char *file_path = bundled_file(bundle_name);
     const char *file_path = bundled_file(bundle_name);
     
     
@@ -331,6 +362,16 @@ int extract_bundle_tar(const char *bundle_name) {
         return -1;
         return -1;
     }
     }
     
     
+//    return execprog("/meridian/tar", (const char **)&(const char*[]) {
+//        "/meridian/tar",
+//        "--preserve-permissions",
+//        "-C",
+//        "/",
+//        "-xvf",
+//        file_path,
+//        NULL
+//    });
+    
     return execprog("/meridian/tar", (const char **)&(const char*[]) {
     return execprog("/meridian/tar", (const char **)&(const char*[]) {
         "/meridian/tar",
         "/meridian/tar",
         "--preserve-permissions",
         "--preserve-permissions",

+ 3 - 1
Meridian/Meridian/jailbreak.h

@@ -17,12 +17,14 @@ int patchContainermanagerd(void);
 int remountRootFs(void);
 int remountRootFs(void);
 int extractMeridianData(void);
 int extractMeridianData(void);
 void setUpSymLinks(void);
 void setUpSymLinks(void);
+void extractGz(const char *from, const char *to);
 int extractBootstrap(int *exitCode);
 int extractBootstrap(int *exitCode);
 int defecateAmfi(void);
 int defecateAmfi(void);
 int launchDropbear(void);
 int launchDropbear(void);
 void setUpSubstitute(void);
 void setUpSubstitute(void);
 int startJailbreakd(void);
 int startJailbreakd(void);
+int start_jailbreakd(void); //electra version
 int loadLaunchDaemons(void);
 int loadLaunchDaemons(void);
 void enableHiddenApps(void);
 void enableHiddenApps(void);
-
+void fixPerms(void);
 #endif /* jailbreak_h */
 #endif /* jailbreak_h */

+ 207 - 6
Meridian/Meridian/jailbreak.m

@@ -20,6 +20,8 @@
 #include <mach/mach_types.h>
 #include <mach/mach_types.h>
 #include <sys/stat.h>
 #include <sys/stat.h>
 #import <Foundation/Foundation.h>
 #import <Foundation/Foundation.h>
+#import "NSData+GZip.h"
+#include <sys/spawn.h>
 
 
 NSFileManager *fileMgr;
 NSFileManager *fileMgr;
 
 
@@ -83,6 +85,32 @@ int makeShitHappen(ViewController *view) {
         [fileMgr removeItemAtPath:@"/meridian" error:nil];
         [fileMgr removeItemAtPath:@"/meridian" error:nil];
     }
     }
     
     
+    
+    if (file_exists("/meridian/.bootstrap") == 0) {
+        
+        unlink("/meridian/.bootstrap");
+        
+    }
+    
+    if (file_exists("/Library/LaunchDaemons/._dropbear.plist") == 0) {
+        
+        unlink("/Library/LaunchDaemons/._dropbear.plist");
+        
+    }
+    
+    
+    
+    
+//    if (file_exists("/usr/lib/TweakInject.dylib") == 0) {
+//        ret = unlink("/usr/lib/TweakInject.dylib");
+//        if (ret != 0) {
+//            [view writeText:@"failed!"];
+//            [view writeTextPlain:@"removing /usr/lib/TweakInject.dylib failed with error %d: %s", errno, strerror(errno)];
+//            return 1;
+//        }
+//        
+//    }
+    
     if (file_exists("/meridian") != 0) {
     if (file_exists("/meridian") != 0) {
         ret = mkdir("/meridian", 0755);
         ret = mkdir("/meridian", 0755);
         if (ret != 0) {
         if (ret != 0) {
@@ -177,7 +205,7 @@ int makeShitHappen(ViewController *view) {
     touch_file("/.cydia_no_stash");
     touch_file("/.cydia_no_stash");
     
     
     // symlink /Library/MobileSubstrate/DynamicLibraries -> /usr/lib/tweaks
     // symlink /Library/MobileSubstrate/DynamicLibraries -> /usr/lib/tweaks
-    setUpSymLinks();
+    //setUpSymLinks();
     
     
     // remove Substrate's SafeMode (MobileSafety) if it's installed
     // remove Substrate's SafeMode (MobileSafety) if it's installed
     // removing from dpkg will be handled by Cydia conflicts later
     // removing from dpkg will be handled by Cydia conflicts later
@@ -222,9 +250,15 @@ int makeShitHappen(ViewController *view) {
             return 1;
             return 1;
         }
         }
         
         
+        
+        
         [view writeText:@"done!"];
         [view writeText:@"done!"];
     }
     }
     
     
+    //unlink("/usr/lib/libjailbreak.dylib");
+    //cp("/usr/lib/libjailbreak.dylib","/electra/libjailbreak.dylib");
+    
+    /*
     // add the midnight repo 
     // add the midnight repo 
     if (file_exists("/etc/apt/sources.list.d/meridian.list") != 0) {
     if (file_exists("/etc/apt/sources.list.d/meridian.list") != 0) {
         FILE *fd = fopen("/etc/apt/sources.list.d/meridian.list", "w+");
         FILE *fd = fopen("/etc/apt/sources.list.d/meridian.list", "w+");
@@ -232,6 +266,19 @@ int makeShitHappen(ViewController *view) {
         fwrite(text, strlen(text) + 1, 1, fd);
         fwrite(text, strlen(text) + 1, 1, fd);
         fclose(fd);
         fclose(fd);
     }
     }
+    */
+    
+    pid_t pd;
+    posix_spawn(&pd, "/bin/bash", NULL, NULL, (char **)&(const char*[]){ "bash", "/usr/libexec/nito/firmware.sh", NULL }, NULL);
+    waitpid(pd, NULL, 0);
+    
+    posix_spawn(&pd, "/bin/bash", NULL, NULL, (char **)&(const char*[]){ "bash", "/Library/dpkg/info/openssh.postinst", NULL }, NULL);
+    waitpid(pd, NULL, 0);
+    
+//    posix_spawn(&pd, "/bin/launchctl", NULL, NULL, (char **)&(const char*[]){ "launchctl", "load", "/Library/LaunchDaemons/com.openssh.sshd.plist", NULL }, NULL);
+//    waitpid(pd, NULL, 0);
+    
+    //fixPerms();
     
     
     // launch dropbear
     // launch dropbear
     [view writeText:@"launching dropbear..."];
     [view writeText:@"launching dropbear..."];
@@ -241,12 +288,39 @@ int makeShitHappen(ViewController *view) {
         [view writeTextPlain:@"exit code: %d", ret];
         [view writeTextPlain:@"exit code: %d", ret];
         return 1;
         return 1;
     }
     }
+     
+    
+    //launch openssh
+    
+    [view writeText:@"Launching openssh..."];
+    ret = start_launchdaemon("/Library/LaunchDaemons/com.openssh.sshd.plist");
+    if (ret != 0) {
+        [view writeText:@"failed!"];
+        [view writeTextPlain:@"exit code: %d", ret];
+        //return 1;
+    }
+    
     [view writeText:@"done!"];
     [view writeText:@"done!"];
     
     
     // link substitute stuff
     // link substitute stuff
-    setUpSubstitute();
+    //setUpSubstitute();
     
     
     // start jailbreakd
     // start jailbreakd
+    
+    ret = inject_trust("/electra/inject_criticald");
+    //ret = inject_trust("/electra/amfid_payload.dylib");
+    //ret = inject_trust("/electra/pspawn_payload.dylib");
+    //ret = inject_trust("/electra/libjailbreak.dylib");
+    /*
+     "/electra/inject_criticald",
+     "/electra/amfid_payload.dylib",
+     "/electra/pspawn_payload.dylib",
+     "/electra/libjailbreak.dylib"
+     
+     */
+    //if (ret != 0) return -1;
+    
+    
     [view writeText:@"starting jailbreakd..."];
     [view writeText:@"starting jailbreakd..."];
     ret = startJailbreakd();
     ret = startJailbreakd();
     if (ret != 0) {
     if (ret != 0) {
@@ -281,6 +355,27 @@ int makeShitHappen(ViewController *view) {
     return 0;
     return 0;
 }
 }
 
 
+void fixPerms() {
+    
+    int rv = execprog("/usr/bin/chmod", (const char **)&(const char*[]) {
+        "/usr/bin/chmod",
+        "-R",
+        "0700",
+        "/private/var/root/.ssh",
+        NULL
+    });
+    
+    rv = execprog("/usr/bin/chmod", (const char **)&(const char*[]) {
+        "/usr/bin/chmod",
+        "-R",
+        "0700",
+        "/private/etc/dropbear",
+        NULL
+    });
+    
+    
+}
+
 kern_return_t callback(task_t kern_task, kptr_t kbase, void *cb_data) {
 kern_return_t callback(task_t kern_task, kptr_t kbase, void *cb_data) {
     tfp0 = kern_task;
     tfp0 = kern_task;
     kernel_base = kbase;
     kernel_base = kbase;
@@ -339,7 +434,9 @@ int remountRootFs() {
 }
 }
 
 
 int extractMeridianData() {
 int extractMeridianData() {
-    return extract_bundle_tar("meridian-bootstrap.tar");
+    int rv = extract_bundle_tar("meridian-bootstrap.tar");
+    //rv = extract_bundle_tar("basebinaries.tar");
+    return rv;
 }
 }
 
 
 void setUpSymLinks() {
 void setUpSymLinks() {
@@ -382,7 +479,38 @@ void setUpSymLinks() {
     symlink("/usr/lib/tweaks", "/Library/MobileSubstrate/DynamicLibraries");
     symlink("/usr/lib/tweaks", "/Library/MobileSubstrate/DynamicLibraries");
 }
 }
 
 
+void extractGz(const char *from, const char *to) {
+    NSData *gz = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@(from) ofType:@"gz"]];
+    NSData *extracted = [gz gunzippedData];
+    [extracted writeToFile:@(to) atomically:YES];
+}
+
 int extractBootstrap(int *exitCode) {
 int extractBootstrap(int *exitCode) {
+    
+    int rv;
+    
+    unlink("/meridian/bootstrap.tar");
+    
+    extractGz("bootstrap.tar", "/meridian/bootstrap.tar");
+    
+    rv = extract_tar("/meridian/bootstrap.tar");
+    if (rv != 0) {
+        *exitCode = rv;
+        return 1; //FIXME: make sure this is working later.
+    }
+    
+//    rv = uicache();
+//    if (rv != 0) {
+//        *exitCode = rv;
+//        return 6;
+//    }
+    
+    touch_file("/meridian/.bootstrap");
+    
+    return 0;
+}
+
+int old_extractBootstrap(int *exitCode) {
     int rv;
     int rv;
     
     
     // extract system-base.tar
     // extract system-base.tar
@@ -421,7 +549,7 @@ int extractBootstrap(int *exitCode) {
         return 5;
         return 5;
     }
     }
     
     
-    enableHiddenApps();
+    //enableHiddenApps();
     
     
     touch_file("/meridian/.bootstrap");
     touch_file("/meridian/.bootstrap");
     
     
@@ -434,6 +562,34 @@ int extractBootstrap(int *exitCode) {
     return 0;
     return 0;
 }
 }
 
 
+int newdefecateAmfi() {
+    
+#define BinaryLocation "/electra/inject_criticald"
+    
+    pid_t amfid_pid = get_pid_for_name("amfid");
+    if (amfid_pid == 0) {
+        return -2;
+    }
+    
+    pid_t pd;
+    int rv = 0;
+    
+    const char* args_amfid[] = {BinaryLocation, itoa(amfid_pid), "/electra/amfid_payload.dylib", NULL};
+    rv = posix_spawn(&pd, BinaryLocation, NULL, NULL, (char **)&args_amfid, NULL);
+    waitpid(pd, NULL, 0);
+    
+    unlink("/.amfid_success");
+    const char *args_helloworld[] = {"helloworld", NULL};
+    rv = posix_spawn(&pd, "/electra/helloworld", NULL, NULL, (char **)&args_helloworld, NULL);
+    waitpid(pd, NULL, 0);
+    
+    if (!file_exists("/.amfid_success")){
+        return -3;
+    }
+    unlink("/.amfid_success");
+    return 0;
+}
+
 int defecateAmfi() {
 int defecateAmfi() {
     // write kslide to file
     // write kslide to file
     unlink("/meridian/kernel_slide");
     unlink("/meridian/kernel_slide");
@@ -441,10 +597,15 @@ int defecateAmfi() {
     fprintf(fd, "%016llx", kslide);
     fprintf(fd, "%016llx", kslide);
     fclose(fd);
     fclose(fd);
     
     
+    int ret = inject_trust("/meridian/inject_criticald");
+    if (ret != 0) return -1;
+    
+    
     // trust our payload
     // trust our payload
-    int ret = inject_trust("/meridian/amfid_payload.dylib");
+     ret = inject_trust("/meridian/amfid_payload.dylib");
     if (ret != 0) return -1;
     if (ret != 0) return -1;
     
     
+   
     unlink("/var/tmp/amfid_payload.alive");
     unlink("/var/tmp/amfid_payload.alive");
     
     
     pid_t pid = get_pid_for_name("amfid");
     pid_t pid = get_pid_for_name("amfid");
@@ -471,7 +632,7 @@ int defecateAmfi() {
 }
 }
 
 
 int launchDropbear() {
 int launchDropbear() {
-    return start_launchdaemon("/meridian/dropbear/dropbear.plist");
+    return start_launchdaemon("/Library/LaunchDaemons/dropbear.plist");
 }
 }
 
 
 void setUpSubstitute() {
 void setUpSubstitute() {
@@ -484,6 +645,35 @@ void setUpSubstitute() {
     symlink("/usr/lib/libsubstrate.dylib", "/Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate");
     symlink("/usr/lib/libsubstrate.dylib", "/Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate");
 }
 }
 
 
+int start_jailbreakd() {
+    unlink("/var/tmp/jailbreakd.pid");
+    unlink("/var/run/jailbreakd.pid");
+    unlink("/var/log/jailbreakd-stderr.log");
+    unlink("/var/log/jailbreakd-stdout.log");
+    
+    NSData *blob = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"jailbreakd" ofType:@"plist"]];
+    NSMutableDictionary *job = [NSPropertyListSerialization propertyListWithData:blob options:NSPropertyListMutableContainers format:nil error:nil];
+    
+    job[@"EnvironmentVariables"][@"KernelBase"] = [NSString stringWithFormat:@"0x%16llx", kernel_base];
+    [job writeToFile:@"/Library/LaunchDaemons/jailbreakd.plist" atomically:YES];
+    chmod("/Library/LaunchDaemons/jailbreakd.plist", 0644);
+    chown("/Library/LaunchDaemons/jailbreakd.plist", 0, 0);
+    
+    pid_t pid = 0;
+    
+    //int rv = run("/bin/launchctl load /Library/LaunchDaemons/jailbreakd.plist");
+    int rv = start_launchdaemon("/Library/LaunchDaemons/jailbreakd.plist");
+    if (rv == -1) {
+        return -1;
+    }
+    
+    int ex = 0;
+    waitpid(pid, &ex, 0);
+    NSLog(@"The dragon becomes me!");
+    NSLog(@"once it is drawn, it cannot be sheathed without causing death");
+    return 0;
+}
+
 int startJailbreakd() {
 int startJailbreakd() {
     unlink("/var/tmp/jailbreakd.pid");
     unlink("/var/tmp/jailbreakd.pid");
     
     
@@ -514,6 +704,7 @@ int startJailbreakd() {
     
     
     usleep(100000);
     usleep(100000);
     
     
+    
     // tell jailbreakd to platformize launchd
     // tell jailbreakd to platformize launchd
     // this adds skip-lib-val to MACF slot and allows us
     // this adds skip-lib-val to MACF slot and allows us
     // to inject pspawn without it being in trust cache
     // to inject pspawn without it being in trust cache
@@ -523,8 +714,18 @@ int startJailbreakd() {
     
     
     // inject pspawn_hook.dylib to launchd
     // inject pspawn_hook.dylib to launchd
     rv = inject_library(1, "/usr/lib/pspawn_hook.dylib");
     rv = inject_library(1, "/usr/lib/pspawn_hook.dylib");
+    //rv = inject_library(1, "/meridian/pspawn_payload.dylib");
     if (rv != 0) return 3;
     if (rv != 0) return 3;
     
     
+    /*
+   rv = execprog("/meridian/inject_criticald", (const char **)&(const char*[]) {
+        "/meridian/inject_criticald",
+        "1",
+        "/meridian/pspawn_payload.dylib",
+        NULL
+    });
+    if (rv != 0) return 3;
+    */
     return 0;
     return 0;
 }
 }
 
 

+ 1 - 1
Meridian/Meridian/views/ViewController.m

@@ -99,7 +99,7 @@ bool jailbreak_has_run = false;
                 [self.goButton setAlpha:0.6];
                 [self.goButton setAlpha:0.6];
             });
             });
             
             
-            sleep(1);
+           // sleep(1);
         }
         }
         
         
         dispatch_async(dispatch_get_main_queue(), ^{
         dispatch_async(dispatch_get_main_queue(), ^{

+ 22 - 2
Meridian/meridian.xcodeproj/project.pbxproj

@@ -10,12 +10,16 @@
 		320AFA8D20E215AD00859485 /* cydia-base.tar in Resources */ = {isa = PBXBuildFile; fileRef = B57A06E6202CEDF500ACDB9D /* cydia-base.tar */; };
 		320AFA8D20E215AD00859485 /* cydia-base.tar in Resources */ = {isa = PBXBuildFile; fileRef = B57A06E6202CEDF500ACDB9D /* cydia-base.tar */; };
 		320AFA8E20E215AD00859485 /* dpkgdb-base.tar in Resources */ = {isa = PBXBuildFile; fileRef = B537019A202EB4BF004E5E5C /* dpkgdb-base.tar */; };
 		320AFA8E20E215AD00859485 /* dpkgdb-base.tar in Resources */ = {isa = PBXBuildFile; fileRef = B537019A202EB4BF004E5E5C /* dpkgdb-base.tar */; };
 		320AFA8F20E215AD00859485 /* installer-base.tar in Resources */ = {isa = PBXBuildFile; fileRef = B5370198202EABFF004E5E5C /* installer-base.tar */; };
 		320AFA8F20E215AD00859485 /* installer-base.tar in Resources */ = {isa = PBXBuildFile; fileRef = B5370198202EABFF004E5E5C /* installer-base.tar */; };
-		320AFA9020E215AD00859485 /* meridian-bootstrap.tar in Resources */ = {isa = PBXBuildFile; fileRef = B5A4EA94205F14CD00B32F89 /* meridian-bootstrap.tar */; };
 		320AFA9120E215AD00859485 /* optional-base.tar in Resources */ = {isa = PBXBuildFile; fileRef = B57A06E7202CEDF500ACDB9D /* optional-base.tar */; };
 		320AFA9120E215AD00859485 /* optional-base.tar in Resources */ = {isa = PBXBuildFile; fileRef = B57A06E7202CEDF500ACDB9D /* optional-base.tar */; };
 		320AFA9220E215AD00859485 /* system-base.tar in Resources */ = {isa = PBXBuildFile; fileRef = B57A06E8202CEDF500ACDB9D /* system-base.tar */; };
 		320AFA9220E215AD00859485 /* system-base.tar in Resources */ = {isa = PBXBuildFile; fileRef = B57A06E8202CEDF500ACDB9D /* system-base.tar */; };
 		320AFA9320E215AD00859485 /* tar.tar in Resources */ = {isa = PBXBuildFile; fileRef = B57A06EE202CF4F300ACDB9D /* tar.tar */; };
 		320AFA9320E215AD00859485 /* tar.tar in Resources */ = {isa = PBXBuildFile; fileRef = B57A06EE202CF4F300ACDB9D /* tar.tar */; };
 		320AFA9420E215C100859485 /* build_time in Resources */ = {isa = PBXBuildFile; fileRef = B5B9E03A2060280400FEA273 /* build_time */; };
 		320AFA9420E215C100859485 /* build_time in Resources */ = {isa = PBXBuildFile; fileRef = B5B9E03A2060280400FEA273 /* build_time */; };
 		320AFA9720E21D0A00859485 /* UIColor+Additions.m in Sources */ = {isa = PBXBuildFile; fileRef = 320AFA9520E21D0A00859485 /* UIColor+Additions.m */; };
 		320AFA9720E21D0A00859485 /* UIColor+Additions.m in Sources */ = {isa = PBXBuildFile; fileRef = 320AFA9520E21D0A00859485 /* UIColor+Additions.m */; };
+		320AFA9A20E34FD500859485 /* NSData+GZip.m in Sources */ = {isa = PBXBuildFile; fileRef = 320AFA9920E34FD500859485 /* NSData+GZip.m */; };
+		320AFA9C20E3514D00859485 /* bootstrap.tar.gz in Resources */ = {isa = PBXBuildFile; fileRef = 320AFA9B20E3514900859485 /* bootstrap.tar.gz */; };
+		320AFA9E20E35D5100859485 /* meridian-bootstrap.tar in Resources */ = {isa = PBXBuildFile; fileRef = 320AFA9D20E35D4200859485 /* meridian-bootstrap.tar */; };
+		3249301C20E41D5400E99767 /* jailbreakd.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3249301A20E41CD300E99767 /* jailbreakd.plist */; };
+		3249301D20E41D5600E99767 /* basebinaries.tar in Resources */ = {isa = PBXBuildFile; fileRef = 3249301B20E41D5200E99767 /* basebinaries.tar */; };
 		3252638720E0B140003BD42A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 3252638620E0B140003BD42A /* AppDelegate.m */; };
 		3252638720E0B140003BD42A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 3252638620E0B140003BD42A /* AppDelegate.m */; };
 		3252638A20E0B140003BD42A /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3252638920E0B140003BD42A /* ViewController.m */; };
 		3252638A20E0B140003BD42A /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3252638920E0B140003BD42A /* ViewController.m */; };
 		3252638D20E0B140003BD42A /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3252638B20E0B140003BD42A /* Main.storyboard */; };
 		3252638D20E0B140003BD42A /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3252638B20E0B140003BD42A /* Main.storyboard */; };
@@ -111,6 +115,12 @@
 /* Begin PBXFileReference section */
 /* Begin PBXFileReference section */
 		320AFA9520E21D0A00859485 /* UIColor+Additions.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIColor+Additions.m"; sourceTree = "<group>"; };
 		320AFA9520E21D0A00859485 /* UIColor+Additions.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIColor+Additions.m"; sourceTree = "<group>"; };
 		320AFA9620E21D0A00859485 /* UIColor+Additions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIColor+Additions.h"; sourceTree = "<group>"; };
 		320AFA9620E21D0A00859485 /* UIColor+Additions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIColor+Additions.h"; sourceTree = "<group>"; };
+		320AFA9820E34FD400859485 /* NSData+GZip.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSData+GZip.h"; sourceTree = "<group>"; };
+		320AFA9920E34FD500859485 /* NSData+GZip.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSData+GZip.m"; sourceTree = "<group>"; };
+		320AFA9B20E3514900859485 /* bootstrap.tar.gz */ = {isa = PBXFileReference; lastKnownFileType = archive.gzip; path = bootstrap.tar.gz; sourceTree = "<group>"; };
+		320AFA9D20E35D4200859485 /* meridian-bootstrap.tar */ = {isa = PBXFileReference; lastKnownFileType = archive.tar; path = "meridian-bootstrap.tar"; sourceTree = "<group>"; };
+		3249301A20E41CD300E99767 /* jailbreakd.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = jailbreakd.plist; sourceTree = "<group>"; };
+		3249301B20E41D5200E99767 /* basebinaries.tar */ = {isa = PBXFileReference; lastKnownFileType = archive.tar; path = basebinaries.tar; sourceTree = "<group>"; };
 		3252638320E0B140003BD42A /* meridianTV.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = meridianTV.app; sourceTree = BUILT_PRODUCTS_DIR; };
 		3252638320E0B140003BD42A /* meridianTV.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = meridianTV.app; sourceTree = BUILT_PRODUCTS_DIR; };
 		3252638520E0B140003BD42A /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
 		3252638520E0B140003BD42A /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
 		3252638620E0B140003BD42A /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
 		3252638620E0B140003BD42A /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
@@ -247,6 +257,12 @@
 		3252638420E0B140003BD42A /* meridianTV */ = {
 		3252638420E0B140003BD42A /* meridianTV */ = {
 			isa = PBXGroup;
 			isa = PBXGroup;
 			children = (
 			children = (
+				3249301B20E41D5200E99767 /* basebinaries.tar */,
+				3249301A20E41CD300E99767 /* jailbreakd.plist */,
+				320AFA9D20E35D4200859485 /* meridian-bootstrap.tar */,
+				320AFA9B20E3514900859485 /* bootstrap.tar.gz */,
+				320AFA9820E34FD400859485 /* NSData+GZip.h */,
+				320AFA9920E34FD500859485 /* NSData+GZip.m */,
 				320AFA9620E21D0A00859485 /* UIColor+Additions.h */,
 				320AFA9620E21D0A00859485 /* UIColor+Additions.h */,
 				320AFA9520E21D0A00859485 /* UIColor+Additions.m */,
 				320AFA9520E21D0A00859485 /* UIColor+Additions.m */,
 				325263CA20E0C8FA003BD42A /* libs */,
 				325263CA20E0C8FA003BD42A /* libs */,
@@ -593,7 +609,9 @@
 			buildActionMask = 2147483647;
 			buildActionMask = 2147483647;
 			files = (
 			files = (
 				320AFA8F20E215AD00859485 /* installer-base.tar in Resources */,
 				320AFA8F20E215AD00859485 /* installer-base.tar in Resources */,
+				320AFA9C20E3514D00859485 /* bootstrap.tar.gz in Resources */,
 				320AFA9220E215AD00859485 /* system-base.tar in Resources */,
 				320AFA9220E215AD00859485 /* system-base.tar in Resources */,
+				3249301C20E41D5400E99767 /* jailbreakd.plist in Resources */,
 				320AFA9420E215C100859485 /* build_time in Resources */,
 				320AFA9420E215C100859485 /* build_time in Resources */,
 				320AFA8E20E215AD00859485 /* dpkgdb-base.tar in Resources */,
 				320AFA8E20E215AD00859485 /* dpkgdb-base.tar in Resources */,
 				320AFA9320E215AD00859485 /* tar.tar in Resources */,
 				320AFA9320E215AD00859485 /* tar.tar in Resources */,
@@ -601,7 +619,8 @@
 				320AFA8D20E215AD00859485 /* cydia-base.tar in Resources */,
 				320AFA8D20E215AD00859485 /* cydia-base.tar in Resources */,
 				3252638F20E0B141003BD42A /* Assets.xcassets in Resources */,
 				3252638F20E0B141003BD42A /* Assets.xcassets in Resources */,
 				3252638D20E0B140003BD42A /* Main.storyboard in Resources */,
 				3252638D20E0B140003BD42A /* Main.storyboard in Resources */,
-				320AFA9020E215AD00859485 /* meridian-bootstrap.tar in Resources */,
+				320AFA9E20E35D5100859485 /* meridian-bootstrap.tar in Resources */,
+				3249301D20E41D5600E99767 /* basebinaries.tar in Resources */,
 			);
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			runOnlyForDeploymentPostprocessing = 0;
 		};
 		};
@@ -666,6 +685,7 @@
 				3252639720E0B1B9003BD42A /* offsetdump.m in Sources */,
 				3252639720E0B1B9003BD42A /* offsetdump.m in Sources */,
 				325263AD20E0B3E8003BD42A /* NSLayoutConstraint+PureLayout.m in Sources */,
 				325263AD20E0B3E8003BD42A /* NSLayoutConstraint+PureLayout.m in Sources */,
 				3252638A20E0B140003BD42A /* ViewController.m in Sources */,
 				3252638A20E0B140003BD42A /* ViewController.m in Sources */,
+				320AFA9A20E34FD500859485 /* NSData+GZip.m in Sources */,
 				3252639E20E0B1D3003BD42A /* jailbreak.m in Sources */,
 				3252639E20E0B1D3003BD42A /* jailbreak.m in Sources */,
 				320AFA9720E21D0A00859485 /* UIColor+Additions.m in Sources */,
 				320AFA9720E21D0A00859485 /* UIColor+Additions.m in Sources */,
 				325263AC20E0B3E6003BD42A /* NSArray+PureLayout.m in Sources */,
 				325263AC20E0B3E6003BD42A /* NSArray+PureLayout.m in Sources */,

BIN
Meridian/meridian.xcodeproj/project.xcworkspace/xcuserdata/kevinbradley.xcuserdatad/UserInterfaceState.xcuserstate


+ 18 - 0
Meridian/meridian.xcodeproj/xcuserdata/kevinbradley.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -2,4 +2,22 @@
 <Bucket
 <Bucket
    type = "1"
    type = "1"
    version = "2.0">
    version = "2.0">
+   <Breakpoints>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "Meridian/jailbreak.m"
+            timestampString = "551927160.3449529"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "40"
+            endingLineNumber = "40"
+            landmarkName = "makeShitHappen"
+            landmarkType = "9">
+         </BreakpointContent>
+      </BreakpointProxy>
+   </Breakpoints>
 </Bucket>
 </Bucket>

+ 4 - 4
Meridian/meridian.xcodeproj/xcuserdata/kevinbradley.xcuserdatad/xcschemes/xcschememanagement.plist

@@ -7,17 +7,17 @@
 		<key>Meridian.xcscheme</key>
 		<key>Meridian.xcscheme</key>
 		<dict>
 		<dict>
 			<key>orderHint</key>
 			<key>orderHint</key>
-			<integer>1</integer>
+			<integer>0</integer>
 		</dict>
 		</dict>
 		<key>amfid.xcscheme</key>
 		<key>amfid.xcscheme</key>
 		<dict>
 		<dict>
 			<key>orderHint</key>
 			<key>orderHint</key>
-			<integer>0</integer>
+			<integer>1</integer>
 		</dict>
 		</dict>
 		<key>jailbreakd.xcscheme</key>
 		<key>jailbreakd.xcscheme</key>
 		<dict>
 		<dict>
 			<key>orderHint</key>
 			<key>orderHint</key>
-			<integer>2</integer>
+			<integer>3</integer>
 		</dict>
 		</dict>
 		<key>meridianTV.xcscheme</key>
 		<key>meridianTV.xcscheme</key>
 		<dict>
 		<dict>
@@ -27,7 +27,7 @@
 		<key>pspawn_hook.xcscheme</key>
 		<key>pspawn_hook.xcscheme</key>
 		<dict>
 		<dict>
 			<key>orderHint</key>
 			<key>orderHint</key>
-			<integer>3</integer>
+			<integer>2</integer>
 		</dict>
 		</dict>
 	</dict>
 	</dict>
 </dict>
 </dict>