Closed zhshijie closed 4 years ago
问题描述: 使用 hookZz 来 hook mach_msg 方法时,会导致程序奔溃。复现步骤如下:
查看系统日志后,崩溃记录如下:
Incident Identifier: 19692A36-D9F0-4F6A-9208-1FBD99916D6F CrashReporter Key: c07a42931a4c65ba1ff9ff0c099f299fe8440a22 Hardware Model: iPhone10,1 Process: TestHook [3374] Path: /private/var/containers/Bundle/Application/75CD7B07-0D3F-4C16-BE29-1D858D9A42C1/TestHook.app/TestHook Identifier: com.zsj.TestHook Version: 1 (1.0) Code Type: ARM-64 (Native) Role: Non UI Parent Process: launchd [1] Coalition: com.zsj.TestHook [2958] Date/Time: 2019-09-18 11:19:50.9424 +0800 Launch Time: 2019-09-18 11:19:46.7515 +0800 OS Version: iPhone OS 12.4.1 (16G102) Baseband Version: 3.70.01 Report Version: 104 Exception Type: EXC_CRASH (SIGKILL - CODESIGNING) Exception Codes: 0x0000000000000001, 0x0000000000000000 Exception Note: EXC_CORPSE_NOTIFY Termination Reason: Namespace CODESIGNING, Code 0x2 Triggered by Thread: 0 Thread 0 name: Dispatch queue: com.apple.main-thread Thread 0 Crashed: 0 libsystem_kernel.dylib 0x00000001919140f4 mach_msg_trap + 8 1 libsystem_kernel.dylib 0x00000001919135a0 mach_msg + 72 2 libsystem_kernel.dylib 0x0000000191911c38 vm_copy + 100 3 hookzz 0x0000000102d4275c 0x102d38000 + 42844 4 hookzz 0x0000000102d407a4 0x102d38000 + 34724 5 hookzz 0x0000000102d40738 0x102d38000 + 34616 6 hookzz 0x0000000102d417e4 0x102d38000 + 38884 7 hookzz 0x0000000102d421bc 0x102d38000 + 41404 8 hookzz 0x0000000102d42378 0x102d38000 + 41848 9 hookzz 0x0000000102d424f0 0x102d38000 + 42224 10 TestHook 0x0000000102d12704 0x102d0c000 + 26372 11 libdispatch.dylib 0x00000001917c17d4 _dispatch_client_callout + 16 12 libdispatch.dylib 0x0000000191798c34
后续只要不是关闭 debug 模式,采用 hookZz 进行 hook 时,都会导致程序崩溃。 以 "Namespace CODESIGNING" 作为关键字进行搜索时,找到了如下文章: http://iosre.com/t/topic/8628 文章说可能是 非越狱设备上substrate会触发内核校验 导致了崩溃。
非越狱设备上substrate会触发内核校验
想问下是否有什么解决方法。
PS: 之所以不使用 fishhook 去 hook mach_msg,是因为发现采用 fishhook 并不能 hook 系统库(如 WebKit )中的 mach_msg。猜测是由于 iOS 使用了动态库共享缓存,导致系统库中符号的外部地址已经全部被确定了,不需要在通过动态链接去取值,所以使用 fishhook 去修改动态符号库里面的地址也起到 hook 的作用。
WebKit
找到了作者以前写的文章 HookFramework 架构设计,里面最后一段写了崩溃原因。 想问下作者这个问题现在有解决方法吗? 谢谢。
inlinehook 无法在非越狱上运行
问题描述: 使用 hookZz 来 hook mach_msg 方法时,会导致程序奔溃。复现步骤如下:
查看系统日志后,崩溃记录如下:
后续只要不是关闭 debug 模式,采用 hookZz 进行 hook 时,都会导致程序崩溃。 以 "Namespace CODESIGNING" 作为关键字进行搜索时,找到了如下文章: http://iosre.com/t/topic/8628 文章说可能是
非越狱设备上substrate会触发内核校验
导致了崩溃。想问下是否有什么解决方法。
PS: 之所以不使用 fishhook 去 hook mach_msg,是因为发现采用 fishhook 并不能 hook 系统库(如
WebKit
)中的 mach_msg。猜测是由于 iOS 使用了动态库共享缓存,导致系统库中符号的外部地址已经全部被确定了,不需要在通过动态链接去取值,所以使用 fishhook 去修改动态符号库里面的地址也起到 hook 的作用。