ios安全加固 ios 加固方案

iOS皮皮豬呀發表於2023-11-10

 ios安全加固 ios 加固方案

目錄


一、iOS加固保護原理

從上面的分析來看,我們可以從以下幾個方面來保護我們的APP:

1.字串混淆

對應用程式中使用到的字串進行加密,保證原始碼被逆向後不能看出字串的直觀含義。

2.類名、方法名混淆

對應用程式的方法名和方法體進行混淆,保證原始碼被逆向後很難明白它的真正功能。

3.程式結構混淆加密

對應用程式邏輯結構進行打亂混排,保證原始碼可讀性降到最低。

4.反除錯、反注入等一些主動保護策略

這是一些主動保護策略,增大破解者除錯、分析APP的門檻。

4.1字串加密字串會暴露APP的很多關鍵資訊,攻擊者可以根據介面顯示的字串,快速找到相關邏輯的處理函式,從而進行分析破解。加密字串可以增加攻擊者閱讀程式碼的難度以及根據字串靜態搜尋的難度。

比如一個APP中有如下的一些字串定義在程式碼檔案中:

經過加密後,程式碼檔案變成如下的形式:

裡面已經沒有明文的字串了,全是用byte的形式儲存的,打包生成APP後,他們也就無法直觀的看出實際內容了,這對破解者會造成巨大的難度:

4.2符號混淆符號混淆的中心思想是將類名、方法名、變數名替換為無意義符號,提高應用安全性;防止敏感符號被class-dump工具提取,防止IDA Pro等工具反編譯後分析業務程式碼。

比如一款混淆後的APP,用IDA等工具開啟,如下圖所示:

“Labels”欄裡,顯示的這些符號,不管是類名還是方法名,誰也看不出來到底什麼意思,這個函式到底是什麼功能,就有點丈二和尚摸不著頭腦的感覺,這就大大增加了破解者分析APP的難度。

4.3程式碼邏輯混淆程式碼邏輯混淆有以下幾個方面的含義:

對方法體進行混淆,保證原始碼被逆向後該部分的程式碼有很大的迷惑性,因為有一些垃圾程式碼的存在;

對應用程式邏輯結構進行打亂混排,保證原始碼可讀性降到最低,這很容易把破解者帶到溝裡去;

它擁有和原始的程式碼一樣的功能,這是最最關鍵的。

混淆前後的對比如下(左邊是原始結構,右邊是混淆後的結構):

下面以混淆工具 ipaguard為例:

無論是加密還是執行時虛擬機器,最後都可以透過執行時除錯把程式碼反向生成出來原來的程式碼,雖然能抵禦低端的駭客攻擊,但是對高階駭客卻形同虛設。 程式碼混淆是透過修改原始碼結構和變數名,使得程式碼難以被理解和反編譯。這可以駭客獲取應用程式的程式碼,也會很難理解它,不管他是高階還是低端的駭客,目前都沒有有效的方法來還原為原來的程式碼,是公認的非常有效的方法之一。下面以ipaguard為例子介紹怎麼對ipa檔案中的類、方法、方法引數、變數等進行全面修改混淆,使其名稱成為沒有意義的亂碼,極大地增加應用破解的難度。ipaguard程式碼混淆工具支援對OC、Swift、Flutter、H5、HBuilder、Unity3D、Cocos2dx等各種開發平臺開發的app。

二 程式碼混淆步驟

1. 選擇要混淆保護的ipa檔案

 

2. 選擇要混淆的類名稱

選擇左側的程式碼模組中的OC類名稱或者Swift類名稱,選擇IPA種要混淆的二進位制檔案,然後勾選可執行檔案程式碼裡面的類名稱。如果類太多可以使用搜尋檢視功能,ipaguard提供了級別選擇,名稱搜尋,已選未選過濾來幫助配置混淆物件。

 

3. 選擇要混淆保護的函式,方法

選擇左側程式碼模組下的oc方法或者swift方法,點選右側的選擇檔案選取一個可執行二進位制檔案,勾選需要混淆保護的方法和函式。ipaguard提供了風險等級過濾,名稱搜尋過濾,根據類名稱過濾條件來輔助配置混淆目標

 

4. 配置簽名證照

點選左側的簽名配置,設定ios簽名證照,描述檔案等資訊。測試階段用開發證照,這樣可以方便安裝到測試機子上檢驗是否測試後的app執行正常;最終配置測試ok,釋出的時候再改成釋出證照,混淆配置完後可以提交上架。 

 

5. 混淆和測試執行

點選開始處理按鈕,ipaguard將對ipa中選中的內容進行混淆保護,並安裝混淆好的ipa到手機上,執行如果ok,點選儲存配置,下次直接載入配置即可,無需每次配置要混淆的內容。 

ipaguard在做混淆這塊還是做的很人性化的,混淆目標可控,強度可控,極大地簡化了配置混淆內容的過程,視覺化的操作也非常的方便。

3.4URL編碼加密對程式中出現的URL進行編碼加密,防止URL被靜態分析。

3.5網路傳輸資料加密對客戶端傳輸資料提供加密方案,防止透過網路介面的攔截獲取資料。

3.6主動保護策略除了上面的一些被動保護方法,我們還可以加入一些主動的防護機制,比如反除錯等。

iOS平臺下的Anti-Debug方法一般有以下一些:

檢查程式的狀態是否為 P_TRACED。

呼叫ptrace請求來檢查程式是否被除錯。由於可能被攻擊者繞過該方法的呼叫,在應用的多處增加ptrace函式會提高應用的安全性。

透過sysctl檢視資訊程式裡的標記,判斷自己是否正在被除錯。sysctl是用以查詢核心狀態的介面,並允許具備相應許可權的程式設定核心狀態。

iOS下的這些方法,相對於Linux下的方法要少很多,例如fork一個子程式,ptrace父程式進行檢測方式不再奏效。而且,要完全防止程式被除錯或者被逆向,理論上是不可能的,但可以增加破解者除錯的難度。

總之,新增以上的一些保護措施後,iOS APP的安全性會獲得很大的增強,大大提高了破解者破解的難度。對於iOS開發者來說,有必要了解這些措施,特別是針對一些金融、證券類APP的開發,保護方面的需求比較大,比如國內某知名移動支付工具就新增了一些除錯檢測以及反除錯的功能。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70032199/viewspace-2994724/,如需轉載,請註明出處,否則將追究法律責任。

相關文章