【问题标题】:hook NSFileManager::fileExistsAtPath (Jailbreak Tweak learning)hook NSFileManager::fileExistsAtPath(越狱调整学习)
【发布时间】:2015-04-08 10:26:49
【问题描述】:

我正在(尝试)学习开发越狱调整。目标是摆脱应用程序中的越狱保护(拒绝与越狱一起工作)。

我已经反编译了应用程序,并将以下代码识别为“越狱检查”:

  v24 = objc_msgSend(&OBJC_CLASS___NSMutableDictionary, "new");
  v0 = "defaultManager";
  v1 = objc_msgSend(&OBJC_CLASS___NSFileManager, "defaultManager");
  v2 = objc_retainAutoreleasedReturnValue(v1);
  v3 = (void *)v2;
  v23 = v2;
  v4 = (int)"stringWithFormat:";
  v5 = objc_msgSend(
         &OBJC_CLASS___NSString,
         "stringWithFormat:",
         CFSTR("/%@%@%@%@%@%@%@"),
         CFSTR("App"),
         CFSTR("lic"),
         CFSTR("ati"),
         CFSTR("ons/"),
         CFSTR("Cyd"),
         CFSTR("ia."),
         CFSTR("app"));
  v6 = objc_retainAutoreleasedReturnValue(v5);
  v7 = v6;
  v8 = objc_msgSend(v3, "fileExistsAtPath:", v6);
  if ( (unsigned __int8)v8 )
  {
    v9 = 1;
    v10 = 0;
    v21 = v8;
    v11 = 0;
    v22 = (void *)v8;
  }

应用程序检查 /Applications/Cydia.app 是否存在

这里是 Tweak.xm 的代码:

%hook NSFileManager

- (BOOL)fileExistsAtPath:(NSString *)path{
    if ([path rangeOfString:@"cydia"].location == NSNotFound) {
        return %orig (path);
    } else {
        %log
        return FALSE;
    }
}

%end

虽然我可以从 syslog 中看到正在检查其他文件,但我没有看到我们正在检查 /Applications/Cydia.app。这是我的代码有问题,还是仅仅是因为其他原因,这段代码永远不会执行?

【问题讨论】:

  • 您正在检查字符串@"cydia",全小写,而该方法将使用包含@"Cydia",大写C的路径调用
  • @stonesam92: 我已经尝试过一直使用 %log 但日志中什么也没有
  • 即使%log 作为函数的第一行? (目前永远不会到达%log 语句,因为它位于一个只有在参数包含@"cydia" 时才会执行的块中)
  • 会不会和获取NSFileManager类的defaultManager实例的代码有关?
  • 不,你正在挂钩一个实例方法,所以任何 NSFileManager 实例都应该使用你的替换方法。如果您将调试器附加到进程并在方法上设置断点,您能否验证它是否真正被调用过?

标签: ios objective-c jailbreak theos


【解决方案1】:

你可以改变“越狱检查”方法什么都不做。

%hook ClassName
- (void)jailbreakCheck {
}
%end

【讨论】:

    猜你喜欢
    • 2014-12-13
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2011-04-05
    • 2013-03-17
    • 2015-12-18
    • 2011-12-12
    • 2014-04-25
    相关资源
    最近更新 更多