iOS调整无法加载



我正在开发一个小调整,更改/var/preferences中的一些文件。下面是我的构造函数:

%ctor
{
    NSLog(@"nnn Tweak Loading... nnn ");
    NSError *error = [[NSError alloc] init];
    BOOL success = [[NSFileManager defaultManager] copyItemAtPath:somePath toPath:someOtherPath error:&error];
    if (success)
    {
        NSLog(@"nnn Success:) nnn ");
    } else {
        NSLog(@"nnn Failure! nnn ");
    }
    //Method hook initialization
    %init;
}

由于mobile用户无法访问/var/preferences/,因此应该在根进程中加载该调整。经过一点点搜索,我发现wifid具有根权限。因此,我将包标识符的过滤器更改为com.apple.wifid过滤器。

在我重新启动wifid守护进程后,没有任何事情发生,并且没有加载调整。我认为这是这个特定守护进程的问题,所以我写了一个简单的命令行工具,用于测试,其中有一个运行循环(它就像一个启动守护进程,而不是在启动时运行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>

同样没有发生任何变化,也没有加载调整。我该如何解决这个问题?为什么这个调整不能在这些过程中加载?

仅仅为了以root身份运行一个(看似)不相关的任务而挂钩到像wifid这样的根进程,这是一个非常"肮脏"的解决方案。就像creker说的,你可以把你的任务作为一个LaunchDaemon来运行,或者甚至在一个以root身份运行的应用程序中运行你的任务。这两种方法都比连接到一个现有的进程去做一些似乎与该进程无关的事情更有意义。

最新更新