iOS Daemon app will not start (Jailbreak) - how to debug?

后端 未结 1 1221
说谎
说谎 2021-02-06 11:44

I\'m building a daemon app for a jailbroken iPhone and followed the guidelines as described in several questions and answers here on stackoverflow and ofcourse Chris Alvares\' w

1条回答
  •  忘掉有多难
    2021-02-06 12:18

    As I said in my comment, first try to make sure your daemon executable is runnable:

    1. login to your device as root, via ssh
    2. execute the command /Applications/NoUIDameon.app/NoUIDaemon at the command line
    3. check to see if it's running with ps -Aef | grep NoUIDaemon

    If it's not running, I would check to make sure that your build process is fake code-signing the NoUIDaemon executable. Jailbroken phones don't require a valid signature, but they still do require a signature. Also, if it doesn't run (or stay running), it might help for you to post the code from your daemon's main program (e.g. main.m):

    int main(int argc, char *argv[]) {
       // what's in here?
    }
    

    If that does work, and it runs when you start it manually (but not automatically), then check:

    1. is the plist file above named dmn.NoUIDaemon.plist?
    2. I think this is actually an error in Chris's blog, but the Label value in your plist should be dmn.NoUIDaemon, not dmn.NoUIDaemon.plist. I don't think this would prevent your daemon from running, I think it's just being consistent with the naming convention of system launch daemons.
    3. I don't think just installing the plist file in /System/Library/LaunchDaemons is enough to start the daemon. You probably need to either reboot the phone, or manually launch the daemon with launchctl load -w /System/Library/LaunchDaemons/dmn.NoUIDaemon.plist
    4. check to make sure the file permissions and ownership of your dmn.NoUIDaemon.plist are the same as the other launch daemon plists in /System/Library/LaunchDaemons.
    5. I'm not sure if this is necessary, but I think the name of the daemon (the Label and the name of the plist file) are supposed to match the bundle ID specified in your NoUIDaemon-Info.plist file. So, the Info.plist should have:
        CFBundleExecutable
        NoUIDaemon
        CFBundleIdentifier
        dmn.${PRODUCT_NAME:rfc1034identifier}
    

    or

        CFBundleExecutable
        NoUIDaemon
        CFBundleIdentifier
        dmn.NoUIDaemon
    

    Update:

    Also, I don't think your daemon's main program should have a call to UIApplicationMain. It's not supposed to be a UIApplication. It's supposed to be a background process, right? If you look on Page 1 of Chris's blog, it shows an example. Here's an example from one of mine:

    int main(int argc, char *argv[]) {
       @autoreleasepool {
          SignalMonitor* daemon = [[SignalMonitor alloc] init];
    
          // start a timer so that the process does not exit.
          NSTimer* timer = [[NSTimer alloc] initWithFireDate: [NSDate date]
                                                    interval: 1.0
                                                      target: daemon
                                                    selector: @selector(setup:)
                                                    userInfo: nil
                                                     repeats: NO];
    
          NSRunLoop* runLoop = [NSRunLoop currentRunLoop];
          [runLoop addTimer: timer forMode: NSDefaultRunLoopMode];
          [runLoop run];
       }
    
       return 0;
    }
    

    Also, here's a copy of my daemon's plist file (Info.plist), with your daemon name in it:

    
    
    
    
            CFBundleDevelopmentRegion
            English
            CFBundleExecutable
            NoUIDaemon
            CFBundleIdentifier
            dmn.NoUIDaemon
            CFBundleInfoDictionaryVersion
            6.0
            CFBundleName
            ${PRODUCT_NAME}
            CFBundlePackageType
            APPL
            CFBundleShortVersionString
            1.0
            CFBundleSignature
            ????
            CFBundleVersion
            1.0-0
            LSRequiresIPhoneOS
            
            LSApplicationCategoryType
            
    
    
    

    0 讨论(0)
提交回复
热议问题