讨论一下 如何检测task for pid

有一种方法 是通过task_get_exception_ports 查找异常端口 ,但是找了一遍 都没看到有实现的源码

之前逆lazada的反调试,用了这玩意,看起来像是配合task_set_exception_ports自己实现了一个小调试器,自己调试自己,不让别人attach

是的 某些app 也会用到task_set_exception_ports 具体如何实现 确实不知道 :smiling_face_with_tear:

它那块代码没混淆,记得当时反编译一下挺清楚的,源码奉上。这东西用的人确实少

我找来看看[quote=“lkttle, post:4, topic:24090, full:true, username:gfbdg”]
它那块代码没混淆,记得当时反编译一下挺清楚的,源码奉上。这东西用的人确实少
[/quote]

:+1:谢谢

#pragma mark - task_get_exception_ports
void anti_debug_exception_port(void) {
    struct ios_execp_info {
        exception_mask_t masks[EXC_TYPES_COUNT];
        mach_port_t ports[EXC_TYPES_COUNT];
        exception_behavior_t behaviors[EXC_TYPES_COUNT];
        thread_state_flavor_t flavors[EXC_TYPES_COUNT];
        mach_msg_type_number_t count;
    };
    struct ios_execp_info *info = malloc(sizeof(struct ios_execp_info));
    __unused kern_return_t kr = task_get_exception_ports(mach_task_self(), EXC_MASK_ALL, info->masks, &info->count, info->ports, info->behaviors, info->flavors);
    for (int i=0; i<info->count; i++) {
        if (info->ports[i] != 0 || info->flavors[i] == THREAD_STATE_NONE) {
            NSLog(@"being debugged");
            exit(1);
        }
    }
    free(info);
}
1 个赞