如何响应iDevice?

时间:2012-11-07 22:14:01

标签: iphone ios xcode jailbreak reboot

我正在尝试创建一个应用程序来重新启动并重新启动任何iDevice。我的代码在iOS模拟器中工作正常,但在我的iDevice上没有任何反应(是的,它是越狱)。

这是我的呼吸代码:

        if(system("killall SpringBoard"));

        if(system("killall -9 SpringBoard"));

        if (system([@ "reboot" UTF8String]));

        if ([[[UIDevice currentDevice] systemVersion] hasPrefix:@"2."])
            notify_post("com.apple.language.changed");

        if (system([@ "killall SpringBoard" UTF8String]));

这是我的重启代码:

if (system([@ "reboot" UTF8String]));

respring仅运行一次而不是停止工作:(

我的剧本:

#!/bin/sh

#  Script.sh
#  Respring
#
#  Created by David on 08.11.12.
#  Copyright (c) 2012 David. All rights reserved.

app binary - root:wheel 4755

script - root:wheel 0755

C=/${0}
C=${C%/*}
declare -a flags
[[ :${DYLD_INSERT_LIBRARIES}: == */MobileSubstrate.dylib: ]] && flags[${flags[@]}]=--substrate
exec "${C:-.}"/Respring "${flags[@]}" -- "$@" 2>>/tmp/Respring.log

这是我的alertView for respring并使用BugReport重启,如果呼吸不起作用

//Respring

-(IBAction)respring {

    UIAlertView *respring=[[UIAlertView alloc]initWithTitle:@"Respring"
                                                     message:@"Do you want to respring your iDevice?"
                                                    delegate:self
                                           cancelButtonTitle:@"No"
                                           otherButtonTitles:@"Yes", nil];
    respring.tag = 1;       
    [respring show];
}


//AlertView   
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {

    if (buttonIndex == 1){            
        if (alertView.tag ==1) {            
            setuid(0); system("killall i5MMS_");                

            UIAlertView *respringerror=[[UIAlertView alloc]initWithTitle:@"Error"
                                                                message:@"Respring is not possible, please send me an Bug Report."
                                                               delegate:self
                                                      cancelButtonTitle:@"OK"
                                                      otherButtonTitles:@"Send Bug Report",nil];                
                respringerror.tag = 3;                
                [respringerror show];                
        }

        if (alertView.tag ==2) {                
            if (system([@ "reboot" UTF8String]));

            UIAlertView *respringerror=[[UIAlertView alloc]initWithTitle:@"Error"
                                                                 message:@"Rebooting is not possible, please send me an Bug Report."
                                                                delegate:self
                                                       cancelButtonTitle:@"OK"
                                                       otherButtonTitles:@"Send Bug Report", nil];

            respringerror.tag = 4;                
            [respringerror show];            
        }                

    if (alertView.tag ==3) {            
        iDevice.text = [UIDevice currentDevice]. model;            
        ios.text = [UIDevice currentDevice]. systemVersion;            
        MFMailComposeViewController *composer = [[MFMailComposeViewController alloc] init];            
        [composer setMailComposeDelegate:self];            
        if ([MFMailComposeViewController canSendMail]) {                
            [composer setToRecipients:[NSArray arrayWithObjects:@"david.goelzhaeuser@me.com", nil]];                
            [composer setSubject:@"Bug Report"];                
            [composer setMessageBody: [NSString stringWithFormat: @"%@ \n%@ \n%@", ios.text,iDevice.text, jailbreakstatus.text]isHTML:NO];                
            [composer setModalTransitionStyle:UIModalTransitionStyleCoverVertical];                
            [composer setModalPresentationStyle:UIModalPresentationFormSheet];                
            [self presentModalViewController:composer animated:YES];
        }

    }

    if (alertView.tag ==4) {

        iDevice.text = [UIDevice currentDevice]. model;            
        ios.text = [UIDevice currentDevice]. systemVersion;            
        MFMailComposeViewController *composer = [[MFMailComposeViewController alloc] init];            
        [composer setMailComposeDelegate:self];    
        if ([MFMailComposeViewController canSendMail]) {                
            [composer setToRecipients:[NSArray arrayWithObjects:@"david.goelzhaeuser@me.com", nil]];                
            [composer setSubject:@"Bug Report"];
            [composer setMessageBody: [NSString stringWithFormat: @"%@ \n%@ \n%@", ios.text,iDevice.text, jailbreakstatus.text]isHTML:NO];                
            [composer setModalTransitionStyle:UIModalTransitionStyleCoverVertical];                
            [composer setModalPresentationStyle:UIModalPresentationFormSheet];                
            [self presentModalViewController:composer animated:YES];
        }


        }
    }
}


//Reboot

-(IBAction)reboot;{        
    UIAlertView *reboot=[[UIAlertView alloc]initWithTitle:@"Reboot"
                                                    message:@"Do you want to reboot your iDevice? If you have a tethered jailbreak you have to make a tethered boot after rebooting!"
                                                    delegate:self
                                                    cancelButtonTitle:@"No"
                                                    otherButtonTitles:@"Yes", nil];

    reboot.tag = 2;        
    [reboot show];        
}

1 个答案:

答案 0 :(得分:3)

示例

我会将我的应用命名为Respring

在我的应用代码中,我有RespringViewController.hRespringViewController.m

ResringViewController.h内,我会添加一个按钮来调用我的行动。

#import <UIKit/UIKit.h>

@interface RespringViewController : UIViewController
//Creates the button
- (IBAction) respring:(id)sender;

@end

现在在RespringViewController.m

#import "RespringViewController.h"

@interface RespringViewController ()

@end

@implementation RespringViewController
//This calls the button created in RespringViewController.h
- (IBAction) respring: (id) sender {
setuid(0); system("killall SpringBoard");
}
//This makes the view for the button programmatically
UIButton *button9 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [button9 addTarget:self
                action:@selector(respring:)
      forControlEvents:UIControlEventTouchUpInside];
    button9.frame = CGRectMake(96.0, 262.0, 130.0, 37.0);
    button9.adjustsImageWhenDisabled = YES;
    button9.adjustsImageWhenHighlighted = YES;
    button9.alpha = 1.000;
    button9.autoresizesSubviews = YES;
    button9.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleBottomMargin;
    button9.clearsContextBeforeDrawing = YES;
    button9.clipsToBounds = NO;
    button9.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
    button9.contentMode = UIViewContentModeScaleToFill;
    button9.contentStretch = CGRectFromString(@"{{0, 0}, {1, 1}}");
    button9.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
    button9.enabled = YES;
    button9.hidden = NO;
    button9.highlighted = NO;
    button9.multipleTouchEnabled = NO;
    button9.opaque = NO;
    button9.reversesTitleShadowWhenHighlighted = NO;
    button9.selected = NO;
    button9.showsTouchWhenHighlighted = NO;
    button9.tag = 0;
    button9.titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:15.000];
    button9.titleLabel.lineBreakMode = UILineBreakModeMiddleTruncation;
    button9.titleLabel.shadowOffset = CGSizeMake(0.0, 0.0);
    button9.userInteractionEnabled = YES;
    [button9 setTitle:NSLocalizedString(@"APPLY SETTINGS", nil) forState:UIControlStateNormal];
    [button9 setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    [button9 setTitleColor:[UIColor colorWithWhite:1.000 alpha:1.000] forState:UIControlStateHighlighted];
    [button9 setTitleShadowColor:[UIColor colorWithWhite:0.500 alpha:1.000] forState:UIControlStateNormal];

//Adds the button to the view
[view addSubview:button9];

现在我继续构建它并获取一个名为Respring.app

的文件

Respring.app内部有例如这些文件

  

的Info.plist

     

的icon.png

     

Respring

我必须将Respring内的Respring.app重命名为Respring_

现在我必须将以下脚本上传到/path/to/Respring.app/

#!/bin/bash
C=/${0}
C=${C%/*}
declare -a flags
[[ :${DYLD_INSERT_LIBRARIES}: == */MobileSubstrate.dylib: ]] && flags[${#flags[@]}]=--substrate
exec "${C:-.}"/Respring_ "${flags[@]}" -- "$@" 2>>/tmp/Respring.log

并将其命名为Respring

现在,您需要使用工具ldid

伪造代码对二进制文件进行签名

您可以下载here

从终端使用以下命令

sudo ldid -S /path/to/Respring.app/Respring_

请务必签署二进制文件而不是脚本

必须具备正确的权限才能使脚本以root用户身份从终端启动应用程序,您可以运行此

sudo chown 0:0 /path/to/Respring.app/Respring*

sudo chmod 0755 /path/to/Respring.app/Respring

sudo chmod 4755 /path/to/Respring.app/Respring_

现在一切都已完成,您可以启动该应用,任何日志都会立即存储在您设备的/tmp/Respring.log内,您可以使用该按钮进行重新播放。