DYLD_INSERT_LIBRARIES的那些事

上次分享了使用 DYLD_INSERT_LIBRARIES 环境变量,可以不修改App的任何字节,实现注入dyld的过程。文章地址Cornerstone 4.0 破解教程

0x00 变数

最近试着用同样的方案破解 Reveal 14, 但是只要设置环境变量DYLD_INSERT_LIBRARIES就会报以下错
dyld: warning: could not load inserted library 'xxx.dylib' into library validated process because no suitable image found. code signature in...
害的我又是谷歌,又是百度的,始终没有找到解决方案,经过不懈的努力搜索,看到一篇文章防止tweak依附,App有高招;破解App保护,tweak留一手,恍然大悟,原来环境变量DYLD_INSERT_LIBRARIES是可以被忽略的,但是按照文章说明,并没有在Reveal中发现__RESTRICT/__restrict字段。就这样搞了两天,问题始终得不到解决。

0x01 方案

根据错误提示,可以发现是验证了签名什么的,搜索关键字macos 取消加载 dyld 的签名验证发现了端倪。刚接触 DYLD_INSERT_LIBRARIES 时,觉得这就是一个系统bug啊,果然事实证明这就是一个bug,苹果在高版本10.12修复了这个bug,具体参见dylib动态库加载过程分析,macOS软件内幕,有兴趣的可以自己阅读。dyld是苹果操作系统一个重要组成部分,而且令人兴奋的是,它是开源的,任何人可以通过苹果官网下载它的源码来阅读理解它的运作方式(下载地址:Source Browser),了解系统加载动态库的细节。看到这句话,就觉得还是有转机的,转到改网站下载版本dyld-433.5.tar.gz,打开src->dyld.cpp,搜索could not load inserted字样,果然找到了,仔细阅读,发现gLinkContext.processUsingLibraryValidation这个判断下面的打印的log和我的很像,搜索processUsingLibraryValidation,找到一处

if ( flags & CS_REQUIRE_LV ) {
    gLinkContext.processIsRestricted = false;
    //gLinkContext.requireCodeSignature = true;
    gLinkContext.processUsingLibraryValidation = true;
}

问题就出现在这,发现CS_REQUIRE_LV,搜索之,找到macos-disable-library-validation下载,安装。终于不再提示signature类似的错误了。

0x02 后记

加载DYLD_INSERT_LIBRARIES的问题是解决了,但是会出现新错误Illegal instruction非法指令,看来这软件还验证了其他的。最终放弃完美破解Reveal 14,不完美破解可以看这个绕过最新版本Reveal的激活检测。或许Illegal instruction就是ud2指令造成的。

你可能感兴趣的:(DYLD_INSERT_LIBRARIES的那些事)