關於iOS應用安全之代碼混淆專題分為以下篇章:
1.iOS應用安全之代碼混淆設計篇
2.iOS應用安全之代碼混淆實現篇
iOS應用安全隨著各種事件的曝出,越來越受到重視。那針對iOS應用安全方面能做點什麼呢。如何讓我們開發的應用更安全一點呢。要知道如何才能安全,就要瞭解iOS應用怎麼就不安全了呢。現在隨著越獄技術的提高和各種工具的完善,使得逆向分析一款iOS應用變成了一個輕而易舉事情。因此,要使的iOS應用更安全,那就從逆向工程的各個階段進行層層阻攔。當然,這個只是增加逆向到難度而已~。
iOS應用逆向分析分為靜態分析和動態分析。分析的前提是先有一部越獄過的裝置,然後再應用去殼,將去殼後的應用利用工具class-dump匯出標頭檔(先透漏下,本文就是針對它的,哈哈~),用於剖析器邏輯及設計實現,利用IDA 或Hoper進行反組譯碼。以上兩種方法為靜態分析。利用LLDB對應用進行動態調實驗證,那這個方法就是動態分析了。逆向的事也不多說了(就知道這些-_-|),本文的設計就是為了增加匯出標頭檔分析的難度,讓逆向人員看著標頭檔兩眼冒金星~~
為了達到看一眼兩眼冒金星的效果,現打算將以下內容進行混淆:
1.檔案名稱
2.類名
3.協議名
4.屬性名稱
5.函數名
元芳,你怎麼看。將以上內容混淆後,然後編譯發布。這樣使用clas-dump匯出的標頭檔,應該也是混淆後的了。這樣也就達到了我們的目的。
採用何種方式混淆呢。混淆無非就是將原來字解釋的關鍵字變的不可讀,那就簡單點,直接調用系統內建的md5密碼編譯演算法加密就可以了。
那混淆就簡單的很了,混淆看來是指日可待了~
混淆原理:將以上需要混淆的內容關鍵字提取去來,然後md5加密,然後再替換工程中出現的關鍵字。
原理很簡單,要考慮哪些問題呢。
1.如何提取關鍵字。
2.混淆演算法就簡單了,這個不是問題...
3.混淆後的關鍵字,怎麼替換原來的關鍵字呢。
4.混淆後的工程還要還原回去嗎。
5.混淆程式採用何種方式實現。
...
1.如何提取關鍵字。
提取關鍵字,當然是根據各種關鍵字自己的特性使用工具自動完成提取的。人工提取那還不瘋了。。。如果工具提取,那符合規則的關鍵字包括系統的,不就都提取出來了。這樣程式還能編譯通過嗎。也就是說提取關鍵字,只能提取自訂的,不能把系統自己產生的或使用的也提取出來。這個有點麻煩~~~~~。
2.混淆演算法
md5,這個是無法復原的,所以混淆後,要保留關鍵字和加密後的對應表,方便後續排除bug用。
3.混淆後的關鍵字,怎麼替換原來的關鍵字呢。
這個當然是使用工具批量替換了,如果遇到以下情況怎麼辦。
原字串:“This is my fish.” 要將is” 替換為”is not“。我們希望的當然是:“This is not my fish.” 而不是“This not is not my fis noth.” 。也就是說,要達到想要的目的,必須是單詞匹配替換,這個很重要。
4.混淆後的工程還要還原回去嗎。
能混淆,當然能還原回去,但是好像沒有必要哦~~,那就不考慮還原回去了,我的地盤聽我的,呵呵。
5.混淆程式採用何種方式實現。
首先當然是指令碼了,命令列工具豐富的很,拿來用即可。只是可惜,還要一個個學習而已。
還整點啥景呢。沒了就開始整唄~