0

我正在开发一个小调整来更改/var/preferences. 这是我的构造函数:

%ctor
{
    NSLog(@"\n\n\n Tweak Loading... \n\n\n ");

    NSError *error = [[NSError alloc] init];
    BOOL success = [[NSFileManager defaultManager] copyItemAtPath:somePath toPath:someOtherPath error:&error];
    if (success)
    {
        NSLog(@"\n\n\n Success:) \n\n\n ");
    } else {
        NSLog(@"\n\n\n Failure! \n\n\n ");
    }

    //Method hook initialization
    %init;
}

由于用户/var/preferences/无法访问,mobile因此应在根进程中加载​​调整。通过一点点搜索,我发现它wifid具有 root 权限。所以我改变了我的过滤器来com.apple.wifid过滤捆绑标识符。

在我重新启动 wifid 守护程序后,没有任何反应,并且没有加载调整。我认为这是这个特定守护进程的问题,所以我编写了一个简单的命令行工具用于测试,其中包含一个运行循环(它就像一个启动守护进程,但它没有在启动时运行的 plist)。然后我将 plist 修改为:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Filter</key>
    <dict>
        <key>Executables</key>
        <array>
            <string>myExecutableName</string>
        </array>
    </dict>
</dict>
</plist>

再次没有任何反应,并且没有加载调整。我怎么解决这个问题?为什么在这些过程中不加载此调整?

4

1 回答 1

0

这是一个非常“肮脏”的解决方案,只是为了以 root 身份运行(看似)不相关的任务,挂钩到 wifid 之类的 root 进程。就像 creker 所说,您可以改为将任务作为 LaunchDaemon 运行,甚至可以在以 root 身份运行的应用程序中运行任务。无论哪种方式都比挂钩到现有流程来做一些似乎与流程无关的事情更有意义。

于 2014-08-06T10:39:54.690 回答