上次分享了使用 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
指令造成的。