@@ -8,14 +8,14 @@

#include <mach/mach.h>

void init_tfp0_kernel(task_t tfp0);
void init_kernel(task_t tfp0);
size_t tfp0_kread(uint64_t where, void *p, size_t size);
uint64_t rk64(task_t tfp0, uint64_t kaddr);
uint32_t rk32(task_t tfp0, uint64_t kaddr);
void wk64(task_t tfp0, uint64_t kaddr, uint64_t val);
void wk32(task_t tfp0, uint64_t kaddr, uint32_t val);
size_t kwrite(task_t tfp0, uint64_t where, const void *p, size_t size);
size_t kwrite_uint64(task_t tfp0, uint64_t where, uint64_t value);
uint64_t rk64(uint64_t kaddr);
uint32_t rk32(uint64_t kaddr);
void wk64(uint64_t kaddr, uint64_t val);
void wk32(uint64_t kaddr, uint32_t val);
size_t kwrite(uint64_t where, const void *p, size_t size);
size_t kwrite_uint64(uint64_t where, uint64_t value);

kern_return_t mach_vm_write(vm_map_t target_task,
mach_vm_address_t address,
@@ -10,10 +10,10 @@
#include "common.h"
#include <mach/mach.h>

task_t task;
task_t tfp0;

void init_tfp0_kernel(task_t tfp0) {
task = tfp0;
void init_kernel(task_t task_for_port0) {
tfp0 = task_for_port0;
}

size_t tfp0_kread(uint64_t where, void *p, size_t size)
@@ -25,7 +25,7 @@ size_t tfp0_kread(uint64_t where, void *p, size_t size)
if (chunk > size - offset) {
chunk = size - offset;
}
rv = mach_vm_read_overwrite(task, where + offset, chunk, (mach_vm_address_t)p + offset, &sz);
rv = mach_vm_read_overwrite(tfp0, where + offset, chunk, (mach_vm_address_t)p + offset, &sz);

if (rv || sz == 0) {
break;
@@ -36,20 +36,19 @@ size_t tfp0_kread(uint64_t where, void *p, size_t size)
return offset;
}

uint64_t rk64(task_t tfp0, uint64_t kaddr) {
uint64_t lower = rk32(tfp0, kaddr);
uint64_t higher = rk32(tfp0, kaddr + 4);
uint64_t rk64(uint64_t kaddr) {
uint64_t lower = rk32(kaddr);
uint64_t higher = rk32(kaddr + 4);
return ((higher << 32) | lower);
}

uint32_t rk32(task_t tfp0, uint64_t kaddr) {
uint32_t rk32(uint64_t kaddr) {
kern_return_t err;
uint32_t val = 0;
mach_vm_size_t outsize = 0;

// mach (for kern r/w primitives)
kern_return_t mach_vm_write(
vm_map_t target_task,
kern_return_t mach_vm_write(vm_map_t target_task,
mach_vm_address_t address,
vm_offset_t data,
mach_msg_type_number_t dataCnt);
@@ -75,14 +74,14 @@ kern_return_t mach_vm_write(
return val;
}

void wk64(task_t tfp0, uint64_t kaddr, uint64_t val) {
void wk64(uint64_t kaddr, uint64_t val) {
uint32_t lower = (uint32_t)(val & 0xffffffff);
uint32_t higher = (uint32_t)(val >> 32);
wk32(tfp0, kaddr, lower);
wk32(tfp0, kaddr + 4, higher);
wk32(kaddr, lower);
wk32(kaddr + 4, higher);
}

void wk32(task_t tfp0, uint64_t kaddr, uint32_t val) {
void wk32(uint64_t kaddr, uint32_t val) {
if (tfp0 == MACH_PORT_NULL) {
// printf("attempt to write to kernel memory before any kernel memory write primitives available\n");
// sleep(3);
@@ -101,7 +100,7 @@ void wk32(task_t tfp0, uint64_t kaddr, uint32_t val) {
}
}

size_t kwrite(task_t tfp0, uint64_t where, const void *p, size_t size) {
size_t kwrite(uint64_t where, const void *p, size_t size) {
int rv;
size_t offset = 0;
while (offset < size) {
@@ -125,6 +124,6 @@ size_t kwrite(task_t tfp0, uint64_t where, const void *p, size_t size) {
return offset;
}

size_t kwrite_uint64(task_t tfp0, uint64_t where, uint64_t value) {
return kwrite(tfp0, where, &value, sizeof(value));
size_t kwrite_uint64(uint64_t where, uint64_t value) {
return kwrite(where, &value, sizeof(value));
}
BIN -178 KB v0rtex-S/ls
Binary file not shown.
@@ -456,7 +456,7 @@ init_patchfinder(task_t taskfp0, addr_t base, const char *filename)
addr_t max = 0;
int is64 = 0;

init_tfp0_kernel(taskfp0);
init_kernel(taskfp0);

#ifdef __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__
#define close(f)
@@ -17,22 +17,22 @@
// props to xerub for the original '/' r/w remount code
int mount_root(task_t tfp0, uint64_t kslide) {
uint64_t _rootnode = OFFSET_ROOT_MOUNT_V_NODE + kslide;
uint64_t rootfs_vnode = rk64(tfp0, _rootnode);
uint64_t rootfs_vnode = rk64(_rootnode);

// read the original flags
uint64_t v_mount = rk64(tfp0, rootfs_vnode + KSTRUCT_OFFSET_VNODE_V_UN);
uint32_t v_flag = rk32(tfp0, v_mount + KSTRUCT_OFFSET_MOUNT_MNT_FLAG + 1);
uint64_t v_mount = rk64(rootfs_vnode + KSTRUCT_OFFSET_VNODE_V_UN);
uint32_t v_flag = rk32(v_mount + KSTRUCT_OFFSET_MOUNT_MNT_FLAG + 1);

// unset rootfs flag
wk32(tfp0, v_mount + KSTRUCT_OFFSET_MOUNT_MNT_FLAG + 1, v_flag & ~(MNT_ROOTFS >> 8));
wk32(v_mount + KSTRUCT_OFFSET_MOUNT_MNT_FLAG + 1, v_flag & ~(MNT_ROOTFS >> 8));

// remount
char *nmz = strdup("/dev/disk0s1s1");
kern_return_t rv = mount("hfs", "/", MNT_UPDATE, (void *)&nmz);

// set original flags back
v_mount = rk64(tfp0, rootfs_vnode + KSTRUCT_OFFSET_VNODE_V_UN);
wk32(tfp0, v_mount + KSTRUCT_OFFSET_MOUNT_MNT_FLAG + 1, v_flag);
v_mount = rk64(rootfs_vnode + KSTRUCT_OFFSET_VNODE_V_UN);
wk32(v_mount + KSTRUCT_OFFSET_MOUNT_MNT_FLAG + 1, v_flag);

return rv;
}
@@ -30,55 +30,63 @@
uint64_t OFFSET_ROP_ADD_X0_X0_0x10;
uint64_t OFFSET_ROOT_MOUNT_V_NODE;

#import <sys/utsname.h>

BOOL init_symbols()
{
NSString *ver = [[NSProcessInfo processInfo] operatingSystemVersionString];

struct utsname u;
uname(&u);

LOG("sysname: %s", u.sysname);
LOG("nodename: %s", u.nodename);
LOG("release: %s", u.release);
LOG("version: %s", u.version);
LOG("machine: %s", u.machine);
LOG("Device: %s", u.machine);
LOG("Device Name: %s", u.nodename);
LOG("Device iOS Version: %@", ver);

// iPhone 7 (iPhone9,3) 10.3.1
if (strcmp(u.version, "Darwin Kernel Version 16.5.0: Thu Feb 23 23:22:55 PST 2017; root:xnu-3789.52.2~7/RELEASE_ARM64_T8010") == 0) {
OFFSET_ZONE_MAP = 0xfffffff007590478;
OFFSET_KERNEL_MAP = 0xfffffff0075ec050;
OFFSET_KERNEL_TASK = 0xfffffff0075ec048;
OFFSET_REALHOST = 0xfffffff007572ba0;
OFFSET_BZERO = 0xfffffff0070c1f80;
OFFSET_BCOPY = 0xfffffff0070c1dc0;
OFFSET_COPYIN = 0xfffffff0071c6134;
OFFSET_COPYOUT = 0xfffffff0071c6414;
OFFSET_CHGPROCCNT = 0xfffffff007049e4b;
OFFSET_KAUTH_CRED_REF = 0xfffffff0073ada04;
OFFSET_KAUTH_CRED_UNREF = 0xfffffff0073ad6e4;
OFFSET_IPC_PORT_ALLOC_SPECIAL = 0xfffffff0070df05c;
OFFSET_IPC_KOBJECT_SET = 0xfffffff0070f22b4;
OFFSET_IPC_PORT_MAKE_SEND = 0xfffffff0070deb80;
OFFSET_IOSURFACEROOTUSERCLIENT_VTAB = 0xfffffff006e4a238;
OFFSET_ROP_ADD_X0_X0_0x10 = 0xfffffff0064ff0a8;
OFFSET_ROP_LDR_X0_X0_0x10 = 0xfffffff0074cf02c;
OFFSET_ROOT_MOUNT_V_NODE = 0xfffffff0075ec0b0;
if (strcmp(u.machine, "iPhone9,3") == 0)
{
if ([ver isEqual: @"Version 10.3.1 (Build 14E304)"])
{
OFFSET_ZONE_MAP = 0xfffffff007590478;
OFFSET_KERNEL_MAP = 0xfffffff0075ec050;
OFFSET_KERNEL_TASK = 0xfffffff0075ec048;
OFFSET_REALHOST = 0xfffffff007572ba0;
OFFSET_BZERO = 0xfffffff0070c1f80;
OFFSET_BCOPY = 0xfffffff0070c1dc0;
OFFSET_COPYIN = 0xfffffff0071c6134;
OFFSET_COPYOUT = 0xfffffff0071c6414;
OFFSET_CHGPROCCNT = 0xfffffff007049e4b;
OFFSET_KAUTH_CRED_REF = 0xfffffff0073ada04;
OFFSET_KAUTH_CRED_UNREF = 0xfffffff0073ad6e4;
OFFSET_IPC_PORT_ALLOC_SPECIAL = 0xfffffff0070df05c;
OFFSET_IPC_KOBJECT_SET = 0xfffffff0070f22b4;
OFFSET_IPC_PORT_MAKE_SEND = 0xfffffff0070deb80;
OFFSET_IOSURFACEROOTUSERCLIENT_VTAB = 0xfffffff006e4a238;
OFFSET_ROP_ADD_X0_X0_0x10 = 0xfffffff0064ff0a8;
OFFSET_ROP_LDR_X0_X0_0x10 = 0xfffffff0074cf02c;
OFFSET_ROOT_MOUNT_V_NODE = 0xfffffff0075ec0b0;
}
}

// iPhone8,1 10.3.2
else if (strcmp(u.version, "Darwin Kernel Version 16.6.0: Mon Apr 17 17:33:34 PDT 2017; root:xnu-3789.60.24~24/RELEASE_ARM64_S8000") == 0) {
OFFSET_ZONE_MAP = 0xfffffff007548478;
OFFSET_KERNEL_MAP = 0xfffffff0075a4050;
OFFSET_KERNEL_TASK = 0xfffffff0075a4048;
OFFSET_REALHOST = 0xfffffff00752aba0;
OFFSET_BZERO = 0xfffffff007081f80;
OFFSET_BCOPY = 0xfffffff007081dc0;
OFFSET_COPYIN = 0xfffffff0071806f4;
OFFSET_COPYOUT = 0xfffffff0071808e8;
OFFSET_IPC_PORT_ALLOC_SPECIAL = 0xfffffff007099e94;
OFFSET_IPC_KOBJECT_SET = 0xfffffff0070ad16c;
OFFSET_IPC_PORT_MAKE_SEND = 0xfffffff0070999b8;
OFFSET_IOSURFACEROOTUSERCLIENT_VTAB = 0xfffffff006e7c9f8;
OFFSET_ROP_ADD_X0_X0_0x10 = 0xfffffff006b916b8;
OFFSET_ROOT_MOUNT_V_NODE = 0xfffffff0075ec0b0;
else if (strcmp(u.machine, "iPhone8,1"))
{
if ([ver isEqual: @"Version 10.3.2 (Build 14F89)"])
{
OFFSET_ZONE_MAP = 0xfffffff007548478;
OFFSET_KERNEL_MAP = 0xfffffff0075a4050;
OFFSET_KERNEL_TASK = 0xfffffff0075a4048;
OFFSET_REALHOST = 0xfffffff00752aba0;
OFFSET_BZERO = 0xfffffff007081f80;
OFFSET_BCOPY = 0xfffffff007081dc0;
OFFSET_COPYIN = 0xfffffff0071806f4;
OFFSET_COPYOUT = 0xfffffff0071808e8;
OFFSET_IPC_PORT_ALLOC_SPECIAL = 0xfffffff007099e94;
OFFSET_IPC_KOBJECT_SET = 0xfffffff0070ad16c;
OFFSET_IPC_PORT_MAKE_SEND = 0xfffffff0070999b8;
OFFSET_IOSURFACEROOTUSERCLIENT_VTAB = 0xfffffff006e7c9f8;
OFFSET_ROP_ADD_X0_X0_0x10 = 0xfffffff006b916b8;
OFFSET_ROOT_MOUNT_V_NODE = 0xfffffff0075ec0b0;
}
}

else
@@ -5,6 +5,6 @@

#include "common.h"

kern_return_t v0rtex(task_t *tfp0, kptr_t *kslide, kptr_t *kernucred);
kern_return_t v0rtex(task_t *tfp0, kptr_t *kslide, kptr_t *kernucred, kptr_t *selfproc);

#endif
@@ -431,7 +431,7 @@ static kern_return_t reallocate_buf(io_connect_t client, uint32_t surfaceId, uin
} b;
} ktask_t;

kern_return_t v0rtex(task_t *tfp0, kptr_t *kslide, kptr_t *kernucred)
kern_return_t v0rtex(task_t *tfp0, kptr_t *kslide, kptr_t *kernucred, kptr_t *selfproc)
{
kern_return_t retval = KERN_FAILURE,
ret;
@@ -1216,6 +1216,7 @@ kern_return_t v0rtex(task_t *tfp0, kptr_t *kslide, kptr_t *kernucred)
*tfp0 = kernel_task;
*kslide = slide;
*kernucred = kern_ucred;
*selfproc = self_proc;
retval = KERN_SUCCESS;

out5:;
@@ -7,19 +7,19 @@
objects = {

/* Begin PBXBuildFile section */
B544A5C61FEB2F3400AA5749 /* bootstrap.tar in Resources */ = {isa = PBXBuildFile; fileRef = B544A5C51FEB2F3400AA5749 /* bootstrap.tar */; };
B58B32401FE4EBA300EB7B47 /* kernel.m in Sources */ = {isa = PBXBuildFile; fileRef = B58B323D1FE4EBA300EB7B47 /* kernel.m */; };
B58B32441FE4ED3B00EB7B47 /* ls in Resources */ = {isa = PBXBuildFile; fileRef = B58B32431FE4ED3B00EB7B47 /* ls */; };
B58B32461FE4ED6300EB7B47 /* symbols.m in Sources */ = {isa = PBXBuildFile; fileRef = B58B32451FE4ED6300EB7B47 /* symbols.m */; };
B58B32491FE4F3DF00EB7B47 /* root-rw.m in Sources */ = {isa = PBXBuildFile; fileRef = B58B32481FE4F3DF00EB7B47 /* root-rw.m */; };
B58B325C1FE525A300EB7B47 /* dropbear.plist in Resources */ = {isa = PBXBuildFile; fileRef = B58B325A1FE525A300EB7B47 /* dropbear.plist */; };
B5BB8F791FE4D97800B60FDC /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = B5BB8F781FE4D97800B60FDC /* README.md */; };
B5C5C5CD1FE9A9A60022D2EC /* dropbear in Resources */ = {isa = PBXBuildFile; fileRef = B5C5C5CC1FE9A9A60022D2EC /* dropbear */; };
B5C5C5D31FE9C51A0022D2EC /* amfi.m in Sources */ = {isa = PBXBuildFile; fileRef = B5C5C5D21FE9C51A0022D2EC /* amfi.m */; };
B5C5C5D61FE9DADC0022D2EC /* bash in Resources */ = {isa = PBXBuildFile; fileRef = B5C5C5D51FE9DADC0022D2EC /* bash */; };
B5C5C5DE1FE9EF670022D2EC /* launchctl in Resources */ = {isa = PBXBuildFile; fileRef = B5C5C5DD1FE9EF660022D2EC /* launchctl */; };
B5E66A511FE6D8A800C7530E /* patchfinder64.c in Sources */ = {isa = PBXBuildFile; fileRef = B5E66A501FE6D8A800C7530E /* patchfinder64.c */; };
B5E66A5A1FE824FD00C7530E /* tar in Resources */ = {isa = PBXBuildFile; fileRef = B5E66A591FE824FD00C7530E /* tar */; };
B5E66A5C1FE86DD900C7530E /* libjb.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B5E66A5B1FE86DD900C7530E /* libjb.a */; };
B5ED69081FEAFA1500D5DCC7 /* dropbear in Resources */ = {isa = PBXBuildFile; fileRef = B5ED69071FEAFA1500D5DCC7 /* dropbear */; };
EE5169281FDC2A7000805460 /* v0rtex.m in Sources */ = {isa = PBXBuildFile; fileRef = EE5169271FDC2A7000805460 /* v0rtex.m */; };
EE5252AE1FDA4F2F00993801 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = EE5252AD1FDA4F2F00993801 /* AppDelegate.m */; };
EE5252B11FDA4F2F00993801 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EE5252B01FDA4F2F00993801 /* ViewController.m */; };
@@ -31,17 +31,16 @@
/* End PBXBuildFile section */

/* Begin PBXFileReference section */
B544A5C51FEB2F3400AA5749 /* bootstrap.tar */ = {isa = PBXFileReference; lastKnownFileType = archive.tar; path = bootstrap.tar; sourceTree = "<group>"; };
B58B323D1FE4EBA300EB7B47 /* kernel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = kernel.m; sourceTree = "<group>"; };
B58B323F1FE4EBA300EB7B47 /* kernel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = kernel.h; sourceTree = "<group>"; };
B58B32431FE4ED3B00EB7B47 /* ls */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = ls; sourceTree = "<group>"; };
B58B32451FE4ED6300EB7B47 /* symbols.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = symbols.m; sourceTree = "<group>"; };
B58B32471FE4EDCF00EB7B47 /* symbols.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = symbols.h; sourceTree = "<group>"; };
B58B32481FE4F3DF00EB7B47 /* root-rw.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "root-rw.m"; sourceTree = "<group>"; };
B58B324A1FE4F3F900EB7B47 /* root-rw.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "root-rw.h"; sourceTree = "<group>"; };
B58B32561FE5237000EB7B47 /* libjb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = libjb.h; sourceTree = "<group>"; };
B58B325A1FE525A300EB7B47 /* dropbear.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = dropbear.plist; sourceTree = "<group>"; };
B5BB8F781FE4D97800B60FDC /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
B5C5C5CC1FE9A9A60022D2EC /* dropbear */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = dropbear; sourceTree = "<group>"; };
B5C5C5D21FE9C51A0022D2EC /* amfi.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = amfi.m; sourceTree = "<group>"; };
B5C5C5D41FE9C8CC0022D2EC /* amfi.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = amfi.h; sourceTree = "<group>"; };
B5C5C5D51FE9DADC0022D2EC /* bash */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = bash; sourceTree = "<group>"; };
@@ -50,6 +49,7 @@
B5E66A501FE6D8A800C7530E /* patchfinder64.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = patchfinder64.c; sourceTree = "<group>"; };
B5E66A591FE824FD00C7530E /* tar */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = tar; sourceTree = "<group>"; };
B5E66A5B1FE86DD900C7530E /* libjb.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libjb.a; sourceTree = "<group>"; };
B5ED69071FEAFA1500D5DCC7 /* dropbear */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = dropbear; sourceTree = "<group>"; };
EE5169271FDC2A7000805460 /* v0rtex.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = v0rtex.m; sourceTree = "<group>"; };
EE5169291FDC2C9D00805460 /* common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = common.h; sourceTree = "<group>"; };
EE5252A91FDA4F2F00993801 /* v0rtex.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = v0rtex.app; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -102,10 +102,10 @@
children = (
EEAC27D31FDDB0A3003C1801 /* Supporting Files */,
B5C5C5D51FE9DADC0022D2EC /* bash */,
B5C5C5CC1FE9A9A60022D2EC /* dropbear */,
B544A5C51FEB2F3400AA5749 /* bootstrap.tar */,
B5ED69071FEAFA1500D5DCC7 /* dropbear */,
B58B325A1FE525A300EB7B47 /* dropbear.plist */,
B5C5C5DD1FE9EF660022D2EC /* launchctl */,
B58B32431FE4ED3B00EB7B47 /* ls */,
B5E66A591FE824FD00C7530E /* tar */,
EE5252BB1FDA4F2F00993801 /* main.m */,
EE5252AC1FDA4F2F00993801 /* AppDelegate.h */,
@@ -117,6 +117,8 @@
EE5169271FDC2A7000805460 /* v0rtex.m */,
B58B323F1FE4EBA300EB7B47 /* kernel.h */,
B58B323D1FE4EBA300EB7B47 /* kernel.m */,
B5C5C5D21FE9C51A0022D2EC /* amfi.m */,
B5C5C5D41FE9C8CC0022D2EC /* amfi.h */,
B58B32451FE4ED6300EB7B47 /* symbols.m */,
B58B32471FE4EDCF00EB7B47 /* symbols.h */,
B58B32481FE4F3DF00EB7B47 /* root-rw.m */,
@@ -125,8 +127,6 @@
B58B32561FE5237000EB7B47 /* libjb.h */,
B5E66A501FE6D8A800C7530E /* patchfinder64.c */,
B5E66A4F1FE6D8A700C7530E /* patchfinder64.h */,
B5C5C5D21FE9C51A0022D2EC /* amfi.m */,
B5C5C5D41FE9C8CC0022D2EC /* amfi.h */,
);
path = "v0rtex-S";
sourceTree = "<group>";
@@ -208,16 +208,16 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
B58B32441FE4ED3B00EB7B47 /* ls in Resources */,
B5ED69081FEAFA1500D5DCC7 /* dropbear in Resources */,
B5C5C5D61FE9DADC0022D2EC /* bash in Resources */,
EE5252B91FDA4F2F00993801 /* LaunchScreen.storyboard in Resources */,
B5C5C5DE1FE9EF670022D2EC /* launchctl in Resources */,
B5E66A5A1FE824FD00C7530E /* tar in Resources */,
EE5252B61FDA4F2F00993801 /* Assets.xcassets in Resources */,
B5BB8F791FE4D97800B60FDC /* README.md in Resources */,
EE5252B41FDA4F2F00993801 /* Main.storyboard in Resources */,
B544A5C61FEB2F3400AA5749 /* bootstrap.tar in Resources */,
B58B325C1FE525A300EB7B47 /* dropbear.plist in Resources */,
B5C5C5CD1FE9A9A60022D2EC /* dropbear in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};