iOS越狱开发 常用检测Hook 代码 闪退检测断点

__attribute__((constructor)) static void entry(){

    
    rebind_symbols((struct rebinding[1]){{"abort", abort_hook, (void *)&abort_old}}, 1);
    rebind_symbols((struct rebinding[2]){{"exit", myexit, (void *)&orig_exit}}, 1);
    rebind_symbols((struct rebinding[2]){{"_dyld_get_image_name", my_dyld_get_image_name, (void *)&orig__dyld_get_image_name}}, 1);
    rebind_symbols((struct rebinding[2]){{"_dyld_image_count", my_dyld_image_count, (void *)&orig_dyld_image_count}}, 1);
    
}


//void     exit(int) __dead2;
static void     (*orig_exit)(int *s);
void myexit(int* s){
    printf("myexit =(%s)\n", "myexit");
    orig_exit(s);
}

//void     abort(void) __dead2;
static void (*abort_old)(void);
void abort_hook(void) {
}

//extern uint32_t                    _dyld_image_count(void)
static uint32_t  (*orig_dyld_image_count)(void);
uint32_t *  my_dyld_image_count(void){
    uint32_t *s = orig_dyld_image_count();
    printf("orig__dyld_get_image_name =(%s)\n", s);
    return s;
}

//extern const char*                 _dyld_get_image_name(uint32_t image_index)           __OSX_AVAILABLE_STARTING(__MAC_10_1, __IPHONE_2_0);
static char*     (*orig__dyld_get_image_name)(uint32_t image_index);
char*   my_dyld_get_image_name(uint32_t image_index){
    char* s = orig__dyld_get_image_name(image_index);
    printf("orig__dyld_get_image_name =(%s)\n", s);
    return s;
}
发布了272 篇原创文章 · 获赞 123 · 访问量 109万+

猜你喜欢

转载自blog.csdn.net/qq_21051503/article/details/104837855