【问题标题】:Cannot hook certain library calls using MSHookFunction无法使用 MSHookFunction 挂钩某些库调用
【发布时间】:2011-12-26 14:00:42
【问题描述】:

我在使用 MobileSubstrate 的 MSHookFunction() 挂钩某些库函数调用时遇到问题。 例如,挂钩 memcpy 和 memset 会导致应用启动时崩溃,但挂钩 memcmp 可以正常工作。

我认为这是因为挂钩代码本身使用了那些函数调用?

有什么方法可以在 iOS 上挂钩 memcpy 和 memset 吗?

【问题讨论】:

  • 嗨,David,您能分享一下您如何成功挂钩 opendir 的代码吗?

标签: c++ ios hook jailbreak tweak


【解决方案1】:

我从来没有深究过这个。我在想也许 MobileSubstrate 调用了我试图挂钩的同一内存页面中的函数,因此内存保护变得一团糟。

我通过编写自己的挂钩函数解决了这个问题。

【讨论】:

  • 你有MSHookFunction的源码吗?我尝试从 saurik git reposistory 下载它的源代码。但是当我试图编译它时我被杀了。我只需要函数 MShookFunction 即可。
  • @David Kaplan 你能帮我使用这个类吗?它说找不到 MSHookfunction() pastie.org/1882125
  • @DavidKaplan 我被推荐到这里是因为有人来到 IRC 上的#substrate 指向这个 StackOverflow 帖子,听起来你的“正确”答案表明解决这个问题的唯一方法是编写你自己的挂钩代码。它鼓励他们甚至不必费心解释他们的问题,就像可用的选项是 1)如果它是开源的,则自己修复它,或者 2)弄清楚它是如何工作的并重新实现它:/。这里的正确答案可能是说被钩住的函数只是一个存根的人。我可以看看在一般情况下是否可以挂钩存根。
【解决方案2】:

memcpy 和 opendir 的情况相同。 iPhone 5、iOS6.1.2

MSHookFunction 有时会返回奇数 (xxxx3) 地址作为原始例程的地址。这对 ARM 来说是无稽之谈。

【讨论】:

  • 实现自己的钩子函数即可。
  • @DavidKaplan 因此,首先,Supercedes 的问题令人困惑,因此应该在之后询问更多信息;在这种情况下,原始函数是什么,“返回”是什么意思(这是 out 指针参数吗?)...奇数地址在 ARM 上绝对有效:它们是您如何将地址表示为用 Thumb 编码的函数.应该鼓励人们一起工作,提交错误报告,而不是“仅仅实现你自己的”。如果这是一个真正的问题,其他人可能会遇到它;如果不是,他们应该试图找出正在发生的事情。无论哪种方式:你都没有帮助:(。
【解决方案3】:

我也遇到过这个,我认为失败的原因是加载程序作为 memcpy 的 dlsym 返回的函数实际上不是真正的函数,而是它的存根。我已经转储了地址和字节,解除了 libsystem_c 的缓存,并验证了 dlsym(RTLD_DEFAULT, "memcpy") 将以下函数返回给我

; void *memcpy_0(void *, const void *, size_t) __picsymbolstub4:3947B37C 导出 _memcpy_0 __picsymbolstub4:3947B37C _memcpy_0 ;代码外部参考:_strlcpy+22p __picsymbolstub4:3947B37C ; _strlcpy+32p ... __picsymbolstub4:3947B37C LDR R12,=(_memcpy_ptr - 0x3947B388); j__memcpy __picsymbolstub4:3947B380 添加 R12,PC,R12; _memcpy_ptr __picsymbolstub4:3947B384 LDR PC,[R12]; _memcpy __picsymbolstub4:3947B384 ;函数_memcpy_0结束 __picsymbolstub4:3947B388 off_3947B388 DCD _memcpy_ptr - 0x3947B388

如您所见,此代码与 PC 相关,这可能是 MSHook 失败的原因。 如果您尝试挂钩真正的函数,这个存根调用的函数 - 它可以工作。

【讨论】:

  • 可能是因为存根对于蹦床 MobileSubstrate 正在执行的操作来说太短了。一个 ARM 蹦床虽然只有 8 个字节...
猜你喜欢
  • 2021-09-08
  • 1970-01-01
  • 1970-01-01
  • 2020-08-13
  • 2021-12-07
  • 1970-01-01
  • 2021-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多