1、檢測是否被注入,阻止cycript等的動態庫注入。
2、在 xcode 編譯選項中 other linker flags 中新增 -wl,- sectcreate,__restrict,__restrict,/dev/null 標識。(注:這個方案只適合ios10.0以下系統,而且個別系統打出來的包還會發生crash,和swift混編的專案時候可能會出問題,所以現在不建議用這種方式)
3、在關鍵業務上進行越獄檢測,如果是越獄手機則進行提示或者直接退出程式,保證業務安全。
1、檢測plist檔案中是否有signeridentity值,signeridentity值只有ipa包被反編譯後篡改二進位制檔案再次打包,才會有此值。(注:如果替換資源檔案,比如、plist檔案等是沒有signeridentity這個值的。猜測只有改了二進位制檔案才會有此值(待驗證) )
2、檢測 cryptid 的值來檢測二進位制檔案是否被篡改。網上說這也是一種解決方案,但是cryptid這個值好像在mach-o中才有,目前還不知道如何獲取該值。
更新:
總結embedded.mobileprovision檔案存在的情況:
存在該檔案:xcode打出來的ipa、企業證書分發的ipa、越獄手機上自己二次打包的ipa。
在此,著重對防止 二次打包方案3 做md5校驗的方案做一下總結,因為這裡做了太多的嘗試:
這種方案的突破點是找到相關檔案計算md5值,但是具體用哪些檔案來進行md5驗證呢?
通過檢視ipa包中的檔案,我們會發現有乙個coderesources 文 件,開啟這個檔案可以看到是乙個類似plist的檔案,裡邊記錄的是ipa包裡各個檔案的檔名和hash值。那麼我們是不是可以直接對比這個檔案來判斷是否被二次打包呢?
後來,我想要不就自己遍歷所有的檔案,自己對檔案內容做md5。最後,發現有些檔案每次打包之後都會發生變化或者在不同機型上計算出來的md5值不同,比如:assets.car、.nib檔案、二進位制檔案等。所以,該方案不可行。其實上邊coderesources檔案不一致就是因為個別檔案不一致導致的,因為coderesources檔案儲存的就是所有檔案的md5值。
解決方案:
1、判斷裝置是否越獄。(其實越獄的判斷有多種判斷方式)
//是否越獄
+ (bool)isprisonbreak
}// 讀取系統所有的應用名稱
pb = yes;
}pb = yes;
}struct stat stat_info;
//使用stat系列函式檢測cydia等工具
pb = yes;
}// 讀取環境變數
char *checkinsertlib = getenv("dyld_insert_libraries");
if (checkinsertlib)
return pb;
}+ (bool)issimulator
+ (bool)issecondipa else else
}}
注意:該方法可能會被hook掉,比如使用fishhook來hook此方法。
增強方案:1、呼叫syscall(26, 31, 0, 0, 0)。2、呼叫sysctl。3、直接編寫彙編**,利用svc 去觸發cpu的中斷命令。
// 阻止 gdb/lldb 除錯
// 呼叫 ptrace 設定引數 pt_deny_attach,如果有偵錯程式依附,則會產生錯誤並退出
#import #import typedef int (*ptrace_ptr_t)(int _request, pid_t _pid, caddr_t _addr, int _data);
#if !defined(pt_deny_attach)
#define pt_deny_attach 31
#endif
void anti_gdb_debug()
int main(int argc, char * ar**)
}
參考:
逆向開發
ios防護----反除錯
ios 逆向 -- 反除錯 和 反反除錯
ios安全攻與防(總篇)
重組 ipa (打包再簽名) - 窺打包簽名流程
ios如何判斷手機是否已越獄
'-wl,-sectcreate,__restrict,__restrict,/dev/null' 誤區
ios應用安全 - 完整性檢測
裝置是否越獄檢測、ipa檔案是否被篡改檢測
越獄開發4-越獄開發防護與破解
iOS防護 越獄檢測
首先我們進行常規的檔案路徑檢測 這裡都是一些越獄後的手機帶的一些框架和工具,未越獄的手機是裝不上的。void isok0 if nsfilemanager defaultmanager fileexistsatpath aptpath if nsfilemanager defaultmanager ...
iOS開發 資料加密安全防護
開發中,客戶端開發,密碼加密!伺服器不知道使用者的密碼!所以現在沒有 找回密碼 的功能,只有重置密碼!從業務邏輯來講,非對稱加密要比對稱加密要相對安全,但是效率不高,不提倡大量資料的加密的使用,而僅僅對關鍵資料進行使用。import viewcontroller.h import nsstring ...
iOS應用安全防護框架概述
攻易防難,唯有縝密 多層的防護網路才能可靠的保護我們ios應用程式的安全。那麼,乙個完善的ios應用安全防護框架都要寫哪些東西呢?首先,先梳理一下常見的逆向及攻擊工具。一部越獄的ios裝置,外加上述的逆向工具,給裸奔的ios應用程式帶來哪些威脅呢?針對上述安全隱患,我們的ios應用安全防護框架需實現...