-
-
[求助]iOS下面注入的dylib怎么获取目标程序的符号地址
-
发表于:
2013-3-25 23:05
8152
-
[求助]iOS下面注入的dylib怎么获取目标程序的符号地址
在做一个dylib注射,如果我想获得printf之类的函数地址只需要:
h = dlopen(null, RTLD_NOW);
funcAddr = dlsym(h, "printf");
因为printf是动态加载的函数,所以用dlsym可以直接获取到地址,但是现在我希望获取的符号是原本程序的内部符号,也就是可执行文件本身的函数和静态库,似乎用dlsym是不能加载的。
其实内部符号的可以直接用nm或者otool工具导出,用gdb调试程序的时候也可以用info functions来看到内部符号的地址。直接利用这些工具找出函数地址,再嵌入到我的dylib里面倒也不是不行,但是毕竟这么做的话,目标程序一旦发布新版本,我也要重新修改一次地址,比较麻烦。
我认为,既然gdb和nm、otool都可以做到,我应该也可以在运行时解析出内部符号的地址。有没有人有这方面的经验呢?我现在的思路是能否能直接从mach-o里读取出来符号表,然后获取到函数地址。
已经解决:
找到了原因,其实用上面的方法,dlsym是完全可以访问内部符号表的,当然前提是符号可以用nm、otool或者gdb查到。
昨天在这里提问是因为手滑把参数写错了。代码里面有多处调用dlsym,最后对这些调用返回的结果进行判断,只要有一个调用失败就会报错。刚才我把每一次调用的返回值输出来看,发现只有一处调用失败,而且是因为我传进去的参数有拼写问题。
最后谢谢大家的关心,希望能有更多人关注iOS安全这个领域。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课