开发者

Making a daemon for a jailbroken iOS

I have been looking for a way to launch daemons on the iPhone and I created a little test application with Xcode by learning from the ants application's source code, which taught me that I should use launchctl But unfortunately it is not working.

I have installed my application with SSH on my iPod Touch in /Applications/, I then launch it with SSH thru the account mobile and my log says this:

Script started on Thu Feb 24 19:33:28 2011
bash-3.2$ ssh mobile@192.168.1.8
mobile@192.168.1.8's password: 
iPod-van-Henri:~ mobile$ cd /Applications
iPod-van-Henri:/Applications mobile$ cd DaemonUtility.app/
iPod-van-Henri:/Applications/DaemonUtility.app mobile$ ./DaemonUtility 
2011-02-24 19:35:08.022 DaemonUtility[1369:107] Read 0 bytes
2011-02-24 19:35:09.021 DaemonUtility[1369:107] Read 0 bytes
2011-02-24 19:35:10.021 DaemonUtility[1369:10开发者_StackOverflow中文版7] Read 0 bytes
2011-02-24 19:35:11.021 DaemonUtility[1369:107] Read 0 bytes
Bug: launchctl.c:2367 (24307):13: (dbfd = open(g_job_overrides_db_path, O_RDONLY | O_EXLOCK | O_CREAT, S_IRUSR | S_IWUSR)) != -1
launchctl: CFURLWriteDataAndPropertiesToResource(/private/var/stash/Applications.pwn/DaemonUtility.app/com.developerief2.daemontest.plist) failed: -10
launch_msg(): Socket is not connected
2011-02-24 19:35:12.039 DaemonUtility[1369:107] Read 0 bytes
2011-02-24 19:35:13.021 DaemonUtility[1369:107] Read 0 bytes
2011-02-24 19:35:14.021 DaemonUtility[1369:107] Read 0 bytes
2011-02-24 19:35:15.021 DaemonUtility[1369:107] Read 0 bytes
2011-02-24 19:35:16.021 DaemonUtility[1369:107] Read 0 bytes
2011-02-24 19:35:17.021 DaemonUtility[1369:107] Read 0 bytes
2011-02-24 19:35:18.021 DaemonUtility[1369:107] Read 0 bytes
2011-02-24 19:35:19.021 DaemonUtility[1369:107] Read 0 bytes
2011-02-24 19:35:20.021 DaemonUtility[1369:107] Read 0 bytes
2011-02-24 19:35:21.021 DaemonUtility[1369:107] Read 0 bytes
2011-02-24 19:35:22.021 DaemonUtility[1369:107] Read 0 bytes
2011-02-24 19:35:23.021 DaemonUtility[1369:107] Read 0 bytes
2011-02-24 19:35:24.021 DaemonUtility[1369:107] Read 0 bytes
2011-02-24 19:35:25.021 DaemonUtility[1369:107] Read 0 bytes
^C
iPod-van-Henri:/Applications/DaemonUtility.app mobile$ exit
logout
Connection to 192.168.1.8 closed.

bash-3.2$ exit
exit

Script done on Thu Feb 24 19:34:49 2011

When I launch it with the root (doing it with su), I get the daemon to run, but it doesn't do anything.

My daemon should display a UIViewAlert every ten seconds since it's launch:

**main.m (Daemon)**
//
//  main.m
//  DaemonTest
//
//  Created by ief2 on 23/02/11.
//

#import <UIKit/UIKit.h>

@interface DAAppDelegate : NSObject <UIApplicationDelegate> {
    NSDate *_startupDate;
    NSTimer *_messageTimer;
}
@property (nonatomic, retain) NSDate *startupDate;
@end

@interface DAAppDelegate (PrivateMethods)
- (void)showMessage:(NSTimer *)timer;
@end

@implementation DAAppDelegate
@synthesize startupDate=_startupDate;

- (void)dealloc {
    [_startupDate dealloc];
    [_messageTimer dealloc];

    [super dealloc];
}

- (void)applicationDidFinishLaunching:(UIApplication *)theApplication {
    UIAlertView *myView;
    myView = [[UIAlertView alloc] initWithTitle:@"Daemon Launched" 
                                        message:@"The daemon was launched"
                                       delegate:nil
                              cancelButtonTitle:@"OK"
                              otherButtonTitles:nil];
    [myView show];
    [myView release];

    self.startupDate = [NSDate date];

    NSTimer *myTimer = [NSTimer scheduledTimerWithTimeInterval:10 
                                                        target:self
                                                      selector:@selector(showMessage:) 
                                                      userInfo:nil
                                                       repeats:YES];
    _messageTimer = [myTimer retain];
}

- (void)applicationWillTerminate:(UIApplication *)theApplication {
    [_messageTimer invalidate];

    UIAlertView *myView;
    myView = [[UIAlertView alloc] initWithTitle:@"Daemon Terminated" 
                                        message:@"The daemon was terminated"
                                       delegate:nil
                              cancelButtonTitle:@"OK"
                              otherButtonTitles:nil];
    [myView show];
    [myView release];
}

- (void)showMessage:(NSTimer *)timer {
    NSTimeInterval mySec;
    mySec = [self.startupDate timeIntervalSinceNow];
    NSString *format = [NSString stringWithFormat:
                        @"The daemon has been running for %llu seconds",
                        (unsigned long long)mySec];
    UIAlertView *myView;
    myView = [[UIAlertView alloc] initWithTitle:@"Daemon Message" 
                                        message:format 
                                       delegate:nil 
                              cancelButtonTitle:@"OK" 
                              otherButtonTitles:nil];
    [myView show];
    [myView release];
}
@end


int main(int argc, const char **argv) {
    NSAutoreleasePool *mainPool = [[NSAutoreleasePool alloc] init];

    UIApplicationMain(argc, (char **)argv, nil, @"DAAppDelegate");

    [mainPool drain];
    return 0;
}

The full application's source code can be found on my computer:

http://81.82.20.197/DaemonTest.zip

Thank you in advance,

ief2


You are working too hard. All you need to do is create a .plist file with the app identifier and path in it and add it to the /System/Library/LaunchDaemon folder. Then make sure your app is in the /Applications folder. Reboot and it will work each time the phone is booted.

Google "Chris Alvares daemon" and look at his tutorial...


i don't think launchD can trigger GUI-level apps. Anything that is "Aqua" level has to be a "StartupItem" or a "Login Item". You can still start them as root, based on where they are started from, and who they are owned by, but launchd doesn't touch that stuff... I dont think you can even have a menu bar icon if you want launchd to handle it....

also if you are talking jailbroken iphones... if you wan to open a GUI app from the "mobileterminal" you should look in Cydia for the app that "does that". it's not as easy as just launching the executable.. there is some funky springboard interaction.. that that utility takes care of. it is callled...... "AppsThruTerm" (bigboss repo) once installed.. you launch your "app" with the command att blahblahblah

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜