Created
January 21, 2014 23:57
-
-
Save kylehowells/8550985 to your computer and use it in GitHub Desktop.
Pseudo code for the function which launches iOS apps in SpringBoard on iOS 7.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function sub_10001d783 { | |
r12 = rdi; | |
r13 = *objc_msgSend; | |
rax = [*(r12 + 0x20) bundleIdentifier]; | |
r14 = rax; | |
rax = [*(r12 + 0x20) isWebApplication]; | |
if (rax != 0x0) { | |
r13 = *objc_msgSend; | |
rax = (r13)(*(r12 + 0x20), @selector(displayIdentifier)); | |
rax = (r13)(rax, *objc_sel_copy); | |
r15 = rax; | |
*0x1004effa0 = r15; | |
rax = (r13)(*(r12 + 0x20), @selector(displayName)); | |
rcx = rax; | |
loc_1001d4aa8(@"SBWorkspaceLogging", @"Web app: activating %@ (%@)", r15, rcx); | |
} | |
r15 = 0x0; | |
if (*(int8_t *)(r12 + 0x40) == 0x0) { | |
rax = [*(r12 + 0x28) activationFlag:0x3]; | |
if (rax == 0x0) { | |
rax = [*(r12 + 0x28) displayFlag:0x12]; | |
if (rax == 0x0) { | |
rax = [*(r12 + 0x28) displayFlag:0x13]; | |
if (rax == 0x0) { | |
rax = [*(r12 + 0x28) activationFlag:0x1a]; | |
r15 = rax ^ 0x1; | |
} | |
} | |
} | |
} | |
r13 = *objc_msgSend; | |
rbx = r15 & 0xff; | |
(r13)(*(r12 + 0x28), @selector(setDisplaySetting:flag:), 0x2, rbx); | |
(r13)(*(r12 + 0x28), @selector(setActivationSetting:flag:), 0x1a, (rbx ^ 0x1) & 0xff); | |
(r13)(*(r12 + 0x28), @selector(setActivationSetting:flag:), 0x2, *(int8_t *)(r12 + 0x40) & 0xff); | |
(r13)(*(r12 + 0x28), @selector(setActivationSetting:value:), 0x4, *(r12 + 0x30)); | |
rax = (r13)(*0x1004f0060, @selector(bksWorkspace)); | |
rbx = r13; | |
r15 = rax; | |
if (*(int8_t *)(r12 + 0x40) != 0x0) { | |
rax = [*(r12 + 0x28) activationSettings]; | |
if (*(r12 + 0x38) != 0x0) { | |
(*(rdi + 0x10))(); | |
} | |
else { | |
[r15 activate:r14 withActivation:rax]; | |
} | |
rax = (rbx)(*(r12 + 0x28), @selector(activationState)); | |
asm{ sete al }; | |
(rbx)(*(r12 + 0x28), @selector(setDisplaySetting:flag:), 0x1, rax & 0xff); | |
(rbx)(*(r12 + 0x28), @selector(setDisplaySetting:flag:), 0x2, 0x0); | |
(rbx)(*(r12 + 0x28), @selector(setDisplaySetting:flag:), 0x12, 0x0); | |
(rbx)(*(r12 + 0x28), @selector(setDisplaySetting:flag:), 0x13, 0x0); | |
(rbx)(*(r12 + 0x28), @selector(setDisplaySetting:flag:), 0x14, 0x0); | |
(rbx)(*(r12 + 0x28), @selector(setDisplaySetting:value:), 0xc, 0x0); | |
(rbx)(*(r12 + 0x28), @selector(setDisplaySetting:value:), 0xd, 0x0); | |
(rbx)(*(r12 + 0x28), @selector(setDisplaySetting:value:), 0xe, 0x0); | |
(rbx)(*(r12 + 0x28), @selector(setDisplaySetting:value:), 0xf, 0x0); | |
(rbx)(*(r12 + 0x28), @selector(setDisplaySetting:flag:), 0x10, 0x0); | |
(rbx)(*(r12 + 0x28), @selector(setDisplaySetting:flag:), 0x11, 0x0); | |
rdi = *(r12 + 0x28); | |
rax = rbx; | |
rax = (rax)(rdi, @selector(clearActivationSettings)); | |
} | |
else { | |
rax = [*(r12 + 0x20) shouldLaunchPNGless]; | |
if (rax != 0x0) { | |
[*(r12 + 0x20) setActivationSetting:0x9 flag:0x1]; | |
} | |
rax = [SBAssistantController isAssistantVisible]; | |
if (rax != 0x0) { | |
[*(r12 + 0x20) setActivationSetting:0x25 flag:0x1]; | |
} | |
rax = (rbx)(*objc_classref_SBNotificationCenterController, @selector(sharedInstanceIfExists)); | |
rax = (rbx)(rax, @selector(isVisible)); | |
if (rax != 0x0) { | |
[*(r12 + 0x20) setActivationSetting:0x24 flag:0x1]; | |
} | |
rax = (rbx)(*objc_classref_SBControlCenterController, @selector(sharedInstanceIfExists)); | |
rax = (rbx)(rax, @selector(isVisible)); | |
if (rax != 0x0) { | |
[*(r12 + 0x20) setActivationSetting:0x2b flag:0x1]; | |
} | |
rax = (rbx)(r15, @selector(topApplication)); | |
rax = (rbx)(*0x1004f0060, @selector(_applicationForBundleIdentifier:frontmost:), rax, 0x1); | |
r14 = rax; | |
rax = (rbx)(*0x1004f0060, @selector(_selectTransactionForAppActivationToApp:activationHandler:), *(r12 + 0x20), *(r12 + 0x38)); | |
rax = (rbx)(*0x1004f0060, @selector(setCurrentTransaction:), rax); | |
if (r14 != *(r12 + 0x20)) { | |
rdx = r14; | |
rax = [*0x1004f0060 updateInterruptedByCallSettingsFrom:rdx to:rcx]; | |
} | |
else { | |
return rax; | |
} | |
} | |
return rax; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment