Skip to content

Instantly share code, notes, and snippets.

@kylehowells
Created January 21, 2014 23:57
Show Gist options
  • Save kylehowells/8550985 to your computer and use it in GitHub Desktop.
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.
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