白名单检测
上一篇文章中我们解决了iOS10以下系统的防止动态库注入的方式,这篇文章我们通过白名单检测
的方式来防止动态库注入
- 我们通过dyld的函数,检测出当前程序的所有依赖的动态库,
libStrs
是你白名单的动态库路径
#import <mach-o/dyld.h>
#import <mach-o/loader.h>
+(void)load
{
int count = _dyld_image_count();//你进程依赖库的数量!
for (int i = 1; i < count; i++) {
const char * imageName = _dyld_get_image_name(i);
// printf("%s",imageName);
if (!strstr(libStrs, imageName)) {//如果这个库不在白名单中!
// printf("该动态库有危险!%s\n",imageName);//exit(0)
}
}
}
-
白名单有很大的误伤性,所有白名单的制作要具有包容性,当我们检测到非法动态库,最好提交给服务器,由服务器去判断,
-
注意
libStrs
不要放在本地,放在服务器上,因为字符串常量在放在DATA
区,是可以通过mach-o文件修改的,而且每个系统版本的动态库路径有可能会改变,就不能再新系统中做到兼容
网友评论