注:原文---念茜的博客
題外話
開篇先扯幾句題外話,許多朋友都問我怎么不寫防啊,我確實有點猶豫。
hackers總是想象如果自己是開發(fā)者會怎么寫,然后才能找到入手點。同理,開發(fā)者們也要想象自己是hackers會怎么做,才能采取相應(yīng)的防御措施。然后,就是一場遞歸的博弈。
拿越獄檢測這件事來說,起初大家只需判斷有無安裝Cydia就好了,hackers們說好,那我就不安裝Cydia也可以動手腳。開發(fā)者們又說,那你一定得用的上MobileSubstrate,bash,ssh吧,我去檢測手機有沒有安裝這些工具。可是又有什么用呢?你判斷什么我繞過去什么。
當(dāng)class-dump大肆流行,函數(shù)符號都被暴露,開發(fā)者想盡辦法藏起自己的敏感函數(shù)代碼。hackers們也知道class-dump的死穴在哪里,于是新的檢索辦法油然而生。也就說,當(dāng)一個防御手段成為流行,它就不會再是個讓hackers大罵“真特么費勁”的防御手段了。比如之前介紹的一個小技巧:內(nèi)存數(shù)據(jù)擦除,hackers知道開發(fā)者都去擦數(shù)據(jù)了,那我hook memset在你擦之前去讀就好了。開發(fā)者說:我直接寫硬盤上然后刪除!hackers說:難道你沒聽說過文件恢復(fù)?

OK,貧的有點多了,本文介紹一下防御相關(guān)的話題----iOS的數(shù)據(jù)保護(hù)API。
數(shù)據(jù)保護(hù)API
文件系統(tǒng)中的文件、keychain中的項,都是加密存儲的。當(dāng)用戶解鎖設(shè)備后,系統(tǒng)通過UDID密鑰和用戶設(shè)定的密碼生成一個用于解密的密碼密鑰,存放在內(nèi)存中,直到設(shè)備再次被鎖,開發(fā)者可以通過Data
Protection API 來設(shè)定文件系統(tǒng)中的文件、keychain中的項應(yīng)該何時被解密。
1)文件保護(hù)


2)keychain項保護(hù)


應(yīng)用實例
把一段信息infoStrng字符串寫進(jìn)文件,然后通過Data Protection API設(shè)置保護(hù)。

設(shè)備鎖屏(帶密碼保護(hù))后,即使是越獄機,在root權(quán)限下cat讀取那個文件信息也會被拒絕。
