3

MobileSubstrateのMSHookFunction()を使用して特定のライブラリ関数呼び出しをフックするのに問題があります。たとえば、memcpyとmemsetをフックすると、アプリの起動時にクラッシュが発生しますが、memcmpをフックすると正常に機能します。

これは、フックコード自体がこれらの関数呼び出しを使用しているためだと思いますか?

iOSでmemcpyとmemsetをフックする方法はありますか?

4

3 に答える 3

0

私はこれの底に到達したことはありません。MobileSubstrateがフックしようとしているのと同じメモリページで関数を呼び出す可能性があるため、mem保護がすべて台無しになると考えていました。

私は自分のフッキング関数を書くことでこれを回避しました。

于 2012-03-05T10:34:57.457 に答える
0

memcpyとopendirでも同じ状況になりました。iPhone 5、iOS6.1.2

MSHookFunctionは、元のルーチンのアドレスとして奇数(xxxx3)アドレスを返すことがあります。ARMにとってはナンセンスです。

于 2013-04-30T07:10:26.577 に答える
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; コード外部参照:_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; 関数の終わり_memcpy_0
__picsymbolstub4:3947B388 off_3947B388 DCD _memcpy_ptr-0x3947B388

ご覧のとおり、このコードはPCに相対的であり、これがおそらくMSHookが失敗する理由です。代わりに、このスタブが呼び出す実際の関数をフックしようとすると、機能します。

于 2014-01-06T15:23:09.823 に答える