Невозможно перехватить определенные библиотечные вызовы, используя MSHookFunction - PullRequest
3 голосов
/ 26 декабря 2011

У меня проблемы с использованием MSHookFunction () MobileSubstrate для перехвата определенных вызовов библиотечных функций.Например, перехват memcpy и memset вызывает сбой при запуске приложения, однако перехват memcmp работает нормально.

Я предполагаю, что это потому, что сам код перехвата использует эти вызовы функций?

Есть ли способ?подключить memcpy и memset на iOS?

Ответы [ 3 ]

0 голосов
/ 30 апреля 2013

У меня такая же ситуация для memcpy и opendir. iPhone 5, iOS6.1.2

MSHookFunction иногда возвращает нечетный (xxxx3) адрес как адрес оригинальной подпрограммы. Это нонсенс для ARM.

0 голосов
/ 06 января 2014

Я также сталкивался с этим, и я думаю, что причина сбоя в том, что функция, которую загрузчик возвращает в качестве dlsym для memcpy, на самом деле не настоящая функция, а заглушка для нее. Я сбросил адрес и байты, расшифровал 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

Как вы можете видеть, этот код относится к ПК и, возможно, поэтому MSHook не работает. Если вы попытаетесь подключить реальную функцию, ту, которую вызывает эта заглушка, - она ​​работает.

0 голосов
/ 05 марта 2012

Я никогда не доходил до сути этого. Я подумал, что, возможно, MobileSubstrate вызывает функции на той же странице памяти, которую я пытаюсь перехватить, и поэтому средства защиты mem все испортились.

Я справился с этим, написав свою собственную функцию перехвата.

...