非越狱ios获取aslr

非越狱ios获取aslr,用了_dyld_get_image_vmaddr_slide(这个函数,但是在用个人签名签完以后,就获取不到了,还有什么其它的办法获取吗?或者获取当前运行的代码地址也行。谢谢老板了。

应该能获取到的,我这边可以

老铁,你是怎么写的?15.0以上的ios系统吗

iOS15以后,_dyld_get_image_vmaddr_slide(0)获取的不是可执行主程序的偏移(6s + iOS15.6),一种方式是使用_dyld_get_image_name需要查找到需要的可执行文件的序号然后再使用_dyld_get_image_vmaddr_slide(idx)获取

也有说法是说跟越狱工具有关系才导致问题,但我没有验证,欢迎补充指正

1 个赞
static intptr_t alsr = -1;
if(alsr == -1) {
    for (int i = 0; i < _dyld_image_count(); i++) {
        const struct mach_header *mh = _dyld_get_image_header(i);
        if(mh->filetype == MH_EXECUTE) {
            intptr_t vmaddr_slide = _dyld_get_image_vmaddr_slide(i);
            alsr = vmaddr_slide;
        }
    }
}

遍历image,读取macho header,判断是否是可执行文件,然后用_dyld_get_image_vmaddr_slide

1 个赞