无法使用MSHookFunction挂钩某些库调用

时间:2011-12-26 14:00:43

标签: c++ ios hook jailbreak tweak

我在使用MobileSubstrate的MSHookFunction()来挂钩某些库函数调用时遇到了麻烦。 例如,挂钩memcpy和memset导致应用程序启动时崩溃,但挂钩memcmp工作正常。

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

有没有办法在iOS上挂钩memcpy和memset?

3 个答案:

答案 0 :(得分:0)

我从来没有深究这一点。我在想,也许MobileSubstrate会在我试图挂钩的同一个内存页面中调用函数,因此内存保护会全部搞砸。

我通过编写自己的挂钩功能来解决这个问题。

答案 1 :(得分:0)

我对memcpy和opendir有同样的情况。 iPhone 5,iOS6.1.2

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

答案 2 :(得分:0)

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

; void *memcpy_0(void *, const void *, size_t)
__picsymbolstub4:3947B37C                 EXPORT _memcpy_0
__picsymbolstub4:3947B37C _memcpy_0                               ; CODE XREF: _strlcpy+22p
__picsymbolstub4:3947B37C                                         ; _strlcpy+32p ...
__picsymbolstub4:3947B37C                 LDR             R12, =(_memcpy_ptr - 0x3947B388) ; j__memcpy
__picsymbolstub4:3947B380                 ADD             R12, PC, R12 ; _memcpy_ptr
__picsymbolstub4:3947B384                 LDR             PC, [R12] ; _memcpy
__picsymbolstub4:3947B384 ; End of function _memcpy_0
__picsymbolstub4:3947B388 off_3947B388    DCD _memcpy_ptr - 0x3947B388

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