iphone - 移动基板 : MSHookFunction example

标签 iphone jailbreak

我正在尝试编写一个 Hook C 方法的 MobileSubstrate 插件。我尝试通过编写一个演示 MSHook 并将其挂接到 Initialize 方法中来编辑著名的“ExampleHook”。 这可能过于乐观,而且行不通。但我在任何地方都找不到 MSHookFunction() 的简单示例。互联网上几乎没有这方面的信息。我可能误解了 MSHookFunction 的整个概念。

请问有人可以帮我提供一些示例代码吗?我将非常感谢任何帮助。

最诚挚的问候, 马克·巴克斯

最佳答案

我知道您已经找到了这个,但我发布这个答案是为了帮助其他可能需要这个的人。

一个简单的例子可以在 the MobileSubstrate article 找到。在 iPhone Dev Wiki 上,项目中的实际示例是 at this bit 用户代理 Faker

但是没有实际解释的答案是什么?因此,我们开始吧!

void MSHookFunction(void* function, void* replacement, void** p_original);MSHookFunction 的函数定义,它是导致您的函数的神奇函数例如,>X()Y() 插入。

也就是说,当程序通常调用X()时,该调用将被重定向到Y()。这几乎是函数插入的基本解释。

现在,参数是什么以及它们的用处?

  • function 是指向您要插入的函数的函数指针。在我们的快速解释中,这将是一个指向 X() 的函数指针。
  • replacement 是一个函数指针,指向您想要插入 function 的函数。在我们的快速解释中,这将是一个指向 Y() 的函数指针。
  • p_original 是一个指向函数指针的指针,从现在开始它将指向以前的function

    原因很简单:如果您打算修改行为,而不是抑制它,您仍然需要调用以前的 X() 。但对 X() 的常见调用将无法按预期工作,因为它将结束调用 Y() 而不是默认的 function

    因此,您有一个函数指针可以调用 X(),就好像它没有被插入一样。

现在,解释 devwiki 示例:

static void (*original_CFShow)(CFTypeRef obj);  // a function pointer to store the original CFShow().
void replaced_CFShow(CFTypeRef obj) {           // our replacement of CFShow().
  printf("Calling original CFShow(%p)...", obj);
  original_CFShow(obj);                         // calls the original CFShow.
  printf(" done.\n");
}
...
// hook CFShow to our own implementation.
MSHookFunction(CFShow, replaced_CFShow, &original_CFShow);
// From now on any call to CFShow will pass through replaced_CFShow first.
...
CFShow(CFSTR("test"));

在这里,我们:

  1. 将指针传递给 CFShow,我们希望将其作为 function 参数更改默认行为。
  2. 将指针传递给我们刚刚创建的函数,replaced_CFShow 作为replacement 参数。也就是说,每当默认情况下调用 CFShow 时,都会调用 replaced_CFShow
  3. 我们将指向 original_CFShow 函数指针的指针作为 p_original 参数传递。由于我们仍然希望 CFShow 本身仍然完成的事情在我们的替换函数中完成,因此我们调用它。

关于iphone - 移动基板 : MSHookFunction example,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5943653/

相关文章:

iphone - 如何从命令行运行 UIAutomation 脚本到模拟器

ios - 在越狱的应用程序中以编程方式编辑 Info.plist

iphone - 连接到 iOS 4 上的 MobileMusicPlayer

ios - 越狱对iOS开发有影响吗?

iphone - iOS应用内购买记录购买的商品

iphone - iOS:Interface Builder 的困惑

ios - 弹出到导航堆栈中的特定 View Controller

iPhone越狱开发简介

iphone - 让 iOS 签名的应用程序在越狱设备上执行未签名的应用程序

iphone - 观察 UITabBar 何时对 Delegate 隐藏