ios dylib反检测系统api


#import "fishHookDemo.h"
#import "fishhook.h"
#import <mach-o/dyld.h>
#include<string.h>

@implementation fishHookDemo

char *arr[1000];

+ (void)load{
    struct rebinding ptracebd, db_name;
    // 要hook的方法名
    ptracebd.name = "_dyld_image_count";
    db_name.name = "_dyld_get_image_name";

    // 保存原来方法的地址
    ptracebd.replaced = (void *)&dyld_image_count_p;
    db_name.replaced = (void *)&dyld_get_image_name_p;

    // 新方法
    ptracebd.replacement = my_dyld_image_count;
    db_name.replacement = my_dyld_get_image_name;

     
    struct rebinding bds[] = {ptracebd, db_name};
    rebind_symbols(bds, 2);
//    _dyld_get_image_name()
}
 
// 函数指针
uint32_t (*dyld_image_count_p)(void);
const char* (*dyld_get_image_name_p)(uint32_t image_index);

uint32_t my_dyld_image_count(void){
    int dyCount = dyld_image_count_p();
    // 新计数
    int index = 0;
    for (int i = 0; i < dyCount; i++) {
        // 获取原始dylib库
        char * imageName = dyld_get_image_name_p(i);
        NSString *res = [NSString stringWithUTF8String:imageName];
        NSLog(@"dylib String-->:%@",res);
        // 过滤敏感dylib
        if (![res containsString:@"xxx.dylib"]) {
            arr[index++]=imageName;
//         strcpy(arr[index++],imageName);
        }


        
          
       }
    return index;
}
const char*   my_dyld_get_image_name(uint32_t image_index){
    return arr[image_index];
}

@end
本文章仅供学习参考,如有版权侵犯,请联系作者修改,转载请注明出处!
原文地址:https://www.cnblogs.com/HugJun/p/15251760.html