diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9bea433 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ + +.DS_Store diff --git a/rootlessJB.xcodeproj/project.pbxproj b/rootlessJB.xcodeproj/project.pbxproj index dbef02f..897bb15 100644 --- a/rootlessJB.xcodeproj/project.pbxproj +++ b/rootlessJB.xcodeproj/project.pbxproj @@ -32,6 +32,7 @@ CEA5D6DE220649B700075088 /* kernel_memory.c in Sources */ = {isa = PBXBuildFile; fileRef = CEA5D6D5220649B700075088 /* kernel_memory.c */; }; CEA5D6DF220649B700075088 /* voucher_swap.c in Sources */ = {isa = PBXBuildFile; fileRef = CEA5D6D7220649B700075088 /* voucher_swap.c */; }; CEA5D6E0220649B700075088 /* kernel_slide.c in Sources */ = {isa = PBXBuildFile; fileRef = CEA5D6D8220649B700075088 /* kernel_slide.c */; }; + FE5EF0E2220A611C001C080A /* RoundedViews.m in Sources */ = {isa = PBXBuildFile; fileRef = FE5EF0E1220A611C001C080A /* RoundedViews.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -99,6 +100,8 @@ CEA5D6D7220649B700075088 /* voucher_swap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = voucher_swap.c; sourceTree = ""; }; CEA5D6D8220649B700075088 /* kernel_slide.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = kernel_slide.c; sourceTree = ""; }; CEA5D6D9220649B700075088 /* platform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = platform.h; sourceTree = ""; }; + FE5EF0E0220A611C001C080A /* RoundedViews.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RoundedViews.h; sourceTree = ""; }; + FE5EF0E1220A611C001C080A /* RoundedViews.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RoundedViews.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -176,6 +179,8 @@ 820FAA07213589AF004E38D8 /* LaunchScreen.storyboard */, 820FAA0A213589AF004E38D8 /* Info.plist */, 820FAA0B213589AF004E38D8 /* main.m */, + FE5EF0E0220A611C001C080A /* RoundedViews.h */, + FE5EF0E1220A611C001C080A /* RoundedViews.m */, ); path = rootlessJB; sourceTree = ""; @@ -391,6 +396,7 @@ 820FAA01213589AF004E38D8 /* ViewController.m in Sources */, 820FAA0C213589AF004E38D8 /* main.m in Sources */, 825D33B62136B4E9008723F8 /* payload.c in Sources */, + FE5EF0E2220A611C001C080A /* RoundedViews.m in Sources */, CEA5D6DE220649B700075088 /* kernel_memory.c in Sources */, CEA5D6DD220649B700075088 /* platform.c in Sources */, 82DAE4912208B4E7005E4572 /* insert_dylib.c in Sources */, @@ -562,7 +568,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = ""; CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = 22G2QV87A2; + DEVELOPMENT_TEAM = Y7M563JDR4; ENABLE_BITCODE = NO; INFOPLIST_FILE = rootlessJB/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; @@ -571,7 +577,7 @@ "$(PROJECT_DIR)/rootlessJB/libs", ); OTHER_LDFLAGS = "-lc++"; - PRODUCT_BUNDLE_IDENTIFIER = com.jakeashacks.rootlessJB3; + PRODUCT_BUNDLE_IDENTIFIER = fun.ignition.rootlessJB; PRODUCT_NAME = "$(TARGET_NAME)"; TARGETED_DEVICE_FAMILY = "1,2"; }; @@ -583,7 +589,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = ""; CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = 22G2QV87A2; + DEVELOPMENT_TEAM = Y7M563JDR4; ENABLE_BITCODE = NO; INFOPLIST_FILE = rootlessJB/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; @@ -592,7 +598,7 @@ "$(PROJECT_DIR)/rootlessJB/libs", ); OTHER_LDFLAGS = "-lc++"; - PRODUCT_BUNDLE_IDENTIFIER = com.jakeashacks.rootlessJB3; + PRODUCT_BUNDLE_IDENTIFIER = fun.ignition.rootlessJB; PRODUCT_NAME = "$(TARGET_NAME)"; TARGETED_DEVICE_FAMILY = "1,2"; }; diff --git a/rootlessJB.xcodeproj/project.xcworkspace/xcuserdata/josephshenton.xcuserdatad/UserInterfaceState.xcuserstate b/rootlessJB.xcodeproj/project.xcworkspace/xcuserdata/josephshenton.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000..ebeb33e Binary files /dev/null and b/rootlessJB.xcodeproj/project.xcworkspace/xcuserdata/josephshenton.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/rootlessJB.xcodeproj/xcuserdata/josephshenton.xcuserdatad/xcschemes/xcschememanagement.plist b/rootlessJB.xcodeproj/xcuserdata/josephshenton.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..239a1db --- /dev/null +++ b/rootlessJB.xcodeproj/xcuserdata/josephshenton.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + rootlessJB.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/rootlessJB/Assets.xcassets/AppIcon.appiconset/100.png b/rootlessJB/Assets.xcassets/AppIcon.appiconset/100.png new file mode 100644 index 0000000..8b860be Binary files /dev/null and b/rootlessJB/Assets.xcassets/AppIcon.appiconset/100.png differ diff --git a/rootlessJB/Assets.xcassets/AppIcon.appiconset/1024.png b/rootlessJB/Assets.xcassets/AppIcon.appiconset/1024.png new file mode 100644 index 0000000..638f748 Binary files /dev/null and b/rootlessJB/Assets.xcassets/AppIcon.appiconset/1024.png differ diff --git a/rootlessJB/Assets.xcassets/AppIcon.appiconset/114.png b/rootlessJB/Assets.xcassets/AppIcon.appiconset/114.png new file mode 100644 index 0000000..2955237 Binary files /dev/null and b/rootlessJB/Assets.xcassets/AppIcon.appiconset/114.png differ diff --git a/rootlessJB/Assets.xcassets/AppIcon.appiconset/120.png b/rootlessJB/Assets.xcassets/AppIcon.appiconset/120.png new file mode 100644 index 0000000..8fed8ff Binary files /dev/null and b/rootlessJB/Assets.xcassets/AppIcon.appiconset/120.png differ diff --git a/rootlessJB/Assets.xcassets/AppIcon.appiconset/128.png b/rootlessJB/Assets.xcassets/AppIcon.appiconset/128.png new file mode 100644 index 0000000..ddc33df Binary files /dev/null and b/rootlessJB/Assets.xcassets/AppIcon.appiconset/128.png differ diff --git a/rootlessJB/Assets.xcassets/AppIcon.appiconset/144.png b/rootlessJB/Assets.xcassets/AppIcon.appiconset/144.png new file mode 100644 index 0000000..07f682e Binary files /dev/null and b/rootlessJB/Assets.xcassets/AppIcon.appiconset/144.png differ diff --git a/rootlessJB/Assets.xcassets/AppIcon.appiconset/152.png b/rootlessJB/Assets.xcassets/AppIcon.appiconset/152.png new file mode 100644 index 0000000..dd6804f Binary files /dev/null and b/rootlessJB/Assets.xcassets/AppIcon.appiconset/152.png differ diff --git a/rootlessJB/Assets.xcassets/AppIcon.appiconset/16.png b/rootlessJB/Assets.xcassets/AppIcon.appiconset/16.png new file mode 100644 index 0000000..bf47da6 Binary files /dev/null and b/rootlessJB/Assets.xcassets/AppIcon.appiconset/16.png differ diff --git a/rootlessJB/Assets.xcassets/AppIcon.appiconset/167.png b/rootlessJB/Assets.xcassets/AppIcon.appiconset/167.png new file mode 100644 index 0000000..1fb00a3 Binary files /dev/null and b/rootlessJB/Assets.xcassets/AppIcon.appiconset/167.png differ diff --git a/rootlessJB/Assets.xcassets/AppIcon.appiconset/180.png b/rootlessJB/Assets.xcassets/AppIcon.appiconset/180.png new file mode 100644 index 0000000..68ca778 Binary files /dev/null and b/rootlessJB/Assets.xcassets/AppIcon.appiconset/180.png differ diff --git a/rootlessJB/Assets.xcassets/AppIcon.appiconset/20.png b/rootlessJB/Assets.xcassets/AppIcon.appiconset/20.png new file mode 100644 index 0000000..f077b85 Binary files /dev/null and b/rootlessJB/Assets.xcassets/AppIcon.appiconset/20.png differ diff --git a/rootlessJB/Assets.xcassets/AppIcon.appiconset/256.png b/rootlessJB/Assets.xcassets/AppIcon.appiconset/256.png new file mode 100644 index 0000000..43899a0 Binary files /dev/null and b/rootlessJB/Assets.xcassets/AppIcon.appiconset/256.png differ diff --git a/rootlessJB/Assets.xcassets/AppIcon.appiconset/29.png b/rootlessJB/Assets.xcassets/AppIcon.appiconset/29.png new file mode 100644 index 0000000..8374602 Binary files /dev/null and b/rootlessJB/Assets.xcassets/AppIcon.appiconset/29.png differ diff --git a/rootlessJB/Assets.xcassets/AppIcon.appiconset/32.png b/rootlessJB/Assets.xcassets/AppIcon.appiconset/32.png new file mode 100644 index 0000000..583f361 Binary files /dev/null and b/rootlessJB/Assets.xcassets/AppIcon.appiconset/32.png differ diff --git a/rootlessJB/Assets.xcassets/AppIcon.appiconset/40.png b/rootlessJB/Assets.xcassets/AppIcon.appiconset/40.png new file mode 100644 index 0000000..0333745 Binary files /dev/null and b/rootlessJB/Assets.xcassets/AppIcon.appiconset/40.png differ diff --git a/rootlessJB/Assets.xcassets/AppIcon.appiconset/50.png b/rootlessJB/Assets.xcassets/AppIcon.appiconset/50.png new file mode 100644 index 0000000..9589a37 Binary files /dev/null and b/rootlessJB/Assets.xcassets/AppIcon.appiconset/50.png differ diff --git a/rootlessJB/Assets.xcassets/AppIcon.appiconset/512.png b/rootlessJB/Assets.xcassets/AppIcon.appiconset/512.png new file mode 100644 index 0000000..baaf84a Binary files /dev/null and b/rootlessJB/Assets.xcassets/AppIcon.appiconset/512.png differ diff --git a/rootlessJB/Assets.xcassets/AppIcon.appiconset/57.png b/rootlessJB/Assets.xcassets/AppIcon.appiconset/57.png new file mode 100644 index 0000000..f143afb Binary files /dev/null and b/rootlessJB/Assets.xcassets/AppIcon.appiconset/57.png differ diff --git a/rootlessJB/Assets.xcassets/AppIcon.appiconset/58.png b/rootlessJB/Assets.xcassets/AppIcon.appiconset/58.png new file mode 100644 index 0000000..64932b3 Binary files /dev/null and b/rootlessJB/Assets.xcassets/AppIcon.appiconset/58.png differ diff --git a/rootlessJB/Assets.xcassets/AppIcon.appiconset/60.png b/rootlessJB/Assets.xcassets/AppIcon.appiconset/60.png new file mode 100644 index 0000000..3b6c63c Binary files /dev/null and b/rootlessJB/Assets.xcassets/AppIcon.appiconset/60.png differ diff --git a/rootlessJB/Assets.xcassets/AppIcon.appiconset/64.png b/rootlessJB/Assets.xcassets/AppIcon.appiconset/64.png new file mode 100644 index 0000000..9e7d699 Binary files /dev/null and b/rootlessJB/Assets.xcassets/AppIcon.appiconset/64.png differ diff --git a/rootlessJB/Assets.xcassets/AppIcon.appiconset/72.png b/rootlessJB/Assets.xcassets/AppIcon.appiconset/72.png new file mode 100644 index 0000000..aed4efe Binary files /dev/null and b/rootlessJB/Assets.xcassets/AppIcon.appiconset/72.png differ diff --git a/rootlessJB/Assets.xcassets/AppIcon.appiconset/76.png b/rootlessJB/Assets.xcassets/AppIcon.appiconset/76.png new file mode 100644 index 0000000..dfee8ae Binary files /dev/null and b/rootlessJB/Assets.xcassets/AppIcon.appiconset/76.png differ diff --git a/rootlessJB/Assets.xcassets/AppIcon.appiconset/80.png b/rootlessJB/Assets.xcassets/AppIcon.appiconset/80.png new file mode 100644 index 0000000..a615cbc Binary files /dev/null and b/rootlessJB/Assets.xcassets/AppIcon.appiconset/80.png differ diff --git a/rootlessJB/Assets.xcassets/AppIcon.appiconset/87.png b/rootlessJB/Assets.xcassets/AppIcon.appiconset/87.png new file mode 100644 index 0000000..dd7605d Binary files /dev/null and b/rootlessJB/Assets.xcassets/AppIcon.appiconset/87.png differ diff --git a/rootlessJB/Assets.xcassets/AppIcon.appiconset/Contents.json b/rootlessJB/Assets.xcassets/AppIcon.appiconset/Contents.json index d8db8d6..2fb0017 100644 --- a/rootlessJB/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/rootlessJB/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,93 +1,316 @@ { "images" : [ { - "idiom" : "iphone", "size" : "20x20", + "idiom" : "iphone", + "filename" : "40.png", "scale" : "2x" }, { - "idiom" : "iphone", "size" : "20x20", + "idiom" : "iphone", + "filename" : "60.png", "scale" : "3x" }, { + "size" : "29x29", "idiom" : "iphone", + "filename" : "29.png", + "scale" : "1x" + }, + { "size" : "29x29", + "idiom" : "iphone", + "filename" : "58.png", "scale" : "2x" }, { - "idiom" : "iphone", "size" : "29x29", + "idiom" : "iphone", + "filename" : "87.png", "scale" : "3x" }, { - "idiom" : "iphone", "size" : "40x40", + "idiom" : "iphone", + "filename" : "80.png", "scale" : "2x" }, { - "idiom" : "iphone", "size" : "40x40", + "idiom" : "iphone", + "filename" : "120.png", "scale" : "3x" }, { + "size" : "57x57", "idiom" : "iphone", - "size" : "60x60", + "filename" : "57.png", + "scale" : "1x" + }, + { + "size" : "57x57", + "idiom" : "iphone", + "filename" : "114.png", "scale" : "2x" }, { + "size" : "60x60", "idiom" : "iphone", + "filename" : "120.png", + "scale" : "2x" + }, + { "size" : "60x60", + "idiom" : "iphone", + "filename" : "180.png", "scale" : "3x" }, { - "idiom" : "ipad", "size" : "20x20", + "idiom" : "ipad", + "filename" : "20.png", "scale" : "1x" }, { - "idiom" : "ipad", "size" : "20x20", + "idiom" : "ipad", + "filename" : "40.png", "scale" : "2x" }, { - "idiom" : "ipad", "size" : "29x29", + "idiom" : "ipad", + "filename" : "29.png", "scale" : "1x" }, { - "idiom" : "ipad", "size" : "29x29", + "idiom" : "ipad", + "filename" : "58.png", "scale" : "2x" }, { + "size" : "40x40", "idiom" : "ipad", + "filename" : "40.png", + "scale" : "1x" + }, + { "size" : "40x40", + "idiom" : "ipad", + "filename" : "80.png", + "scale" : "2x" + }, + { + "size" : "50x50", + "idiom" : "ipad", + "filename" : "50.png", "scale" : "1x" }, { + "size" : "50x50", "idiom" : "ipad", - "size" : "40x40", + "filename" : "100.png", "scale" : "2x" }, { + "size" : "72x72", "idiom" : "ipad", - "size" : "76x76", + "filename" : "72.png", "scale" : "1x" }, { + "size" : "72x72", "idiom" : "ipad", - "size" : "76x76", + "filename" : "144.png", "scale" : "2x" }, { + "size" : "76x76", "idiom" : "ipad", + "filename" : "76.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "152.png", + "scale" : "2x" + }, + { "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "167.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "1024.png", + "scale" : "1x" + }, + { + "size" : "24x24", + "idiom" : "watch", + "filename" : "watch.png", + "scale" : "2x", + "role" : "notificationCenter", + "subtype" : "38mm" + }, + { + "size" : "27.5x27.5", + "idiom" : "watch", + "filename" : "watch.png", + "scale" : "2x", + "role" : "notificationCenter", + "subtype" : "42mm" + }, + { + "size" : "29x29", + "idiom" : "watch", + "filename" : "58.png", + "role" : "companionSettings", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "watch", + "filename" : "87.png", + "role" : "companionSettings", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "watch", + "filename" : "watch.png", + "scale" : "2x", + "role" : "appLauncher", + "subtype" : "38mm" + }, + { + "size" : "44x44", + "idiom" : "watch", + "scale" : "2x", + "role" : "appLauncher", + "subtype" : "40mm" + }, + { + "size" : "50x50", + "idiom" : "watch", + "scale" : "2x", + "role" : "appLauncher", + "subtype" : "44mm" + }, + { + "size" : "86x86", + "idiom" : "watch", + "filename" : "watch.png", + "scale" : "2x", + "role" : "quickLook", + "subtype" : "38mm" + }, + { + "size" : "98x98", + "idiom" : "watch", + "filename" : "watch.png", + "scale" : "2x", + "role" : "quickLook", + "subtype" : "42mm" + }, + { + "size" : "108x108", + "idiom" : "watch", + "scale" : "2x", + "role" : "quickLook", + "subtype" : "44mm" + }, + { + "size" : "1024x1024", + "idiom" : "watch-marketing", + "filename" : "1024.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "32.png", "scale" : "2x" }, { + "size" : "32x32", + "idiom" : "mac", + "filename" : "32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "1024.png", + "scale" : "2x" + }, + { + "size" : "44x44", + "idiom" : "watch", + "filename" : "watch.png", + "scale" : "2x", + "role" : "longLook", + "subtype" : "42mm" + }, + { + "size" : "1024x1024", "idiom" : "ios-marketing", + "filename" : "1024.png", + "unassigned" : true, + "scale" : "1x" + }, + { "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "1024.png", + "unassigned" : true, "scale" : "1x" } ], diff --git a/rootlessJB/Assets.xcassets/AppIcon.appiconset/watch.png b/rootlessJB/Assets.xcassets/AppIcon.appiconset/watch.png new file mode 100644 index 0000000..ed681a6 Binary files /dev/null and b/rootlessJB/Assets.xcassets/AppIcon.appiconset/watch.png differ diff --git a/rootlessJB/Assets.xcassets/Contents.json b/rootlessJB/Assets.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/rootlessJB/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/rootlessJB/Assets.xcassets/axi-vilcinschi-1269615-unsplash 11-12-29-872.imageset/Contents.json b/rootlessJB/Assets.xcassets/axi-vilcinschi-1269615-unsplash 11-12-29-872.imageset/Contents.json new file mode 100644 index 0000000..2a71788 --- /dev/null +++ b/rootlessJB/Assets.xcassets/axi-vilcinschi-1269615-unsplash 11-12-29-872.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "axi-vilcinschi-1269615-unsplash 11-12-29-872.jpg", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/rootlessJB/Assets.xcassets/axi-vilcinschi-1269615-unsplash 11-12-29-872.imageset/axi-vilcinschi-1269615-unsplash 11-12-29-872.jpg b/rootlessJB/Assets.xcassets/axi-vilcinschi-1269615-unsplash 11-12-29-872.imageset/axi-vilcinschi-1269615-unsplash 11-12-29-872.jpg new file mode 100644 index 0000000..03740ee Binary files /dev/null and b/rootlessJB/Assets.xcassets/axi-vilcinschi-1269615-unsplash 11-12-29-872.imageset/axi-vilcinschi-1269615-unsplash 11-12-29-872.jpg differ diff --git a/rootlessJB/Base.lproj/Main.storyboard b/rootlessJB/Base.lproj/Main.storyboard index 753869f..5471020 100644 --- a/rootlessJB/Base.lproj/Main.storyboard +++ b/rootlessJB/Base.lproj/Main.storyboard @@ -1,12 +1,11 @@ - + - - + @@ -59,7 +58,7 @@ Put together by @Jakeashacks :) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rootlessJB/Info.plist b/rootlessJB/Info.plist index 242634a..3b7824b 100644 --- a/rootlessJB/Info.plist +++ b/rootlessJB/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 3.1 + 3.2.7 CFBundleVersion 1 LSRequiresIPhoneOS @@ -28,6 +28,8 @@ armv7 + UIStatusBarStyle + UIStatusBarStyleLightContent UISupportedInterfaceOrientations UIInterfaceOrientationPortrait @@ -41,5 +43,7 @@ UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight + UIViewControllerBasedStatusBarAppearance + diff --git a/rootlessJB/RoundedViews.h b/rootlessJB/RoundedViews.h new file mode 100644 index 0000000..3d2c265 --- /dev/null +++ b/rootlessJB/RoundedViews.h @@ -0,0 +1,34 @@ +// +// RoundedViews.h +// rootlessJB +// +// Created by Joseph Shenton on 6/2/19. +// Copyright © 2019 Jake James. All rights reserved. +// + +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +IB_DESIGNABLE +@interface RoundView : UIView +@property (nonatomic) IBInspectable CGFloat *cornerRadius; +@end + +IB_DESIGNABLE +@interface RoundImageView : UIImageView +@property (nonatomic) IBInspectable CGFloat *cornerRadius; +@end + +IB_DESIGNABLE +@interface RoundVisualEffectView : UIVisualEffectView +@property (nonatomic) IBInspectable CGFloat *cornerRadius; +@end + +IB_DESIGNABLE +@interface RoundButton : UIButton +@property (nonatomic) IBInspectable CGFloat *cornerRadius; +@end + +NS_ASSUME_NONNULL_END diff --git a/rootlessJB/RoundedViews.m b/rootlessJB/RoundedViews.m new file mode 100644 index 0000000..a4c235e --- /dev/null +++ b/rootlessJB/RoundedViews.m @@ -0,0 +1,54 @@ +// +// RoundedViews.m +// rootlessJB +// +// Created by Joseph Shenton on 6/2/19. +// Copyright © 2019 Jake James. All rights reserved. +// + +#import "RoundedViews.h" + +@implementation RoundView +- (void)setCornerRadius:(CGFloat *)cornerRadius { + [self updateCornerRadius]; +} + +- (void)updateCornerRadius { + self.layer.cornerRadius = *(self.cornerRadius); +// self.layer.masksToBounds = self.rounded ? true : false; +} +@end + +@implementation RoundImageView +- (void)setCornerRadius:(CGFloat *)cornerRadius { + [self updateCornerRadius]; +} + +- (void)updateCornerRadius { + self.layer.cornerRadius = *(self.cornerRadius); + // self.layer.masksToBounds = self.rounded ? true : false; +} +@end + +@implementation RoundVisualEffectView + +- (void)setCornerRadius:(CGFloat *)cornerRadius { + [self updateCornerRadius]; +} + +- (void)updateCornerRadius { + self.layer.cornerRadius = *(self.cornerRadius); + // self.layer.masksToBounds = self.rounded ? true : false; +} +@end + +@implementation RoundButton +- (void)setCornerRadius:(CGFloat *)cornerRadius { + [self updateCornerRadius]; +} + +- (void)updateCornerRadius { + self.layer.cornerRadius = *(self.cornerRadius); + // self.layer.masksToBounds = self.rounded ? true : false; +} +@end diff --git a/rootlessJB/ViewController.h b/rootlessJB/ViewController.h index 8836e42..8c24a54 100644 --- a/rootlessJB/ViewController.h +++ b/rootlessJB/ViewController.h @@ -11,5 +11,7 @@ @interface ViewController : UIViewController + @end + diff --git a/rootlessJB/ViewController.m b/rootlessJB/ViewController.m index 8f08330..830d004 100644 --- a/rootlessJB/ViewController.m +++ b/rootlessJB/ViewController.m @@ -23,16 +23,23 @@ @interface ViewController () @property (weak, nonatomic) IBOutlet UISwitch *enableTweaks; @property (weak, nonatomic) IBOutlet UIButton *jailbreakButton; @property (weak, nonatomic) IBOutlet UISwitch *installiSuperSU; - +@property (weak, nonatomic) IBOutlet UISwitch *installFilza; +@property (weak, nonatomic) IBOutlet UISwitch *showLogs; @property (weak, nonatomic) IBOutlet UITextView *logs; + @end @implementation ViewController +int csops(pid_t pid, unsigned int ops, void * useraddr, size_t usersize); -(void)log:(NSString*)log { - self.logs.text = [NSString stringWithFormat:@"%@%@", self.logs.text, log]; + if ([_showLogs isOn]) { + self.logs.text = [NSString stringWithFormat:@"%@%@", self.logs.text, log]; + } } +#define CS_OPS_STATUS 0 +#define CS_PLATFORM_BINARY 0x4000000 #define LOG(what, ...) [self log:[NSString stringWithFormat:@what"\n", ##__VA_ARGS__]];\ printf("\t"what"\n", ##__VA_ARGS__) @@ -72,26 +79,65 @@ int system_(char *cmd) { - (void)viewDidLoad { [super viewDidLoad]; + uint32_t flags; + csops(getpid(), CS_OPS_STATUS, &flags, 0); + + if ((flags & CS_PLATFORM_BINARY)) { + [_jailbreakButton setTitle:@"Jailbroken" forState:UIControlStateNormal]; +// _jailbreakButton.titleLabel.font = [UIFont systemFontOfSize:16 weight:UIFontWeightSemibold]; +// [_jailbreakButton setUserInteractionEnabled:NO]; + [_installFilza setUserInteractionEnabled:NO]; + [_installFilza setEnabled:NO]; + [_enableTweaks setUserInteractionEnabled:NO]; + [_enableTweaks setEnabled:NO]; + [_installiSuperSU setUserInteractionEnabled:NO]; + [_installiSuperSU setEnabled:NO]; + [_showLogs setUserInteractionEnabled:NO]; + [_showLogs setEnabled:NO]; + } // Do any additional setup after loading the view, typically from a nib. } -- (IBAction)jailbrek:(id)sender { - //---- tfp0 ----// - mach_port_t taskforpidzero = MACH_PORT_NULL; - - uint64_t sb = 0; - BOOL debug = NO; // kids don't enable this - - // for messing with files - NSError *error = NULL; - NSArray *plists; - - if (debug) { - kern_return_t ret = host_get_special_port(mach_host_self(), HOST_LOCAL_NODE, 4, &taskforpidzero); - if (ret) { - printf("[-] Error using hgsp! '%s'\n", mach_error_string(ret)); - printf("[*] Using exploit!\n"); - +- (IBAction)jailbreak:(id)sender { + uint32_t flags; + csops(getpid(), CS_OPS_STATUS, &flags, 0); + + if ((flags & CS_PLATFORM_BINARY)) { + system_("/var/containers/Bundle/iosbinpack64/usr/bin/killall backboardd"); + } else { + //---- tfp0 ----// + mach_port_t taskforpidzero = MACH_PORT_NULL; + + uint64_t sb = 0; + BOOL debug = NO; // kids don't enable this + + // for messing with files + NSError *error = NULL; + NSArray *plists; + + if (debug) { + kern_return_t ret = host_get_special_port(mach_host_self(), HOST_LOCAL_NODE, 4, &taskforpidzero); + if (ret) { + printf("[-] Error using hgsp! '%s'\n", mach_error_string(ret)); + printf("[*] Using exploit!\n"); + + if (maxVersion("12.1.2")) { + taskforpidzero = voucher_swap(); + } + else { + [sender setTitle:@"Not supported!" forState:UIControlStateNormal]; + [sender setEnabled:false]; + return; + } + if (!MACH_PORT_VALID(taskforpidzero)) { + LOG("[-] Exploit failed"); + LOG("[i] Please try again"); + sleep(1); + return; + } + } + } + else { if (maxVersion("12.1.2")) { taskforpidzero = voucher_swap(); } @@ -107,370 +153,501 @@ - (IBAction)jailbrek:(id)sender { return; } } - } - else { - if (maxVersion("12.1.2")) { - taskforpidzero = voucher_swap(); - } - else { - [sender setTitle:@"Not supported!" forState:UIControlStateNormal]; - [sender setEnabled:false]; - return; - } - if (!MACH_PORT_VALID(taskforpidzero)) { - LOG("[-] Exploit failed"); - LOG("[i] Please try again"); - sleep(1); - return; - } - } - - LOG("[*] Starting fun"); - - kernel_slide_init(); - init_with_kbase(taskforpidzero, 0xfffffff007004000 + kernel_slide); - - LOG("[i] Kernel base: 0x%llx", KernelBase); - - //---- basics ----// - rootify(getpid()); // give us root - failIf(getuid(), "[-] Failed to get root"); - LOG("[i] uid: %d\n", getuid()); - - sb = unsandbox(getpid()); // escape sandbox - FILE *f = fopen("/var/mobile/.roottest", "w"); - failIf(!f, "[-] Failed to escape sandbox!"); - - LOG("[+] Escaped sandbox!\n\tWrote file %p", f); - fclose(f); - removeFile("/var/mobile/.roottest"); - - setcsflags(getpid()); // set some csflags - platformize(getpid()); // set TF_PLATFORM - - //---- host special port 4 ----// - failIf(setHSP4(), "[-] Failed to set tfp0 as hsp4!"); - if (debug) PatchHostPriv(mach_host_self()); - - //---- remount -----// - // this is against the point of this jb but if you can why not do it - - if (maxVersion("11.4.1")) { - if (remountRootFS()) LOG("[-] Failed to remount rootfs, no big deal"); - } - - //---- nvram ----// - // people say that this ain't stable - // and that ya should lock it later - // but, I haven't experienced issues - // nor so rootlessJB people - - UnlockNVRAM(); // use nvram command for nonce setting! - - //---- bootstrap ----// - if (!fileExists("/var/containers/Bundle/.installed_rootlessJB3")) { - - if (fileExists("/var/containers/Bundle/iosbinpack64")) { - - LOG("[*] Uninstalling previous build..."); - - removeFile("/var/LIB"); - removeFile("/var/ulb"); - removeFile("/var/bin"); - removeFile("/var/sbin"); - removeFile("/var/containers/Bundle/tweaksupport/Applications"); - removeFile("/var/Apps"); - removeFile("/var/profile"); - removeFile("/var/motd"); - removeFile("/var/dropbear"); - removeFile("/var/containers/Bundle/tweaksupport"); - removeFile("/var/containers/Bundle/iosbinpack64"); - removeFile("/var/containers/Bundle/dylibs"); - removeFile("/var/log/testbin.log"); - - if (fileExists("/var/log/jailbreakd-stdout.log")) removeFile("/var/log/jailbreakd-stdout.log"); - if (fileExists("/var/log/jailbreakd-stderr.log")) removeFile("/var/log/jailbreakd-stderr.log"); - } - LOG("[*] Installing bootstrap..."); + LOG("[*] Starting fun"); - chdir("/var/containers/Bundle/"); - FILE *bootstrap = fopen((char*)in_bundle("tars/iosbinpack.tar"), "r"); - untar(bootstrap, "/var/containers/Bundle/"); - fclose(bootstrap); + kernel_slide_init(); + init_with_kbase(taskforpidzero, 0xfffffff007004000 + kernel_slide); - FILE *tweaks = fopen((char*)in_bundle("tars/tweaksupport.tar"), "r"); - untar(tweaks, "/var/containers/Bundle/"); - fclose(tweaks); + LOG("[i] Kernel base: 0x%llx", KernelBase); - failIf(!fileExists("/var/containers/Bundle/tweaksupport") || !fileExists("/var/containers/Bundle/iosbinpack64"), "[-] Failed to install bootstrap"); + //---- basics ----// + rootify(getpid()); // give us root + failIf(getuid(), "[-] Failed to get root"); + LOG("[i] uid: %d\n", getuid()); - LOG("[+] Creating symlinks..."); + sb = unsandbox(getpid()); // escape sandbox + FILE *f = fopen("/var/mobile/.roottest", "w"); + failIf(!f, "[-] Failed to escape sandbox!"); - symlink("/var/containers/Bundle/tweaksupport/Library", "/var/LIB"); - symlink("/var/containers/Bundle/tweaksupport/usr/lib", "/var/ulb"); - symlink("/var/containers/Bundle/tweaksupport/Applications", "/var/Apps"); - symlink("/var/containers/Bundle/tweaksupport/bin", "/var/bin"); - symlink("/var/containers/Bundle/tweaksupport/sbin", "/var/sbin"); - symlink("/var/containers/Bundle/tweaksupport/usr/libexec", "/var/libexec"); + LOG("[+] Escaped sandbox!\n\tWrote file %p", f); + fclose(f); + removeFile("/var/mobile/.roottest"); - close(open("/var/containers/Bundle/.installed_rootlessJB3", O_CREAT)); + setcsflags(getpid()); // set some csflags + platformize(getpid()); // set TF_PLATFORM - LOG("[+] Installed bootstrap!"); - } - - //---- for jailbreakd & amfid ----// - failIf(dumpOffsetsToFile("/var/containers/Bundle/tweaksupport/offsets.data"), "[-] Failed to save offsets"); - - - //---- update jailbreakd ----// - - removeFile("/var/containers/Bundle/tweaksupport/bin/jailbreakd"); - - if (!fileExists(in_bundle("bins/jailbreakd"))) { - chdir(in_bundle("bins/")); + //---- host special port 4 ----// + failIf(setHSP4(), "[-] Failed to set tfp0 as hsp4!"); + if (debug) PatchHostPriv(mach_host_self()); - FILE *jbd = fopen(in_bundle("bins/jailbreakd.tar"), "r"); - untar(jbd, in_bundle("bins/jailbreakd")); - fclose(jbd); + //---- remount -----// + // this is against the point of this jb but if you can why not do it - removeFile(in_bundle("bins/jailbreakd.tar")); - } - - copyFile(in_bundle("bins/jailbreakd"), "/var/containers/Bundle/iosbinpack64/bin/jailbreakd"); - - //---- codesign patch ----// - - if (!fileExists(in_bundle("bins/tester"))) { - chdir(in_bundle("bins/")); + if (maxVersion("11.4.1")) { + if (remountRootFS()) LOG("[-] Failed to remount rootfs, no big deal"); + } - FILE *f1 = fopen(in_bundle("bins/tester.tar"), "r"); - untar(f1, in_bundle("bins/tester")); - fclose(f1); + //---- nvram ----// + // people say that this ain't stable + // and that ya should lock it later + // but, I haven't experienced issues + // nor so rootlessJB people - removeFile(in_bundle("bins/tester.tar")); - } - - chmod(in_bundle("bins/tester"), 0777); // give it proper permissions - - if (launch(in_bundle("bins/tester"), NULL, NULL, NULL, NULL, NULL, NULL, NULL)) { - failIf(trustbin("/var/containers/Bundle/iosbinpack64"), "[-] Failed to trust binaries!"); - failIf(trustbin("/var/containers/Bundle/tweaksupport"), "[-] Failed to trust binaries!"); - - // test - int ret = launch("/var/containers/Bundle/iosbinpack64/test", NULL, NULL, NULL, NULL, NULL, NULL, NULL); - failIf(ret, "[-] Failed to trust binaries!"); - LOG("[+] Successfully trusted binaries!"); - } - else { - LOG("[+] binaries already trusted?"); - } - - //---- let's go! ----// - - prepare_payload(); // this will chmod 777 everything - - //----- setup SSH -----// - mkdir("/var/dropbear", 0777); - removeFile("/var/profile"); - removeFile("/var/motd"); - chmod("/var/profile", 0777); - chmod("/var/motd", 0777); - - copyFile("/var/containers/Bundle/iosbinpack64/etc/profile", "/var/profile"); - copyFile("/var/containers/Bundle/iosbinpack64/etc/motd", "/var/motd"); - - // kill it if running - launch("/var/containers/Bundle/iosbinpack64/usr/bin/killall", "-SEGV", "dropbear", NULL, NULL, NULL, NULL, NULL); - failIf(launchAsPlatform("/var/containers/Bundle/iosbinpack64/usr/local/bin/dropbear", "-R", "--shell", "/var/containers/Bundle/iosbinpack64/bin/bash", "-E", "-p", "22", NULL), "[-] Failed to launch dropbear"); - - //------------- launch daeamons -------------// - //-- you can drop any daemon plist in iosbinpack64/LaunchDaemons and it will be loaded automatically --// - - plists = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:@"/var/containers/Bundle/iosbinpack64/LaunchDaemons" error:nil]; - - for (__strong NSString *file in plists) { - printf("[*] Adding permissions to plist %s\n", [file UTF8String]); + UnlockNVRAM(); // use nvram command for nonce setting! - file = [@"/var/containers/Bundle/iosbinpack64/LaunchDaemons" stringByAppendingPathComponent:file]; - - if (strstr([file UTF8String], "jailbreakd")) { - printf("[*] Found jailbreakd plist, special handling\n"); + //---- bootstrap ----// + if (!fileExists("/var/containers/Bundle/.installed_rootlessJB3")) { + + if (fileExists("/var/containers/Bundle/iosbinpack64")) { + + LOG("[*] Uninstalling previous build..."); + + removeFile("/var/LIB"); + removeFile("/var/ulb"); + removeFile("/var/bin"); + removeFile("/var/sbin"); + removeFile("/var/containers/Bundle/tweaksupport/Applications"); + removeFile("/var/Apps"); + removeFile("/var/profile"); + removeFile("/var/motd"); + removeFile("/var/dropbear"); + removeFile("/var/containers/Bundle/tweaksupport"); + removeFile("/var/containers/Bundle/iosbinpack64"); + removeFile("/var/containers/Bundle/dylibs"); + removeFile("/var/log/testbin.log"); + + if (fileExists("/var/log/jailbreakd-stdout.log")) removeFile("/var/log/jailbreakd-stdout.log"); + if (fileExists("/var/log/jailbreakd-stderr.log")) removeFile("/var/log/jailbreakd-stderr.log"); + } + + LOG("[*] Installing bootstrap..."); + + chdir("/var/containers/Bundle/"); + FILE *bootstrap = fopen((char*)in_bundle("tars/iosbinpack.tar"), "r"); + untar(bootstrap, "/var/containers/Bundle/"); + fclose(bootstrap); + + /* + + Not required, implemented into the bootstrap. + FILE *dpkg = fopen((char*)in_bundle("tars/dpkg.tar"), "r"); + untar(dpkg, "/var/containers/Bundle/iosbinpack64/usr/bin/"); + fclose(dpkg); + */ + + FILE *tweaks = fopen((char*)in_bundle("tars/tweaksupport.tar"), "r"); + untar(tweaks, "/var/containers/Bundle/"); + fclose(tweaks); + + failIf(!fileExists("/var/containers/Bundle/tweaksupport") || !fileExists("/var/containers/Bundle/iosbinpack64"), "[-] Failed to install bootstrap"); - NSMutableDictionary *job = [NSPropertyListSerialization propertyListWithData:[NSData dataWithContentsOfFile:file] options:NSPropertyListMutableContainers format:nil error:nil]; + LOG("[+] Creating symlinks..."); - job[@"EnvironmentVariables"][@"KernelBase"] = [NSString stringWithFormat:@"0x%16llx", KernelBase]; - [job writeToFile:file atomically:YES]; + symlink("/var/containers/Bundle/tweaksupport/Library", "/var/LIB"); + symlink("/var/containers/Bundle/tweaksupport/usr/lib", "/var/ulb"); + symlink("/var/containers/Bundle/tweaksupport/Applications", "/var/Apps"); + symlink("/var/containers/Bundle/tweaksupport/bin", "/var/bin"); + symlink("/var/containers/Bundle/tweaksupport/sbin", "/var/sbin"); + symlink("/var/containers/Bundle/tweaksupport/usr/libexec", "/var/libexec"); + + close(open("/var/containers/Bundle/.installed_rootlessJB3", O_CREAT)); + + LOG("[+] Installed bootstrap!"); } - chmod([file UTF8String], 0644); - chown([file UTF8String], 0, 0); - } - - // clean up - removeFile("/var/log/testbin.log"); - removeFile("/var/log/jailbreakd-stderr.log"); - removeFile("/var/log/jailbreakd-stdout.log"); - - launch("/var/containers/Bundle/iosbinpack64/bin/launchctl", "unload", "/var/containers/Bundle/iosbinpack64/LaunchDaemons", NULL, NULL, NULL, NULL, NULL); - launch("/var/containers/Bundle/iosbinpack64/bin/launchctl", "load", "/var/containers/Bundle/iosbinpack64/LaunchDaemons", NULL, NULL, NULL, NULL, NULL); - - sleep(1); - - failIf(!fileExists("/var/log/testbin.log"), "[-] Failed to load launch daemons"); - failIf(!fileExists("/var/log/jailbreakd-stdout.log"), "[-] Failed to load jailbreakd"); - - if (self.enableTweaks.isOn) { + //---- for jailbreakd & amfid ----// + failIf(dumpOffsetsToFile("/var/containers/Bundle/tweaksupport/offsets.data"), "[-] Failed to save offsets"); - //----- magic start here -----// - LOG("[*] Time for magic"); - char *xpcproxy = "/var/libexec/xpcproxy"; - char *dylib = "/var/ulb/pspawn.dylib"; + //---- update jailbreakd ----// - if (!fileExists(xpcproxy)) { - bool cp = copyFile("/usr/libexec/xpcproxy", xpcproxy); - failIf(!cp, "[-] Can't copy xpcproxy!"); - symlink("/var/containers/Bundle/iosbinpack64/pspawn.dylib", dylib); + removeFile("/var/containers/Bundle/tweaksupport/bin/jailbreakd"); + + if (!fileExists(in_bundle("bins/jailbreakd"))) { + chdir(in_bundle("bins/")); - LOG("[*] Patching xpcproxy"); + FILE *jbd = fopen(in_bundle("bins/jailbreakd.tar"), "r"); + untar(jbd, in_bundle("bins/jailbreakd")); + fclose(jbd); - const char *args[] = { "insert_dylib", "--all-yes", "--inplace", "--overwrite", dylib, xpcproxy, NULL}; - int argn = 6; + removeFile(in_bundle("bins/jailbreakd.tar")); + } + + copyFile(in_bundle("bins/jailbreakd"), "/var/containers/Bundle/iosbinpack64/bin/jailbreakd"); + + //---- codesign patch ----// + + if (!fileExists(in_bundle("bins/tester"))) { + chdir(in_bundle("bins/")); - failIf(add_dylib(argn, args), "[-] Failed to patch xpcproxy :("); + FILE *f1 = fopen(in_bundle("bins/tester.tar"), "r"); + untar(f1, in_bundle("bins/tester")); + fclose(f1); - LOG("[*] Resigning xpcproxy"); + removeFile(in_bundle("bins/tester.tar")); + } + + chmod(in_bundle("bins/tester"), 0777); // give it proper permissions + + if (launch(in_bundle("bins/tester"), NULL, NULL, NULL, NULL, NULL, NULL, NULL)) { + failIf(trustbin("/var/containers/Bundle/iosbinpack64"), "[-] Failed to trust binaries!"); + failIf(trustbin("/var/containers/Bundle/tweaksupport"), "[-] Failed to trust binaries!"); - failIf(system_("/var/containers/Bundle/iosbinpack64/usr/local/bin/jtool --sign --inplace /var/libexec/xpcproxy"), "[-] Failed to resign xpcproxy!"); + // test + int ret = launch("/var/containers/Bundle/iosbinpack64/test", NULL, NULL, NULL, NULL, NULL, NULL, NULL); + failIf(ret, "[-] Failed to trust binaries!"); + LOG("[+] Successfully trusted binaries!"); + } + else { + LOG("[+] binaries already trusted?"); } - chown(xpcproxy, 0, 0); - chmod(xpcproxy, 755); - failIf(trustbin(xpcproxy), "[-] Failed to trust xpcproxy!"); + //---- let's go! ----// - uint64_t realxpc = getVnodeAtPath("/usr/libexec/xpcproxy"); - uint64_t fakexpc = getVnodeAtPath(xpcproxy); + prepare_payload(); // this will chmod 777 everything - struct vnode rvp, fvp; - KernelRead(realxpc, &rvp, sizeof(struct vnode)); - KernelRead(fakexpc, &fvp, sizeof(struct vnode)); + //----- setup SSH -----// + mkdir("/var/dropbear", 0777); + removeFile("/var/profile"); + removeFile("/var/motd"); + chmod("/var/profile", 0777); + chmod("/var/motd", 0777); - fvp.v_usecount = rvp.v_usecount; - fvp.v_kusecount = rvp.v_kusecount; - fvp.v_parent = rvp.v_parent; - fvp.v_freelist = rvp.v_freelist; - fvp.v_mntvnodes = rvp.v_mntvnodes; - fvp.v_ncchildren = rvp.v_ncchildren; - fvp.v_nclinks = rvp.v_nclinks; + copyFile("/var/containers/Bundle/iosbinpack64/etc/profile", "/var/profile"); + copyFile("/var/containers/Bundle/iosbinpack64/etc/motd", "/var/motd"); - KernelWrite(realxpc, &fvp, sizeof(struct vnode)); // :o + // kill it if running + launch("/var/containers/Bundle/iosbinpack64/usr/bin/killall", "-SEGV", "dropbear", NULL, NULL, NULL, NULL, NULL); + failIf(launchAsPlatform("/var/containers/Bundle/iosbinpack64/usr/local/bin/dropbear", "-R", "--shell", "/var/containers/Bundle/iosbinpack64/bin/bash", "-E", "-p", "22", NULL), "[-] Failed to launch dropbear"); - // kernel is smart enough not to fall for a fake amfid :( - /*char *amfid = "/var/libexec/amfid"; - dylib = "/var/ulb/amfid.dylib"; - - if (!fileExists(amfid)) { - bool cp = copyFile("/usr/libexec/amfid", amfid); - failIf(!cp, "[-] Can't copy xpcproxy!"); - symlink("/var/containers/Bundle/iosbinpack64/amfid_payload.dylib", dylib); - - LOG("[*] Patching amfid"); - - const char *args[] = { "insert_dylib", "--all-yes", "--inplace", "--overwrite", dylib, amfid, NULL}; - int argn = 6; - failIf(add_dylib(argn, args), "[-] Failed to patch amfid :("); - - LOG("[*] Resigning amfid"); - - failIf(system_("/var/containers/Bundle/iosbinpack64/usr/local/bin/jtool --sign --inplace /var/libexec/amfid"), "[-] Failed to resign amfid!"); - } - - chown(amfid, 0, 0); - chmod(amfid, 755); - failIf(trustbin(amfid), "[-] Failed to trust amfid!"); - - realxpc = getVnodeAtPath("/usr/libexec/amfid"); - fakexpc = getVnodeAtPath(amfid); - - KernelRead(realxpc, &rvp, sizeof(struct vnode)); - KernelRead(fakexpc, &fvp, sizeof(struct vnode)); - - fvp.v_usecount = rvp.v_usecount; - fvp.v_kusecount = rvp.v_kusecount; - fvp.v_parent = rvp.v_parent; - fvp.v_freelist = rvp.v_freelist; - fvp.v_mntvnodes = rvp.v_mntvnodes; - fvp.v_ncchildren = rvp.v_ncchildren; - fvp.v_nclinks = rvp.v_nclinks; - - KernelWrite(realxpc, &fvp, 248); - - LOG("[?] Are we still alive?!");*/ + //------------- launch daeamons -------------// + //-- you can drop any daemon plist in iosbinpack64/LaunchDaemons and it will be loaded automatically --// - //----- magic end here -----// + plists = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:@"/var/containers/Bundle/iosbinpack64/LaunchDaemons" error:nil]; - // cache pid and we're done - pid_t installd = pid_of_procName("installd"); - pid_t bb = pid_of_procName("backboardd"); - - // AppSync + for (__strong NSString *file in plists) { + printf("[*] Adding permissions to plist %s\n", [file UTF8String]); + + file = [@"/var/containers/Bundle/iosbinpack64/LaunchDaemons" stringByAppendingPathComponent:file]; + + if (strstr([file UTF8String], "jailbreakd")) { + printf("[*] Found jailbreakd plist, special handling\n"); + + NSMutableDictionary *job = [NSPropertyListSerialization propertyListWithData:[NSData dataWithContentsOfFile:file] options:NSPropertyListMutableContainers format:nil error:nil]; + + job[@"EnvironmentVariables"][@"KernelBase"] = [NSString stringWithFormat:@"0x%16llx", KernelBase]; + [job writeToFile:file atomically:YES]; + } + + chmod([file UTF8String], 0644); + chown([file UTF8String], 0, 0); + } + + // clean up + removeFile("/var/log/testbin.log"); + removeFile("/var/log/jailbreakd-stderr.log"); + removeFile("/var/log/jailbreakd-stdout.log"); - fixMmap("/var/ulb/libsubstitute.dylib"); - fixMmap("/var/LIB/Frameworks/CydiaSubstrate.framework/CydiaSubstrate"); - fixMmap("/var/LIB/MobileSubstrate/DynamicLibraries/AppSyncUnified.dylib"); + launch("/var/containers/Bundle/iosbinpack64/bin/launchctl", "unload", "/var/containers/Bundle/iosbinpack64/LaunchDaemons", NULL, NULL, NULL, NULL, NULL); + launch("/var/containers/Bundle/iosbinpack64/bin/launchctl", "load", "/var/containers/Bundle/iosbinpack64/LaunchDaemons", NULL, NULL, NULL, NULL, NULL); - if (installd) kill(installd, SIGKILL); + sleep(1); - if ([self.installiSuperSU isOn]) { - LOG("[*] Installing iSuperSU"); + failIf(!fileExists("/var/log/testbin.log"), "[-] Failed to load launch daemons"); + failIf(!fileExists("/var/log/jailbreakd-stdout.log"), "[-] Failed to load jailbreakd"); + + if (true) + { + /* Install zip and unrar */ + LOG("[*] Installing zip, unzip and unrar"); + + chdir("/var/containers/Bundle/tweaksupport/bin/"); + FILE *zip = fopen((char*)in_bundle("tars/zip.tar"), "r"); + untar(zip, "/var/containers/Bundle/tweaksupport/bin/"); + fclose(zip); + + failIf(system_("/var/containers/Bundle/tweaksupport/usr/bin/inject /var/containers/Bundle/tweaksupport/bin/zip"), "[-] Failed to sign zip"); + failIf(system_("/var/containers/Bundle/tweaksupport/usr/bin/inject /var/containers/Bundle/tweaksupport/bin/unzip"), "[-] Failed to sign unzip"); + failIf(system_("/var/containers/Bundle/tweaksupport/usr/bin/inject /var/containers/Bundle/tweaksupport/bin/zipcloak"), "[-] Failed to sign zipcloak"); + failIf(system_("/var/containers/Bundle/tweaksupport/usr/bin/inject /var/containers/Bundle/tweaksupport/bin/zipsplit"), "[-] Failed to sign zipsplit"); + failIf(system_("/var/containers/Bundle/tweaksupport/usr/bin/inject /var/containers/Bundle/tweaksupport/bin/zipnote"), "[-] Failed to sign zipnote"); + + FILE *unrar = fopen((char*)in_bundle("tars/unrar.tar"), "r"); + untar(unrar, "/var/containers/Bundle/tweaksupport/bin/"); + fclose(unrar); - removeFile("/var/containers/Bundle/tweaksupport/Applications/iSuperSU.app"); - copyFile(in_bundle("apps/iSuperSU.app"), "/var/containers/Bundle/tweaksupport/Applications/iSuperSU.app"); + failIf(system_("/var/containers/Bundle/tweaksupport/usr/bin/inject /var/containers/Bundle/tweaksupport/bin/unrar"), "[-] Failed to sign unrar"); + + } + + if (self.enableTweaks.isOn) { - failIf(system_("/var/containers/Bundle/tweaksupport/usr/local/bin/jtool --sign --inplace --ent /var/containers/Bundle/tweaksupport/Applications/iSuperSU.app/ent.xml /var/containers/Bundle/tweaksupport/Applications/iSuperSU.app/iSuperSU && /var/containers/Bundle/tweaksupport/usr/bin/inject /var/containers/Bundle/tweaksupport/Applications/iSuperSU.app/iSuperSU"), "[-] Failed to sign iSuperSU"); + //----- magic start here -----// + LOG("[*] Time for magic"); + char *xpcproxy = "/var/libexec/xpcproxy"; + char *dylib = "/var/ulb/pspawn.dylib"; + + if (!fileExists(xpcproxy)) { + bool cp = copyFile("/usr/libexec/xpcproxy", xpcproxy); + failIf(!cp, "[-] Can't copy xpcproxy!"); + symlink("/var/containers/Bundle/iosbinpack64/pspawn.dylib", dylib); + + LOG("[*] Patching xpcproxy"); + + const char *args[] = { "insert_dylib", "--all-yes", "--inplace", "--overwrite", dylib, xpcproxy, NULL}; + int argn = 6; + + failIf(add_dylib(argn, args), "[-] Failed to patch xpcproxy :("); + + LOG("[*] Resigning xpcproxy"); + + failIf(system_("/var/containers/Bundle/iosbinpack64/usr/local/bin/jtool --sign --inplace /var/libexec/xpcproxy"), "[-] Failed to resign xpcproxy!"); + } + + chown(xpcproxy, 0, 0); + chmod(xpcproxy, 755); + failIf(trustbin(xpcproxy), "[-] Failed to trust xpcproxy!"); + + uint64_t realxpc = getVnodeAtPath("/usr/libexec/xpcproxy"); + uint64_t fakexpc = getVnodeAtPath(xpcproxy); + + struct vnode rvp, fvp; + KernelRead(realxpc, &rvp, sizeof(struct vnode)); + KernelRead(fakexpc, &fvp, sizeof(struct vnode)); + + fvp.v_usecount = rvp.v_usecount; + fvp.v_kusecount = rvp.v_kusecount; + fvp.v_parent = rvp.v_parent; + fvp.v_freelist = rvp.v_freelist; + fvp.v_mntvnodes = rvp.v_mntvnodes; + fvp.v_ncchildren = rvp.v_ncchildren; + fvp.v_nclinks = rvp.v_nclinks; + + KernelWrite(realxpc, &fvp, sizeof(struct vnode)); // :o + + // kernel is smart enough not to fall for a fake amfid :( + /*char *amfid = "/var/libexec/amfid"; + dylib = "/var/ulb/amfid.dylib"; + + if (!fileExists(amfid)) { + bool cp = copyFile("/usr/libexec/amfid", amfid); + failIf(!cp, "[-] Can't copy xpcproxy!"); + symlink("/var/containers/Bundle/iosbinpack64/amfid_payload.dylib", dylib); + + LOG("[*] Patching amfid"); + + const char *args[] = { "insert_dylib", "--all-yes", "--inplace", "--overwrite", dylib, amfid, NULL}; + int argn = 6; + failIf(add_dylib(argn, args), "[-] Failed to patch amfid :("); + + LOG("[*] Resigning amfid"); + + failIf(system_("/var/containers/Bundle/iosbinpack64/usr/local/bin/jtool --sign --inplace /var/libexec/amfid"), "[-] Failed to resign amfid!"); + } + + chown(amfid, 0, 0); + chmod(amfid, 755); + failIf(trustbin(amfid), "[-] Failed to trust amfid!"); + + realxpc = getVnodeAtPath("/usr/libexec/amfid"); + fakexpc = getVnodeAtPath(amfid); + + KernelRead(realxpc, &rvp, sizeof(struct vnode)); + KernelRead(fakexpc, &fvp, sizeof(struct vnode)); + + fvp.v_usecount = rvp.v_usecount; + fvp.v_kusecount = rvp.v_kusecount; + fvp.v_parent = rvp.v_parent; + fvp.v_freelist = rvp.v_freelist; + fvp.v_mntvnodes = rvp.v_mntvnodes; + fvp.v_ncchildren = rvp.v_ncchildren; + fvp.v_nclinks = rvp.v_nclinks; + + KernelWrite(realxpc, &fvp, 248); + + LOG("[?] Are we still alive?!");*/ + + //----- magic end here -----// + + // cache pid and we're done + pid_t installd = pid_of_procName("installd"); + pid_t bb = pid_of_procName("backboardd"); + + // AppSync - // just in case fixMmap("/var/ulb/libsubstitute.dylib"); fixMmap("/var/LIB/Frameworks/CydiaSubstrate.framework/CydiaSubstrate"); fixMmap("/var/LIB/MobileSubstrate/DynamicLibraries/AppSyncUnified.dylib"); - failIf(launch("/var/containers/Bundle/tweaksupport/usr/bin/uicache", NULL, NULL, NULL, NULL, NULL, NULL, NULL), "[-] Failed to install iSuperSU"); + if (installd) kill(installd, SIGKILL); + + if ([self.installiSuperSU isOn]) { + LOG("[*] Installing iSuperSU"); + + removeFile("/var/containers/Bundle/tweaksupport/Applications/iSuperSU.app"); + copyFile(in_bundle("apps/iSuperSU.app"), "/var/containers/Bundle/tweaksupport/Applications/iSuperSU.app"); + + failIf(system_("/var/containers/Bundle/tweaksupport/usr/local/bin/jtool --sign --inplace --ent /var/containers/Bundle/tweaksupport/Applications/iSuperSU.app/ent.xml /var/containers/Bundle/tweaksupport/Applications/iSuperSU.app/iSuperSU && /var/containers/Bundle/tweaksupport/usr/bin/inject /var/containers/Bundle/tweaksupport/Applications/iSuperSU.app/iSuperSU"), "[-] Failed to sign iSuperSU"); + + + // just in case + fixMmap("/var/ulb/libsubstitute.dylib"); + fixMmap("/var/LIB/Frameworks/CydiaSubstrate.framework/CydiaSubstrate"); + fixMmap("/var/LIB/MobileSubstrate/DynamicLibraries/AppSyncUnified.dylib"); + + failIf(launch("/var/containers/Bundle/tweaksupport/usr/bin/uicache", NULL, NULL, NULL, NULL, NULL, NULL, NULL), "[-] Failed to install iSuperSU"); + } + + if ([self.installFilza isOn]) { + LOG("[*] Installing Filza File Manager"); + mkdir("/var/containers/Bundle/tweaksupport/usr/libexec/filza", 0777); + chown("/var/containers/Bundle/tweaksupport/usr/libexec/filza", 0, 0); + removeFile("/var/containers/Bundle/tweaksupport/Applications/Filza.app"); + removeFile("/var/containers/Bundle/tweaksupport/usr/libexec/filza/Filza"); + removeFile("/var/containers/Bundle/tweaksupport/usr/libexec/filza/FilzaHelper"); + removeFile("/var/containers/Bundle/tweaksupport/usr/libexec/filza/FilzaWebDAVServer"); + removeFile("/var/containers/Bundle/tweaksupport/Library/LaunchDaemons/com.tigisoftware.filza.helper.plist"); + + if (fileExists(in_bundle("apps/Filza.app.tar"))) { + chdir("/var/containers/Bundle/tweaksupport/Applications/"); + FILE *app = fopen((char*)in_bundle("apps/Filza.app.tar"), "r"); + untar(app, "/var/containers/Bundle/tweaksupport/Applications/"); + fclose(app); + } + + copyFile(in_bundle("tars/com.tigisoftware.filza.helper.plist"), "/var/containers/Bundle/tweaksupport/Library/LaunchDaemons/com.tigisoftware.filza.helper.plist"); + + chown("/var/containers/Bundle/tweaksupport/Library/LaunchDaemons/com.tigisoftware.filza.helper.plist", 0, 0); + + if (!fileExists(in_bundle("bins/Filza"))) { + chdir(in_bundle("bins/")); + + FILE *f1 = fopen(in_bundle("bins/Filza.tar"), "r"); + untar(f1, in_bundle("bins/Filza")); + fclose(f1); + + f1 = fopen(in_bundle("bins/FilzaHelper.tar"), "r"); + untar(f1, in_bundle("bins/FilzaHelper")); + fclose(f1); + + f1 = fopen(in_bundle("bins/FilzaWebDAVServer.tar"), "r"); + untar(f1, in_bundle("bins/FilzaWebDAVServer")); + fclose(f1); + + + chown(in_bundle("bins/Filza"), 0, 0); + chown(in_bundle("bins/FilzaHelper"), 0, 0); + chown(in_bundle("bins/FilzaWebDAVServer"), 0, 0); + NSUInteger perm = S_ISUID | S_ISGID | S_IRUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH; + chmod(in_bundle("bins/Filza"), perm); + chmod(in_bundle("bins/FilzaHelper"), 0777); + chmod(in_bundle("bins/FilzaWebDAVServer"), 0777); + + removeFile(in_bundle("bins/Filza.tar")); + removeFile(in_bundle("bins/FilzaHelper.tar")); + removeFile(in_bundle("bins/FilzaWebDAVServer.tar")); + } + moveFile("/var/containers/Bundle/tweaksupport/Applications/Filza.app/PlugIns/Sharing.appex/Sharing", "/var/containers/Bundle/tweaksupport/usr/libexec/filza/Sharing"); + copyFile(in_bundle("bins/Filza"), "/var/containers/Bundle/tweaksupport/usr/libexec/filza/Filza"); + copyFile(in_bundle("bins/FilzaHelper"), "/var/containers/Bundle/tweaksupport/usr/libexec/filza/FilzaHelper"); + copyFile(in_bundle("bins/FilzaWebDAVServer"), "/var/containers/Bundle/tweaksupport/usr/libexec/filza/FilzaWebDAVServer"); + + failIf(system_("/var/containers/Bundle/tweaksupport/usr/bin/inject /var/containers/Bundle/tweaksupport/usr/libexec/filza/Filza"), "[-] Failed to sign Filza File Manager"); + failIf(system_("/var/containers/Bundle/tweaksupport/usr/bin/inject /var/containers/Bundle/tweaksupport/usr/libexec/filza/FilzaHelper"), "[-] Failed to sign Filza File Manager"); + failIf(system_("/var/containers/Bundle/tweaksupport/usr/bin/inject /var/containers/Bundle/tweaksupport/usr/libexec/filza/FilzaWebDAVServer"), "[-] Failed to sign Filza File Manager"); + failIf(system_("/var/containers/Bundle/tweaksupport/usr/bin/inject /var/containers/Bundle/tweaksupport/Applications/Filza.app"), "[-] Failed to sign Filza File Manager"); + + launch("/var/containers/Bundle/iosbinpack64/bin/launchctl", "unload", "/var/containers/Bundle/iosbinpack64/LaunchDaemons/com.tigisoftware.filza.helper.plist", NULL, NULL, NULL, NULL, NULL); + + launch("/var/containers/Bundle/iosbinpack64/bin/launchctl", "load", "/var/containers/Bundle/iosbinpack64/LaunchDaemons/com.tigisoftware.filza.helper.plist", NULL, NULL, NULL, NULL, NULL); + + failIf(system_("/var/containers/Bundle/tweaksupport/usr/bin/inject /var/containers/Bundle/tweaksupport/Applications/Filza.app/dylibs/libsmb2-ios.dylib"), "[-] Failed to sign Filza File Manager"); + failIf(system_("/var/containers/Bundle/tweaksupport/usr/bin/inject /var/containers/Bundle/tweaksupport/usr/libexec/filza/Sharing"), "[-] Failed to sign Filza File Manager"); + + moveFile("/var/containers/Bundle/tweaksupport/usr/libexec/filza/Sharing", "/var/containers/Bundle/tweaksupport/Applications/Filza.app/PlugIns/Sharing.appex/Sharing"); + + mkdir("/var/containers/Bundle/tweaksupport/data", 0777); + removeFile("/var/containers/Bundle/tweaksupport/data/Filza.app"); + copyFile("/var/containers/Bundle/tweaksupport/Applications/Filza.app", "/var/containers/Bundle/tweaksupport/data/Filza.app"); + + // just in case + fixMmap("/var/ulb/libsubstitute.dylib"); + fixMmap("/var/LIB/Frameworks/CydiaSubstrate.framework/CydiaSubstrate"); + fixMmap("/var/LIB/MobileSubstrate/DynamicLibraries/AppSyncUnified.dylib"); + + failIf(launch("/var/containers/Bundle/tweaksupport/usr/bin/uicache", NULL, NULL, NULL, NULL, NULL, NULL, NULL), "[-] Failed to install Filza File Manager"); + + LOG("[*] Installing Apps Manager"); + removeFile("/var/containers/Bundle/tweaksupport/Applications/ADManager.app"); + removeFile("/var/containers/Bundle/tweaksupport/bin/ADMHelper"); + + if (fileExists(in_bundle("apps/ADManager.app.tar"))) { + chdir("/var/containers/Bundle/tweaksupport/Applications/"); + FILE *app = fopen((char*)in_bundle("apps/ADManager.app.tar"), "r"); + untar(app, "/var/containers/Bundle/tweaksupport/Applications/"); + fclose(app); + } + + if (!fileExists(in_bundle("bins/ADMHelper"))) { + chdir(in_bundle("bins/")); + + FILE *f1 = fopen(in_bundle("bins/ADMHelper.tar"), "r"); + untar(f1, in_bundle("bins/ADMHelper")); + fclose(f1); + + chown(in_bundle("bins/ADMHelper"), 0, 0);//chown root /usr/bin/ADMHelper + NSUInteger perm = S_ISUID | S_ISGID | S_IRUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH; + chmod(in_bundle("bins/ADMHelper"), perm);//chmod ug+s /usr/bin/ADMHelper + + removeFile(in_bundle("bins/ADMHelper.tar")); + } + copyFile(in_bundle("bins/ADMHelper"), "/var/containers/Bundle/tweaksupport/bin/ADMHelper"); + + failIf(system_("/var/containers/Bundle/tweaksupport/usr/bin/inject /var/containers/Bundle/tweaksupport/bin/ADMHelper"), "[-] Failed to sign Apps Manager"); + failIf(system_("/var/containers/Bundle/tweaksupport/usr/bin/inject /var/containers/Bundle/tweaksupport/Applications/ADManager.app"), "[-] Failed to sign Apps Manager"); + + fixMmap("/var/ulb/libsubstitute.dylib"); + fixMmap("/var/LIB/Frameworks/CydiaSubstrate.framework/CydiaSubstrate"); + fixMmap("/var/LIB/MobileSubstrate/DynamicLibraries/AppSyncUnified.dylib"); + + failIf(launch("/var/containers/Bundle/tweaksupport/usr/bin/uicache", NULL, NULL, NULL, NULL, NULL, NULL, NULL), "[-] Failed to install Apps Manager"); + } + + LOG("[+] Really jailbroken!"); + term_jelbrek(); + + // bye bye + kill(bb, 9); + //launch("/var/containers/Bundle/iosbinpack64/bin/bash", "-c", "/var/containers/Bundle/iosbinpack64/usr/bin/nohup /var/containers/Bundle/iosbinpack64/bin/bash -c \"/var/containers/Bundle/iosbinpack64/bin/launchctl unload /System/Library/LaunchDaemons/com.apple.backboardd.plist && /var/containers/Bundle/iosbinpack64/usr/bin/ldrestart; /var/containers/Bundle/iosbinpack64/bin/launchctl load /System/Library/LaunchDaemons/com.apple.backboardd.plist\" 2>&1 >/dev/null &", NULL, NULL, NULL, NULL, NULL); + exit(0); } - LOG("[+] Really jailbroken!"); - term_jelbrek(); + /// FIX THIS + /* + pid_t installd = pid_of_procName("installd"); + failIf(!installd, "[-] Can't find installd's pid"); + + failIf(!setcsflags(installd), "[-] Failed to entitle installd"); + failIf(!entitlePidOnAMFI(installd, "get-task-allow", true), "[-] Failed to entitle installd"); + failIf(!entitlePidOnAMFI(installd, "com.apple.private.skip-library-validation", true), "[-] Failed to entitle installd"); + + inject_dylib(installd, "/var/containers/Bundle/tweaksupport/usr/lib/TweakInject/AppSyncUnified.dylib"); + + if ([self.installiSuperSU isOn]) { + LOG("[*] Installing iSuperSU"); + copyFile(in_bundle("apps/iSuperSU.app"), "/var/containers/Bundle/tweaksupport/Applications/iSuperSU.app"); + launch("/var/containers/Bundle/tweaksupport/usr/bin/uicache", NULL, NULL, NULL, NULL, NULL, NULL, NULL); + } */ + + LOG("[+] Jailbreak succeeded. Enjoy"); - // bye bye - kill(bb, 9); - //launch("/var/containers/Bundle/iosbinpack64/bin/bash", "-c", "/var/containers/Bundle/iosbinpack64/usr/bin/nohup /var/containers/Bundle/iosbinpack64/bin/bash -c \"/var/containers/Bundle/iosbinpack64/bin/launchctl unload /System/Library/LaunchDaemons/com.apple.backboardd.plist && /var/containers/Bundle/iosbinpack64/usr/bin/ldrestart; /var/containers/Bundle/iosbinpack64/bin/launchctl load /System/Library/LaunchDaemons/com.apple.backboardd.plist\" 2>&1 >/dev/null &", NULL, NULL, NULL, NULL, NULL); - exit(0); + end:; + + if (sb) sandbox(getpid(), sb); + term_jelbrek(); } - - /// FIX THIS - /* - pid_t installd = pid_of_procName("installd"); - failIf(!installd, "[-] Can't find installd's pid"); - - failIf(!setcsflags(installd), "[-] Failed to entitle installd"); - failIf(!entitlePidOnAMFI(installd, "get-task-allow", true), "[-] Failed to entitle installd"); - failIf(!entitlePidOnAMFI(installd, "com.apple.private.skip-library-validation", true), "[-] Failed to entitle installd"); - - inject_dylib(installd, "/var/containers/Bundle/tweaksupport/usr/lib/TweakInject/AppSyncUnified.dylib"); - - if ([self.installiSuperSU isOn]) { - LOG("[*] Installing iSuperSU"); - copyFile(in_bundle("apps/iSuperSU.app"), "/var/containers/Bundle/tweaksupport/Applications/iSuperSU.app"); - launch("/var/containers/Bundle/tweaksupport/usr/bin/uicache", NULL, NULL, NULL, NULL, NULL, NULL, NULL); - } */ - - LOG("[+] Jailbreak succeeded. Enjoy"); - -end:; - - if (sb) sandbox(getpid(), sb); - term_jelbrek(); } - (IBAction)uninstall:(id)sender { //---- tfp0 ----// diff --git a/rootlessJB/bootstrap/apps/ADManager.app.tar b/rootlessJB/bootstrap/apps/ADManager.app.tar new file mode 100755 index 0000000..3a56d1d Binary files /dev/null and b/rootlessJB/bootstrap/apps/ADManager.app.tar differ diff --git a/rootlessJB/bootstrap/apps/Filza.app.tar b/rootlessJB/bootstrap/apps/Filza.app.tar new file mode 100755 index 0000000..b4c3add Binary files /dev/null and b/rootlessJB/bootstrap/apps/Filza.app.tar differ diff --git a/rootlessJB/bootstrap/bins/ADMHelper.tar b/rootlessJB/bootstrap/bins/ADMHelper.tar new file mode 100755 index 0000000..32bec3c Binary files /dev/null and b/rootlessJB/bootstrap/bins/ADMHelper.tar differ diff --git a/rootlessJB/bootstrap/bins/Filza.tar b/rootlessJB/bootstrap/bins/Filza.tar new file mode 100755 index 0000000..8a3d2d8 Binary files /dev/null and b/rootlessJB/bootstrap/bins/Filza.tar differ diff --git a/rootlessJB/bootstrap/bins/FilzaHelper.tar b/rootlessJB/bootstrap/bins/FilzaHelper.tar new file mode 100755 index 0000000..4e40748 Binary files /dev/null and b/rootlessJB/bootstrap/bins/FilzaHelper.tar differ diff --git a/rootlessJB/bootstrap/bins/FilzaWebDAVServer.tar b/rootlessJB/bootstrap/bins/FilzaWebDAVServer.tar new file mode 100755 index 0000000..a7ee857 Binary files /dev/null and b/rootlessJB/bootstrap/bins/FilzaWebDAVServer.tar differ diff --git a/rootlessJB/bootstrap/tars/com.tigisoftware.filza.helper.plist b/rootlessJB/bootstrap/tars/com.tigisoftware.filza.helper.plist new file mode 100755 index 0000000..974e51a --- /dev/null +++ b/rootlessJB/bootstrap/tars/com.tigisoftware.filza.helper.plist @@ -0,0 +1,21 @@ + + + + + Label + com.tigisoftware.filza.helper + UserName + root + ExecuteAllowed + + ProgramArguments + + /var/libexec/filza/FilzaHelper + + MachServices + + com.tigisoftware.filza.helper.xpc + + + + diff --git a/rootlessJB/bootstrap/tars/unrar.tar b/rootlessJB/bootstrap/tars/unrar.tar new file mode 100755 index 0000000..d67e8df Binary files /dev/null and b/rootlessJB/bootstrap/tars/unrar.tar differ diff --git a/rootlessJB/bootstrap/tars/zip.tar b/rootlessJB/bootstrap/tars/zip.tar new file mode 100755 index 0000000..18aa3b3 Binary files /dev/null and b/rootlessJB/bootstrap/tars/zip.tar differ