1 开发者要达到反调试的目的,必然是在某个地方(大多数还是在main函数)执行了ptrace(PT_DENY_ATTACH, 0, 0, 0)。所以反反调试的思路非常简单,就是阻止这个执行的发生。
2 dlopen以指定模式打开指定的动态连接库文件,并返回一个句柄给调用进程,dlerror返回出现的错误,
dlsym通过句柄和连接符名称获取函数名或者变量名,
dlclose来卸载打开的库。
dlopen打开模式如下:
RTLD_LAZY 暂缓决定,等有需要时再解出符号
RTLD_NOW 立即决定,返回前解除所有未决定的符号。
3 通常我们编写的tweak插件之所以能依附上目标app 就是在于其安装后xx.dylib和xx.plist文件处在/Library/MobileSubstrate/DynamicLibraries/下,应用程序启动的时候系统会匹配加载指定对应bundleID的应用,以此将xx.dylib库注入到目标app中从而生效 。
倘若发现可执行文件头部有__RESTRICT/__restrict这个section 则对应的xx.dylib库就不会被加载注入
网友评论