【问题标题】:How to hook NSURLSession methods with theos?如何将 NSURLSession 方法与 theos 挂钩?
【发布时间】:2014-11-05 06:55:10
【问题描述】:

我使用rpetrich's theos 创建了一个调整项目并想挂钩 NSURLSession 方法,但挂钩似乎没有被调用?为什么?这是我的 Tweak.xm 代码:​​

%hook NSURLSession

- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request
                            completionHandler:(void (^)(NSData *data, NSURLResponse *response, NSError *error))completionHandler
{
    NSLog(@"testhook dataTaskWithRequest:completionHandler:");
    return %orig(request, completionHandler);
}

- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request
{
    NSLog(@"testhook dataTaskWithRequest");
    return %orig(request);
}

%end

%hook NSMutableURLRequest

+ (id)requestWithURL:(NSURL *)URL
{
    NSLog(@"testhook NSMutableURLRequest");
    return %orig(URL);
}

%end

我添加了NSMutableURLRequest 挂钩以确保正在加载文件和整个调整。我可以验证它确实挂钩 requestWithURL: 但不是任何 NSURLSession 方法。我正在测试来自NSURLSessionExample 的代码。

这里缺少什么?有人成功上钩了 NSURLSession 吗?

【问题讨论】:

  • 这个调整的过滤器是什么?另外:你用于钩子的语法是 Logos,而不是 Theos,所以你应该用它而不是 Theos 来标记问题。
  • @AehmloLxaitn 我使用了{ Filter = { Bundles = ( "com.ravi.NSURLSessionExample" ); }; },它是测试应用程序的捆绑包 ID。 NSMutableRequest 钩子起作用了,所以我想我的过滤器正确吗?我添加了logos 标签。无论如何我都输入了theos,因为logostheos 的子组件。

标签: iphone jailbreak nsurlsession theos logos


【解决方案1】:

NSURLSession 是一个类簇,您正在挂钩不包含(或很少)代码的顶级类。

您应该调查NSURLSession 的子类——可能通过在原位记录NSURLSession 对象的真实类。在我有限的测试中,我收到了一个对象,它的类真正命名为__NSURLSessionLocal

【讨论】:

  • 谢谢!这行得通!我将在我遇到的下一个我无法挂钩的课程上应用这种现场检查。在我这边是__NSCFURLSession。尝试猜测所有可能的子类名称会很棘手。
  • 我还有一个与此相关的问题。钩子在类集群上成功,但在调用%orig 时失败,但在将钩子放入真实的类名后,它完美地工作。 stackoverflow.com/questions/26602286/…
猜你喜欢
  • 2019-10-16
  • 1970-01-01
  • 1970-01-01
  • 2014-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 2019-12-02
相关资源
最近更新 更多