获取加载的动态链接库名字

除了dladdr 和_dyld_get_image_name之类还有什么方法可以获取加载的image名字

_dyld_get_all_image_infos```

大概还有三种吧.

// get dyld load address by task_info, TASK_DYLD_INFO
zpointer zz_macho_get_dyld_load_address_via_task(task_t task) {
    // http://stackoverflow.com/questions/4309117/determining-programmatically-what-modules-are-loaded-in-another-process-os-x
    kern_return_t kr;
    task_flavor_t flavor = TASK_DYLD_INFO;
    task_dyld_info_data_t infoData;
    mach_msg_type_number_t task_info_outCnt = TASK_DYLD_INFO_COUNT;
    kr = task_info(task, flavor, (task_info_t) &infoData, &task_info_outCnt);
    if (kr != KERN_SUCCESS) {
        KR_ERROR(kr);
        return 0;
    }
    struct dyld_all_image_infos *allImageInfos =
            (struct dyld_all_image_infos *) infoData.all_image_info_addr;
    allImageInfos = (struct dyld_all_image_infos *) malloc(
            sizeof(struct dyld_all_image_infos));
    if (zz_vm_read_data_via_task(task, infoData.all_image_info_addr,
                                 allImageInfos,
                                 sizeof(struct dyld_all_image_infos))) {
        return (zpointer) (allImageInfos->dyldImageLoadAddress);
    } else {
        return NULL;
    }
}

或者通过 dyld export 的 _dyld_get_all_image_infos

最后就是可以尝试 runtime parse macho 注意如何找到 load address.

6 个赞

zz_vm_read_data_via_task这个的实现在哪里,还有能说下 runtime parse macho大概是怎么操作的吗

zz_vm_read_data_via_task 这个是我自己写的函数通过 task 读内存, 如果你要 parse 自身, 直接读就行, 你看下我下面附的 stackoverflow 的链接.

runtime parse macho , 需要先找目标 dylib 的 load_address, 之后进行 “正常” 的 macho file parse.

链接无效呢,劳烦再发下

不好意思,原来是上面stackoverflow的链接

参考stackoverflow里面的方法,我在iphone demo中使用 task_for_pid(mach_task_self(),pid, &task),一直返回错误,task的值为0,是不是app需要root权限啊?

看task_for_pid返回多少, 然后去SDK里查这个返回值代表什么

一直返回的都是 (os/kern) failure

这是没签allow task for pid

你可以自己搜下

https://stackoverflow.com/questions/9944451/jailbreak-developer-iphone-with-task-for-pid

签了之后,还是没有权限:

我是ldid -Sent.xml JailbreakDetection 这样签的,ent.xml的内容如下:

<?xml version="1.0" encoding="UTF-8"?> com.apple.springboard.debugapplications get-task-allow task_for_pid-allow run-unsigned-code

我给你的链接不是有完整的ent了?

你这个ent看不懂

我用的就是你给的链接里面的 ent.xml

zz简直是我的指明灯。。